对话框中控件的WM_KEYDOWN消息处理

原创 2003年05月01日 11:18:00

对话框中控件的WM_KEYDOWN消息处理

    在很多应用中我们要对对话框的控件进行个性化处理,如控制输入编辑框的字符。这时候我们就要对WM_KEYDOWN进行消息处理,下图给出了该消息的流向。知道了该消息的流向就知道可以在哪些地方截获。

WM_KEYDOWN消息流.jpg

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

可以在CAppDlg::PreTranslateMessage()、CDebugEdit::PreTranslateMessage()、CDebugEdit::WindowProc()、CDebugEdit::OnChar()、CDebugEdit::DefWindowProc()处理输入字符,但后面的必须保证前面消息流正常运行,正确处理之后保证返回true。

注意:如果你使用在CDebugEdit::OnKeyDown()中使用MessageBox作提示的话,这里就有个问题了。你会先得到CDebugEdit::OnChar()中的MessageBox提示。这是因为当产生一个MessageBox时会有一个消息循环并且从消息循环中取得下一个消息,也就是刚刚由TranslateMessage产生的WM_CHAR(因为消息是FIFO的,WM_CREATE还在后面呢)。当然该MessageBox不会处理这个消息,所以就到了CDebugEdit::OnChar()中,就弹出了一个MessageBox。同样道理也接受不到WM_KEYUP,因为该消息是产生MessageBox时发出的。这时的焦点窗口是该MessageBox的确定按纽。

 

WM_CHAR、WM_KEYDOWN和WM_SYSKEYDOWN消息

WM_KEYDOWN和WM_CHAR都是键盘消息。TranslateMessage函数已经将按键消息转换成字符消息了,那么WndProc函数中需要对事件进行选择。如:键入“D”键,就应该选择WM_CH...
  • ccfxue
  • ccfxue
  • 2016年04月11日 14:04
  • 1716

基于MFC对话框的键盘消息响应 WM_KEYDOWN WM_CHAR消息

PreTranslateMessage作用和使用方法          PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通...
  • huanglei1989
  • huanglei1989
  • 2013年08月29日 00:13
  • 1615

原谅我今天才学会使用win32的按键消息处理!

之前一直写directX的程序,用到的win32消息并不多,而且大部分的按键捕获都是有directInput完成的,因为能捕获到手柄那样的按键(而且据说还是实时的消息捕获)。。。 今天当我想...
  • zengraoli
  • zengraoli
  • 2013年04月18日 10:19
  • 2639

SDK模态对话框不能接收WM_KEYDOWN的解决方法

// main.cpp : Defines the entry point for the application. /// 验证 : SDK模态对话框不能接收WM_KEYDOWN的解决方法 /// ...
  • LostSpeed
  • LostSpeed
  • 2016年02月27日 12:07
  • 642

MFC 对话框Dialog响应键盘事件

在对话框程序中有时需要响应键盘和鼠标事件,MFC的对话框继承于CWnd窗口类,总结了如下几种可能的处理方式: 1,最直观的想法是重写类中的虚拟响应函数,这些响应函数有: 键盘相关:ON_WM_CHAR...
  • sy10086
  • sy10086
  • 2017年01月08日 10:08
  • 674

VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)

本文转自鸡啄米:http://www.jizhuomi.com/software/156.html      感 谢鸡啄米对本文的贡献。    创建对话框类和添加控件变量在上一讲中已经讲过,这一...
  • my_lord_
  • my_lord_
  • 2016年08月12日 11:31
  • 1410

[ATL/WTL]_[初级]_[关于CEdit不识别WM_KEYDOWN的问题]

场景 Win32 的Edit 控件默认不支持Ctrl+a, Ctrl+V等全选, 粘贴操作, 需要自己添加支持, 巨恶心. 常见的方式是在 PreTranslateMessage 里添加对CEdit的...
  • infoworld
  • infoworld
  • 2016年06月14日 19:14
  • 1338

VS2013/MFC编程入门之八(对话框:为控件添加消息处理函数)

创建对话框类和添加控件变量在上一讲中已经讲过,这一讲的主要内容是如何为控件添加消息处理函数。        MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处...
  • zhaoyinhui0802
  • zhaoyinhui0802
  • 2016年11月24日 21:09
  • 3719

duilib鼠标键盘消息处理

一般的窗口没有处理鼠标键盘消息,而是直接返回让CPaintManagerUI去处理。(想知道duilib整体的消息处理过程,请参考本博客其他文章) 首先用自己的语言描述几个名词: 准事件控件m_p...
  • zxm342698145
  • zxm342698145
  • 2015年01月15日 16:14
  • 7727

win32关于对话框处理不到WM_KEYDOWN消息的解决办法(注:非MFC)

最近碰到一个问题,就是自己DialogBox创建的对话框处理不到WM_KEYDOWN消息,很奇怪!网上看了好多些解答,但是大多数都是说用MFC的PreTranslateMessage来处理,这个对于w...
  • cjmscofiled
  • cjmscofiled
  • 2014年02月14日 10:23
  • 968
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对话框中控件的WM_KEYDOWN消息处理
举报原因:
原因补充:

(最多只允许输入30个字)