WM_KEYDOWN --> 调用TranslateMessage --> WM_CHAR --> WM_KEYUP 分析WM_CHAR

本文详细分析了Windows消息处理中,从WM_KEYDOWN开始,经过TranslateMessage和DispatchMessage等步骤,如何产生并处理WM_CHAR消息的过程。通过示例代码和调试信息,解释了在对话框和非对话框程序中WM_CHAR消息的产生差异,并提醒读者在进行调试时注意可能影响结果的情况。
摘要由CSDN通过智能技术生成

应用程序中键盘消息从WM_KEYFIRST到WM_KEYLAST那么多,但我们知道最原始的键盘消息 只有两个那就是WM_KEYDOWN,WM_KEYUP,在键盘钩子中我们能截获的也就这两个消息,那其它消息是从何产生的,如何动作的呢?下面我们就 WM_CHAR消息来分析一下。

一个键按下后,便会有一个或多个WM_KEYDOWN消息产生,这些消息会从系统消息队列发送到目标窗口的线程的消息队列中,这样在对应线程处理消息时便会对此消息处理,并在处理的过程中产生一系列的其它键盘消息,其中便有WM_CHAR。

以下是向对话框中的编辑框输入’a’的部分处理过程(以所附源码调试、整理而得)
CGetInputDlg::DoModal()     //对话框创建
往编辑框按下一键’a’
001 CGetInputDlg::RunModalLoop //消息循环,在这里peek到WM_KEYDOWN
002 CGetInputDlg::PumpMessage //消息泵,取消息、翻译、处理这些消息
003 CGetInputDlg::PreTranslateMessage //线程开始消息预处理
004 CGetInputDlg::WalkPreTranslateTree //从目标窗口到主窗口历遍
005 CMyEdit::PreTranslateMessage    //目标窗口,没有处理(返回FALSE)。
006 CGetInputDlg::PreTranslateMessage //子窗口没有处理,所以流到父窗口
007 CDialogDlg::PreTranslateMessage //由基类处理
   ...
008 CMyEdit::WindowProc
009 CMyEdit::OnWndMsg
010 CM

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值