
在应用程序类中定义:
用mfc生成的工程中都有一个名为cxxxapp的类,它派生于cwinapp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数,就可以实现全局访问了。
从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得cxxxapp类的指针,所以我们可以在文档、视
图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“afxgetapp()”获得cxxxapp类的指针,用
“afxgetapp()->成员”访问变量或函数。
例:
testh:(应用程序类头文件)
class
ctestapp
:
public
cwinapp
+
i;
q+
}
public:
int
x;
//全局变量
int
f(int
y);
//全局函数
)
x
s+
s'
n+
u
…………
testcpp:(应用程序类程序文件)
int
ctestapp::f(int
y)
//全局函数定义
{
定义在ctestapp类中的变量和函数可以在其它类中被访问。比如在视图的某函数中要访问变量x和函数f():
void
ctestview::xyz()
{
ctestapp
app
=
(ctestapp
)afxgetapp();
//生成指向应用程序类的指针
/
app
int
z
=
app->f(1);
//访问函数f()
0
r,
}
KillTimer( nNumb ) //关闭当前窗口 ID号为nNumb的定时器事件
KillTimer(
HWND hWnd,
UINT_PTR uIDEvent
);
HWND hWnd, 与特定timer相关联的窗口句柄,
UINT_PTR uIDEvent, 指定将要被销毁的timer的ID
假设有a对话框和b对话框。在a对话框上有个按钮,在a对话框代码里面添加#include"bh"
然后在按钮的响应函数里面添加
b
thedlg;
thedlgdomodal();
onok();
这样就打开b对话框和关闭a对话框了
确定需要删除的控件,以及控件对应的变量和函数。对话框仅存的一个退出按钮关联着一个控件变量和按钮按下事件处理函数。
对按钮右键“类向导”,或者直接从菜单“项目”中找到类向导,并找到按钮对应的处理函数,选中事件函数后,点击“删除处理程序”。
转到成员变量选项卡,选中需要删除的控件变量,点击“删除变量”。
类向导的删除工作完成后,可以查看程序,你会发现变量的定义、函数的声明和定义、数据交换函数的相关语句、消息映射中的相关信息都被注释掉了。
通过以上步骤,只是将类向导生成的定义部分注释掉了,但难保开发者在别的函数中调用了该控件的变量或者函数。
如果开发者清楚知道调用位置,可以直接找到后进行删除和修改,如果不知道也没关系,直接调试程序,编译过程中让软件自动发现错误。
编译出错后选择“否”,在错误列表中双击第一个错误选项,因为往往后面的错误都是由前面错误引起的先不用管。双击后会自动跳转到错误语句处,将相关语句删除或者修改就可以了。修改完再编译继续查错,直到没错为止。
最后别忘了在对话框中将按钮delete,再生成应用程序。
位或的关系,谁前谁后还不一样?
但是如下代码关机要安全得多
//功能:系统关机
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY,&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkpPrivileges[0]Luid);
tkpPrivilegeCount=1;
tkpPrivileges[0]Attributes=SE_PRIVILEGE_ENABLED;
//取得进程特权
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
ExitWindowsEx(EWX_SHUTDOWN,NULL) ;//关机
附赠1
//功能:系统重启
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
OpenProcessToken(GetCurrentProcess(),
TOKEN_QUERY|TOKEN_ADJUST_PRIVILEGES,
&hToken);
LookupPrivilegeValue(NULL,SE_SHUTDOWN_NAME,&tkpPrivileges[0]Luid);
tkpPrivilegeCount=1;
tkpPrivileges[0]Attributes=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
ExitWindowsEx(EWX_REBOOT,NULL);
附赠2
//功能:系统休眠
TOKEN_PRIVILEGES tp;
HANDLE hToken;
LUID luid;
LPTSTR MachineName=NULL;
if (!OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&hToken ))
{
return;
}
if(!LookupPrivilegeValue(MachineName, SE_SHUTDOWN_NAME, &luid))
{
return;
}
tpPrivilegeCount =1;
tpPrivileges[0]Luid = luid;
tpPrivileges[0]Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),NULL, NULL );
SetSystemPowerState(FALSE,TRUE);
附赠3
//功能:系统锁屏
LockWorkStation();//锁住计算机屏幕
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)