关于Dialog中,OnKeyDown(...)函数的问题.高手帮忙解释下!!!!

bigant888 2005-04-09 07:14:34
在Dialog模式下的应用程序,如果要截WM_KEYDOWN消息,只能在PreTranslateMessage(...)中截.
而如果用OnKeyDown(...),这个函数永远不能被执行(我没试出来).为什么?

相关的消息还有.WM_KEYUP,WM_CHAR.....

哪位高手知道,帮忙解释一下.
谢谢...
...全文
216 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
miladuo 2005-04-12
  • 打赏
  • 举报
回复
bang ni ding ba
DentistryDoctor 2005-04-12
  • 打赏
  • 举报
回复
只要Dialog有任何控件就截不到。
弄个空间的Dialog,删除上所有的东东,这样就可以截到了,不然键盘消息就被派发到获得焦点的控件去了,所以Dialog的OnKeyDown就没有响应了。
bigant888 2005-04-12
  • 打赏
  • 举报
回复
up
bigant888 2005-04-12
  • 打赏
  • 举报
回复
回复人: DentistryDoctor(雅克医生<改行做程序员了>)

是的,偶也知道是这样,但是,能为一下为什么会这样吗?
MFC是怎么发送给子控件的?

能说下吗?
goodheartppl 2005-04-11
  • 打赏
  • 举报
回复
自己派生一个对话框
bigant888 2005-04-10
  • 打赏
  • 举报
回复
UP
bigant888 2005-04-09
  • 打赏
  • 举报
回复
哪位知道,在按下一个键后.这个WM_KEYDOWN消息,CDialog的传递路径是什么?最后由哪个函数调用了?
mumutouv 2005-04-09
  • 打赏
  • 举报
回复
PreTranslateMessage(...)
if (WM_KEYFIRST <= pMsg->message && pMsg->message <= WM_KEYLAST)
{
if(pMsg->wParam == 0x0000000d && pMsg->lParam == 0x001c0001)
OnMyEnter();
else
return CDialog::PreTranslateMessage(pMsg);
}
else
return CDialog::PreTranslateMessage(pMsg);

这样的话ENTER键不会被传送到CDialog::PreTranslateMessage(pMsg);

也就不会DIALOG不会退出。
bigant888 2005-04-09
  • 打赏
  • 举报
回复
自己派生一个,对话框应用程序,不就是从CDialog里派生出来的了吗?
CxxxDlg :public CDialog
不解,能详细说一下吗,偶晕死了快!
woodwoodwood3 2005-04-09
  • 打赏
  • 举报
回复
自己派生一个对话框就可以截到了。由于对话框是windows操作系统内部的标准界面元素,它把这些消息用了。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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