我在对话框上放了一个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 切换到别的应用程序时都会报错,然后自动退出。程序中没有添加别的代码。就处理了这个消息。
这是为什么呢?
代码如下: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 切换到别的应用程序时都会报错,然后自动退出。程序中没有添加别的代码。就处理了这个消息。
这是为什么呢?
解决方案 »
- 关于CxImage类的使用
- WideCharToMultiByte 部分乱码
- 急!!单文档程序中如何通过按钮或菜单来切换不同的FormView?
- udp通信中如何使用无地址参数的send
- 升级,散分!
- 16位位图 555格式 的操作!
- 在Debug版下可以链接而在版下则不可以。两个版本的工程设置\Link\library module的设置都是相同的。
- 看在美女的份上---Help me!!!
- 在CView 中的消息响应OnHScroll中的参数pScrollBar怎么是空呢?
- 请问如何编程实现打开ODBC窗口和DataLink窗口并返回连接字符串????
- 这样制作MODELESS对话框好吗
- 发送文件的问题
而PreTranslateMessage()能够捕获的到Alt+Tab键按下的消息
执行GetFocus()->GetDlgCtrlID() 这句话,就出问题啦,
此时的焦点并不在Edit控件上,所以GetFocus()函数返回的是NULL
在使用->GetDlgCtrlID();就是非法使用空指针,导致程序崩溃,退出
if (GetFocus()!=NULL&&GetFocus()->GetDlgCtrlID() == IDC_EDIT1)
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_UP)
{
SetDlgItemText(IDC_EDIT1,"dfas");
return true;
}
} 这样试试