防止用户进行正常的GUI 操作
2006-07-23 11:30:33 来源:WEB开发网核心提示: 在实际的范例程序中还包含TRACE诊断代码,这些代码有助于你研究程序执行的过程细节,防止用户进行正常的GUI 操作(3),利用上面的代码行,用户便不能移动窗口以及调整窗口大小了,图四你可能认为这下万事大吉了,但是还有一个漏洞,但事情真是这样吗?你知不知道Windows应用程序中有多少种方法
在实际的范例程序中还包含TRACE诊断代码,这些代码有助于你研究程序执行的过程细节。利用上面的代码行。用户便不能移动窗口以及调整窗口大小了。
但事情真是这样吗?你知不知道Windows应用程序中有多少种方法可以移动窗口和调整窗口大小?如标题框中的最大/最小按钮以及系统菜单中的“移动”、“大小”等命令(见图三),不要跟我说你搞忘了。
图三
所幸的是搞定它们很容易。屏蔽掉标题框中的最大/最小按钮,方法是在PreCreateWindow函数中调整窗口风格:
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// 在标题框中去掉最大化/最小化按钮
cs.style &= ~(WS_MINIMIZEBOX|WS_MAXIMIZEBOX);
return CFrameWnd::PreCreateWindow(cs);
}
要从系统菜单中去掉那几个不想要的命令,必须在CMainFrame ::OnCreate函数中加上以下代码:
static UINT BadCommands[] = {
SC_SIZE, SC_MOVE,
SC_MINIMIZE, SC_MAXIMIZE, SC_RESTORE, 0
};
CMenu *pSysMenu = GetSystemMenu(FALSE);
for (int i=0; BadCommands[i]; i++) {
pSysMenu->RemoveMenu(BadCommands[i], MF_BYCOMMAND);
}
现在系统菜单变成了如下图四的样子,
图四
你可能认为这下万事大吉了,但是还有一个漏洞,想一想还有哪里可以让用户移动窗口或调整窗口的大小?记住Windows中是有很多猫腻的!。
更多精彩
赞助商链接