谁能说明为什么出错?有关pretranslatemessage问题

xylhh2008 2009-12-30 12:05:39
我在对话框上放了一个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 切换到别的应用程序时都会报错,然后自动退出。

程序中没有添加别的代码。就处理了这个消息。
这是为什么呢?
...全文
138 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mmilmf 2009-12-30
  • 打赏
  • 举报
回复

if (GetFocus()!=NULL&&GetFocus()->GetDlgCtrlID() == IDC_EDIT1)
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_UP)
{
SetDlgItemText(IDC_EDIT1,"dfas");
return true;
}
}

这样试试
mmilmf 2009-12-30
  • 打赏
  • 举报
回复
主要是你在使用Alt+Tab键的时候,此时的焦点不在你的对话框上。
而PreTranslateMessage()能够捕获的到Alt+Tab键按下的消息
执行GetFocus()->GetDlgCtrlID() 这句话,就出问题啦,
此时的焦点并不在Edit控件上,所以GetFocus()函数返回的是NULL
在使用->GetDlgCtrlID();就是非法使用空指针,导致程序崩溃,退出
向立天 2009-12-30
  • 打赏
  • 举报
回复
去掉return true试试
captainliyun 2009-12-30
  • 打赏
  • 举报
回复
同意楼上的意见.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧