下例给
系统菜单添加两个新的 int CMainFrame:: OnCreate (LPCREATESTRUCT lpCreateStruct) { … //Make sure system menu item is in the right range. ASSERT (IDM_MYSYSITEM &0xFFF0)==IDM_MYSYSITEM) ASSERT (IDM-MYSYSITEMAppendmenu (MF_SEPARATOR) pSysMenu->AppendMenu (MF_STRING, IDM_MYSYSITEM, strMenuitem) … } 现在,选择系统
菜单项时用户应进行检测。使用ClassWizard 处理WM_SYSCOMMAND 消息并检测用户菜单的nID 参数: void CMainFrame:: OnSysCommand (UINT nID,LPARAM lParam) { //Determine if our system menu item was selected. if ( (nID &0xFFF0)==IDM_MYSYSITEM) { //TODO-process system menu item } else CMDIFrameWnd ::OnSysCommand (nID, lParam) } 最后,一个设计良好的UI 应用程序应当在系统菜单项加亮时在状态条显示一个帮助信息,这可以通过增加一个包含系统菜单基ID 的串表的入口来实现。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()重载,如果同样处理,就只有通过任务管理器结束程序了。
评论列表(0条)