按键消息是子窗口还是父窗口先收到?

rokia 2003-06-11 05:07:07

一个对话框中,有一个edit 编辑框 ,
在编辑框中按下一个键时,谁先收到 wm_keydown 消息?

...全文
363 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
rokia 2003-06-14
  • 打赏
  • 举报
回复
谢谢大家,再加点分!
yema55 2003-06-12
  • 打赏
  • 举报
回复
当前活动窗口
qrlvls 2003-06-12
  • 打赏
  • 举报
回复
up
triggerd 2003-06-12
  • 打赏
  • 举报
回复
父窗口处理,遇到子窗口,则交给子窗口,看看这段:
BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
WPARAM wParam, LPARAM lParam)
{
static HWND hCtrlBlock ;
static int iColor, iFigure ;
switch (message)
{
case WM_INITDIALOG:
..
case WM_COMMAND:
switch (LOWORD (wParam))
{
case IDOK:
iCurrentColor = iColor ;
iCurrentFigure = iFigure ;
EndDialog (hDlg, TRUE) ;
return TRUE ;

case IDCANCEL:
EndDialog (hDlg, FALSE) ;
return TRUE ;
case IDC_BLACK:
case IDC_RED:
SendMessage (GetDlgItem (hDlg, i),
BM_SETCHECK, i == LOWORD (wParam), 0) ;
return TRUE ;..
}
}
}


birdzxy 2003-06-12
  • 打赏
  • 举报
回复
我试了一下
EDIT获得焦点,在对话框中的WM_KEYDOWN中不能获得消息。
在对话框中子类化一下,新的EDIT可以先得到消息。
思危 2003-06-12
  • 打赏
  • 举报
回复
对话框先收到,你按一下回车就知道到了,如果CEdit先收到的话,是不会关闭对话框的。
对话框要先对收到的键盘消息进行一些处理,这与普通窗口是有区别的
cygroup 2003-06-12
  • 打赏
  • 举报
回复
按照Windows的标准做法,是唯一具有焦点的窗口EDIT先收到,但在MFC中,消息在消息映射中会不断上溯,大家都有机会处理消息,实际上在EDIT中按下ENTER键时,对话框会关闭,是因为消息到达对话框时,对话框对他进行了处理,你可以在CEdit派生类的PreTranslateMessage中对WM_KEYDOWN进行拦截并处理,会发现在关闭对话框前,你的CEdit派生类可以进行必要处理。或者在其父类--CDialog派生类的PreTranslateMessage屏蔽掉CDialog::PreTranslateMessage的调用,直接返回FALSE(不要返回TRUE,那样会使对话框失去对所有输入的反应),这样CDialog派生类就不会对ESC何ENTER作处理了,但建议不要使用这种方法,因为按下ESC和ENTER键会关闭对话框是Windows中的标准做法,最好不要违反标准操作习惯。
  • 打赏
  • 举报
回复
去做一个工程,分别在App,Dlg,Edit中重载虚函数KeyDown,看看哪个虚函数先执行不就知道了?
mingbao 2003-06-11
  • 打赏
  • 举报
回复
不仅是子窗口收到,而且你窗口根本就收不到任何信息。
也就是说,当一个DLG执行Domodal()后,在对话框资源销毁之前,用户只与子对话框交互,并且父对话框收不到任何键盘、鼠标等消息!
BlueSky2008 2003-06-11
  • 打赏
  • 举报
回复
同意realdreamer(楼主英明,贫僧久仰大名,特来拜见)
rokia 2003-06-11
  • 打赏
  • 举报
回复
不对的,是有焦点的先得到,不过,会一直往父窗口转发。
FAICHEN 2003-06-11
  • 打赏
  • 举报
回复
同意realdreamer(楼主英明,贫僧久仰大名,特来拜见)
realdreamer 2003-06-11
  • 打赏
  • 举报
回复
在WINDOWS 的系统中窗口消息只有一个窗口收到. 有键盘焦点的窗口才能收到按键消息.
rokia 2003-06-11
  • 打赏
  • 举报
回复
App? 系统在分发消息的时候不是按照窗口来发的吗?
feiniaoliang 2003-06-11
  • 打赏
  • 举报
回复
应该是子窗口先收到!!!
Kevin 2003-06-11
  • 打赏
  • 举报
回复
最先得到消息的是App
overwind_slash 2003-06-11
  • 打赏
  • 举报
回复
Edit控件,你可以自己派生一个子类调试得到结果

15,978

社区成员

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

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