在我的程序中写了CXX::OnOK()和CXX::OnCancel()的空函数,来屏蔽Enter按键和Esc按键后会退出程序,但是遇到2个问题:1.按下程序右上的小X也不能退出程序.
2.我的程序界面上有一个编辑框,和一个"确定"按钮,希望在编辑框中输入后按键盘上的"Enter"就相当于按下"确定"万分感谢.
2.我的程序界面上有一个编辑框,和一个"确定"按钮,希望在编辑框中输入后按键盘上的"Enter"就相当于按下"确定"万分感谢.
不过这样做会出现什么别的副作用就不清楚了。
按下程序右上的小X就是OnCancel
按确定就是OnOK在PreTranslateMessage屏蔽掉esc和对enter做特殊处理比较好,我个人觉得哦
{
EndDialog(IDCANCEL);
}
2.EDIT支持Enter,当输入Enter时OnOK()或者POSTMESSAGE(WM_CLOSE)
{
int i; switch(nID)
{
case 61536:
if (MessageBox("确定要退出此软件?", "短信游戏系统",MB_YESNO|MB_ICONQUESTION) == IDNO)
{
return;
}
theApp.m_db.DisConnectDb();
if (theApp.m_NOMachine)
{}
else
{
GetDlgItem(IDC_INFO)->SetWindowText("正在关闭数据库和所有端口,请等待...");
// 检查那些端口被打开
for (i=0; i<8; i++)
{
theApp.m_mobile[i].CloseComm();
if (theApp.iThreadIndex[i] != -1)
theApp.m_Page[theApp.iThreadIndex[i]].EndThread();
}
}
CDialogResize::OnCancel(); break;
default:
CDialog::OnSysCommand(nID, lParam);
break;
}
}
是虚函数.要修改其功能要重载它们,但是其默认在ONOK、ONCLOSE函数里调用父类的ONOK或是ONCANCEL函数.要达到自己的要求要重写它们,并且不调用父类的ONOK或是ONCANCEL函数
如:
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case 0x0d:
pMsg->wParam=VK_TAB;
break;
case VK_ESCAPE:
return;
break;
}
}
return CXXXDlg::PreTranslateMessage(pMsg);
}