我在对话框上放了一个edit 控件 IDC_EDIT1,然后再pretranslatemessage中截获键盘消息并进行处理,
代码如下:BOOL CDialogDlg::PreTranslateMessage(MSG* pMsg) 
{
if (GetFocus()->GetDlgCtrlID() == IDC_EDIT1) 
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_UP) 
{
SetDlgItemText(IDC_EDIT1,"dfas");
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}编译没有问题,每次运行时只要按alt+tab 切换到别的应用程序时都会报错,然后自动退出。程序中没有添加别的代码。就处理了这个消息。
这是为什么呢?

解决方案 »

  1.   

    主要是你在使用Alt+Tab键的时候,此时的焦点不在你的对话框上。
    而PreTranslateMessage()能够捕获的到Alt+Tab键按下的消息
    执行GetFocus()->GetDlgCtrlID() 这句话,就出问题啦,
    此时的焦点并不在Edit控件上,所以GetFocus()函数返回的是NULL
    在使用->GetDlgCtrlID();就是非法使用空指针,导致程序崩溃,退出
      

  2.   


    if (GetFocus()!=NULL&&GetFocus()->GetDlgCtrlID() == IDC_EDIT1) 

    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_UP) 

    SetDlgItemText(IDC_EDIT1,"dfas"); 
    return true; 

    } 这样试试