get message swicth(message ){ case WM_KEYDOWN: if (message.wparam == 27) return; break; default: }
//你需要相应消息 //如此简单 BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg) { //hitting the F5 key, force a refresh of the whole tree if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE) {//VK_ESCAPE 1B ESC key //OnRun(); return TRUE; } return CDialog::PreTranslateMessage(pMsg); }
重载PreTranslateMessage函数,在此函数中处理WM_KEYDOWN BOOL CDoscoDlg::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class
swicth(message ){
case WM_KEYDOWN:
if (message.wparam == 27)
return;
break;
default:
}
//如此简单
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
//hitting the F5 key, force a refresh of the whole tree
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
{//VK_ESCAPE 1B ESC key
//OnRun();
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
BOOL CDoscoDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if( pMsg->message == WM_KEYDOWN)
{
if( pMsg->wParam == VK_ESCAPE )
{
::TranslateMessage(pMsg);
::DispatchMessage(pMsg);
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
对话框不是有cancel按钮吗?对应消息处理函数是OnCancel(),在OnCancel()中把那唯一的一句注释掉就行了,如下:
void CYourDialog::OnCancel()
{
// TODO: Add extra cleanup here
//CDialog::OnCancel();//注释掉!!
}
修改了OnCancel()之后,可以再把cancel按钮的ID改成IDC_CANCEL,
可以再次映射(注意再次映射时应更改wizard提供的缺省函数名,比如
改成OnCancelClick ), 这样就可以继续用Cancel按钮了.这里还有个问题,修改了OnCancel以后,嘿嘿,"X"按钮和Alt-F4都不管用了.
要解决这个问题,还需要修改OnSysCommand映射.