MFC中如果我想让对话框的关闭按钮无效,应该怎么弄

MFC中如果我想让对话框的关闭按钮无效,应该怎么弄,第1张

1、关闭系统菜单:多种方式,修改对话框模板,SetWindowLong,修改CREATESTRUCT结构等,举例:在OnInitDialog()中添加:

SetWindowLong(this->m_hWnd,

GWL_STYLE,

GetWindowLong(this->m_hWnd,GWL_STYLE)

&

~WS_SYSMENU

)

2、屏蔽消息,如Alt+F4关闭等:在OnSysCommand中的

else

{

CDialog::OnSysCommand(nID,

lParam)

}

前面加上SC_CLOSE判断:

else

if(

nID

==

SC_CLOSE

)

{

//按下Alt+F4时,你的 *** 作,如显示一个提示消息,或什么也不做

}

else

{

CDialog::OnSysCommand(nID,

lParam)

}

3、如果你还想屏蔽ESC退出,那就重载,OnCancel(),并将其中的CDialog::OnCancel()注释掉。

4、还有一个OnOK()重载,如果同样处理,就只有通过任务管理器结束程序了。

确定需要删除的控件,以及控件对应的变量和函数。对话框仅存的一个退出按钮关联着一个控件变量和按钮按下事件处理函数。

对按钮右键“类向导”,或者直接从菜单“项目”中找到类向导,并找到按钮对应的处理函数,选中事件函数后,点击“删除处理程序”。

转到成员变量选项卡,选中需要删除的控件变量,点击“删除变量”。

类向导的删除工作完成后,可以查看程序,你会发现变量的定义、函数的声明和定义、数据交换函数的相关语句、消息映射中的相关信息都被注释掉了。

通过以上步骤,只是将类向导生成的定义部分注释掉了,但难保开发者在别的函数中调用了该控件的变量或者函数。

如果开发者清楚知道调用位置,可以直接找到后进行删除和修改,如果不知道也没关系,直接调试程序,编译过程中让软件自动发现错误。

编译出错后选择“否”,在错误列表中双击第一个错误选项,因为往往后面的错误都是由前面错误引起的先不用管。双击后会自动跳转到错误语句处,将相关语句删除或者修改就可以了。修改完再编译继续查错,直到没错为止。

最后别忘了在对话框中将按钮delete,再生成应用程序。

在某些情况下可以防止用户单击关闭按钮以关闭 MFC 应用程序中的框架窗口的窗口的标题栏中。 关闭按钮可以删除删除在 WS_SYSMENU 样式从帧窗口。 但是,此的 Minimize 最大化,和还原按钮也删除,并且无法添加。 这是 Windows 的设计的依据。要解决此限制,可以通过禁用关闭按钮来模拟没有关闭按钮在窗口的功能。 在 WM_CREATE 消息处理程序中的 MDI 子框架窗口(CMDIChildWnd 派生类) 禁用在关闭按钮使用下面的代码:CMenu *pSysMenu = GetSystemMenu(FALSE)ASSERT(pSysMenu != NULL)VERIFY(pSysMenu->RemoveMenu(SC_CLOSE, MF_BYCOMMAND))子框架窗口未处于最大化时, 以上代码禁止用户通过单击关闭按钮关闭子框架窗口。 当子框架窗口最大化时以上代码将使显示禁用关闭按钮。但是,用户仍然可以通过单击此窗口关闭按钮关闭子框架窗口。 为此这一点,请使用 WM_SYSCOMMAND 消息处理程序为下面的示例中的子框架的类:// CChildFrame is a CMDIChildWnd-derived class. void CChildFrame::OnSysCommand(UINT nID, LPARAM lParam){ if(nID == SC_CLOSE) returnCMDIChildWnd::OnSysCommand(nID, lParam)}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8166821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存