计算机二级考试C++辅导:CDialog中不响应OnKeyDown和一些相关问题

计算机二级考试C++辅导:CDialog中不响应OnKeyDown和一些相关问题,第1张

计算机二级考试C++辅导:CDialog中不响应OnKeyDown和一些相关问题,第2张

经常有人提出CDialog中响应键盘消息的OnKeyDown函数没有响应。结论是CDialog不响应OnKeyDown,对应的解决方案是:
bool CT est DLG::pretranslatiemessage(msg * pMsg)
{
/todo:在这里添加你的专用代码和/或调用基类
if(pMsg-> message = = WM _ KEYDOWN)
{
switch(pMsg-> wParam)
{
case VK _ LEFT:[]
案例VK _ RIGHT:
break;
case VK _ UP:
break;
案例VK_DOWN:
破;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
仔细研究后发现,CDialog是对应消息的OnKeyDown函数,但是这个消息在到达窗体之前已经被其子控件捕获了。如果表单中的所有控件都被删除,表单将捕获此消息。不过需要注意的是,MFC已经设置了VK_TAB、VK_LEFT、VK_RIGHT、VK_UP、VK_DOWN被处理,VK_RETURN也被系统捕获来处理相应的某些事件,所以即使表单中没有控件,这些键也无法被捕获,暂时只能通过PreTranslateMessage来解决。
只有当窗体没有可见的有效控件时,它才是。回复OnKeyDown。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 计算机二级考试C++辅导:CDialog中不响应OnKeyDown和一些相关问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情