为什么收不到WM_CHAR消息

WindyLotus 2005-07-13 10:18:36
我做了一个从CWnd继承的类 CTestWnd,响应两个消息
void CTestWnd::OnLButtonDown(...)
{
SetFocus() ;
}
void CTestWnd::OnChar( UINT nChar, UINT nRepCnt,UINT nFlags )
{
MessageBox("hello") ;
}
在一个对话框中创建他的一个实例,并在OnInitDialog中创建:
BOOL CTestDlg::OnInitDialog()
{
...
m_testWnd.Create( NULL , NULL , WS_CHILD | WS_VISIBLE | WS_TABSTOP ,rc, this , ID_TEST) ;
}

当焦点到CTestWnd窗口后,按一个字符键,跟踪时发现根本没有进入CTestWnd::OnChar(),后来试了一下,WM_KEYDOWN和WM_KEYUP都能接受到。
请问是怎么回事,请赐教。
...全文
212 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wcmj 2005-07-13
如楼上所说,正确的话应该响应的
回复
smartcomplier 2005-07-13
消息映射没有?

在类声明里有没有
DECLARE_MESSAGE_MAP ()

在类定义里有没有
BEGIN_MESSAGE_MAP (CMainWindow, CFrameWnd)
ON_WM_LBUTTONDOWN ()
ON_WM_CHAR()
END_MESSAGE_MAP ()
回复
dirdirdir3 2005-07-13
要有文本输入的控件才能接受到WM_CHAR
回复
dirdirdir3 2005-07-13
聚焦到窗口是没有办法收到按键的消息的,自己用PreTranslateMessage来处理。
回复
快乐鹦鹉 2005-07-13
很奇怪的问题。不知道被哪个玩意截了
回复
oyljerry 2005-07-13
用PreTranslateMessage捕获一下试试
回复
goodboyws 2005-07-13
TranslateMessage的问题,不知道为什么会失败
回复
flintstone_cai 2005-07-13
在PreTranslateMessage里面能不能获取呢?
另外,确认你是否有输入。因为在类似pocketPC的模拟器下面,输入在一些情况下就被屏蔽掉了。
你可以人为发一个按键事件试试看。
回复
WindyLotus 2005-07-13
问题解决了,多谢各位了

在CTestWnd截获WM_GETDLDCODE就可以接收到了
UINT CTestWnd::OnGetDlgCode()
{
return CWnd::OnGetDlgCode() | DLGC_WANTCHARS ;
}

此消息决定了此窗口需要截获那些特殊消息,如TAB键消息。
回复
goodboyws 2005-07-13
或者这样, 重载PreTranslateMessage
BOOL CXXXXDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
BOOL bRet = CDialog::PreTranslateMessage(pMsg);
if (pMsg->hwnd == m_testWnd.GetSafeHwnd())
return FALSE;
else
return bRet;
}
回复
goodboyws 2005-07-13
被对话框的IsDialogMessage截取了
建议在PreTranslateMessage判断如果是WM_KEYDOWN, WM_KEYUP
重新调用一下TranslateMessage
回复
相关推荐
自定义控件(自定义窗口)在对话框中接收不到WM_CHAR消息的解决方法
如下网址给出了解决方法. ... 在自定义的窗口类中,增加如下消息处理代码即可. case WM_GETDLGCODE:  if(lParam)  {
MFC为何不响应WM_CHAR消息的解释理解
WM_CHAR必须由WM_KEYDOWN经过TranslateMessage得到,如果你当前拥有焦点的控件无法进行输入,则收不到WM_CHAR消息   然WM_KEYDOWN消息是当一个非系统键被按下时该消息发送给具有键盘焦点的窗口。   也就是说...
微软的程序都响应WM_CHAR消息
我向程序发送一个WM_CHAR消息除了微软的程序,其他程序都能接收这个字符,这是为什么? 代码如下: //pWnd为目标窗口句柄,且有为激活状态并有焦点 SendMessage(pWnd,WM_CHAR,L'好',0); 并且微软程序也能激活...
WM_CHAR,WM_UNICHAR,WM_IME_CHAR
一、WM_CHAR1、如果窗口是unicode...如果输入中文,则会得到2个WM_CHAR,把这两个单字节值合一起就是输入的中文。 二、有一个额外的WM_UNICHAR,里面的wParam总是unicode32,但观察发现,输入法似乎并不用这个...
WM_IME_CHARWM_CHAR的区别
要理解二者的区别,首先需要清楚: 我们通过键盘所打的字,并都是全部通过输入法后,转交给程序的。 也就是说: 我们用键盘打的字有些是经过输入法直接传送程序中,如1、2... 明白这点后,WM_IME_CHARWM_CHAR
基于MFC对话框的键盘消息响应 WM_KEYDOWN WM_CHAR消息
 PreTranslateMessage是消息在送给TranslateMessage函数之前被调用的,绝大多数本窗口的消息都要通过这里,比较常用,当需要在MFC之前处理某些消息时,常常要在这里添加代码.   MFC消息控制流最具特色的地方是...
解决WM_CHAR收不到汉字的问题
看《windows程序设计(第五版 珍藏版)》第六章时遇到一个问题,纠结了好几天,KeyView1在VC6.0编译环境下生成的exe在输入汉字时,本来应该得到一个汉字,但是却得到两个WM_CHAR消息!百度了一下,网上说应该设置...
MFC——12.话框中对键盘消息的响应处理&&如何响应wm_char消息
本文转载文章,讲解了如何解决在对话框对应的类里添加消息响应函数的方法。
WM_CHARWM_KEYDOWN和WM_SYSKEYDOWN消息
WM_KEYDOWN和WM_CHAR都是...如:键入“D”键,就应该选择WM_CHAR,因为WM_CHAR 只是字母,包含特殊字符如Ctrl等。如果键盘键入的是“Ctrl+D”,则应该选择WM_KEYDOWN,因为WM_KEYDOWN既包含字母也包含特殊字符。 
Win32消息,子窗口如何接受WM_KEYDOWN消息
现在我想要这个子窗口处理我的PAGEUP和PAGEDOWN键盘消息,但是在主窗口的消息处理函数中可以接收到WM_KEYDOWN消息,而在子窗口中却能接收到。我知道可以通过主窗口主动POST消息给子窗口实现,但是我想知道能能...
MFC收到WM_KEYDOWN 没有收到WM_CHAR原因
WM_CHAR消息是在PretranslateMessage收到WM_KEYDOWN后转给系统,通过 return CWnd::PreTranslateMessage(pMsg); (一定不要RETURN TRUE)之后产生的WM_CHAR消息。 以前总以为按下按键后会产生两个消息WM_KEYDOWN和WM...
键盘消息WM_KEYDOWN/WM_KEYUP、WM_SYSKEYDOWN/WM_SYSKEYUP与字符消息WM_CHAR的区别
一、 WM_*KEY*与WM_CHAR区别1.WM_*KEY* 消息WM_KEYDOWN/WM_KEYUP、WM_SYSKEYDOWN/WM_SYSKEYUP)是描述键盘虚拟键码的,它对应的是键盘物理按键。2.WM_CHAR 则是描述字符码的,它对应的键盘操作所按下的字符。这...
关于WM_CHAR函数中键盘各个按键的值
VC 键盘响应2009-08-01 17:11一:首先介绍键盘消息  系统消息:   ALT,F1,——F24等,是由系统... WM_SYSKEYDOWN WM_SYSKEYUP WM_SYSCHAR 非系统消息:   是由我们自己加上去的, WM_KEYDOWN WM_KEYUP WM_C
深度分析WM_PAINT和WM_ERASEBKGND消息
做windows开发这么久了,一直以来对WM_PAINT和WM_ERASEBKGND消息总是感觉理解的准确,每次要自绘一个窗口都因为知其然不知其所以然,偶然发现一篇文章,详细透彻地分了这个两个消息的用途和设计初衷,这篇文章也是...
WM_KEYDOWN --> 调用TranslateMessage --> WM_CHAR --> WM_KEYUP 分析WM_CHAR
应用程序中键盘消息从WM_KEYFIRST到WM_KEYLAST那么多,但我们知道最原始的键盘消息只有两个那就是WM_KEYDOWN,WM_KEYUP,在键盘钩子中我们能截获的也就这两个消息,那其它消息是从何产生的,如何动作的呢?下面我们就...
子类化实现DialogBox中Edit控件的WM_CHAR消息
这两天用Win32SDK重新实现一次MyWowToc,目的就是实践一下SDK编程的学习成果,这下严重体会了在GUI方面Delphi对Win32的封装技术真是太强大了,啥子现在才学SDK呢,主要为了后面搞DDK相关的东东。接着说主题吧,...
对话框无法捕捉WM_CHAR,WM_KEYDOWN,WM_KEYUP的解決方法
 一般程序初始化的时候焦点就会落某个控件上或者说窗口,当KEYDOWN的时候是由当前活动的窗口处理的(每个控件也都是一个窗口),所以视图或者对话框就会没反应,最好在PreTranslateMessage里处理。 解決方法:...
wm_keydown 和vm_char 区别以及 mfc DiapatchMessage派送消息返回之前的过程解析
事件WM_KEYDOWN和WM_CHAR都是键盘消息,如果要对这两个有消息有所响应的话,就需要实行以下代码:  while(GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg); //翻译消息 DispatchMessage(&Msg); //将消息传递...
Qt:Qt使用WM_COPYDATA消息进行进程通信
Qt使用WM_COPYDATA消息进行进程通信 如题,Qt使用WM_COPYDATA...实现效果是 ,多个客户端 窗口向服务端窗口发送消息,服务端接受到消息后 给客户端一个回馈。效果截图: 代码解读 Qt中截获Windows消息,是使用qt...
Oracle列转行函数wm_concat版本兼容解决方案
业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些兼容问题,vm_concat在一些业务场景是必须的。...最近遇到这个问题,网上博客很多都写了自定义列转行函数的办法去解决。但是这种办法并一定适用...
如何使对话框中接收到WM_CHAR消息(Windows编程)
我们大家都知道,对话框是有的时候捕获不到WM_CHAR消息的.比如,你想使对话框里的Edit控件所键入的全部变为大写.我们毫不犹豫的写到: #include //Declare the Dialog ProcedureBOOL CALLBACK DialogProc(HWND, UINT, ...
Window Notifications WM_ 窗口 消息/通知
消息消息值 说明 WM_CREATE 0x0001 应用程序创建一个窗口 WM_DESTROY 0x0002 一个窗口被销毁 WM_MOVE ...
SendMessage函数完全使用手册 (解读WM_)
SendMessage函数完全使用...Windows是一个消息驱动式系统,Windows消息提供应用程序与应用程序之间,应用程序与Windows系统之间进行通信的手段。  举个例子,打开记事本程序,该程序有一个“文件“菜单。 那么,在运
c#图片文字-字母-数字自动识别-深入代码-非常好
c#图片文字-字母-数字自动识别-深入代码-非常好
rtl8188eu_USB_linux.tar.gz
TP-LINK TL-WN725N V2 Linux 驱动安装
Control-flow Enforcement Technology Preview 2.0 spec
Intel CFI技术手册。 Intel CFI从CPU层次检测和防止ROP/JOP攻击,主要包含shadow stack和endbranch两项技术。 比软件层面的防御方法,如微软的CFG,更有效。目前Intel最新编译器已经支持此技术
后备电池及储能电池巡检白皮书.pdf
后备电池及储能电池巡检白皮书,施耐德电气主编的,数据中心电池巡检白皮书。
CListControl设置颜色
CListControl类派生,设置单元格颜色,丰富功能
Linux系统管理员/网络管理员(PDF版)
两本非常好的Linux系统学习的书 系统管理主要介绍Linux系统的结构、管理、命令等 网络管理主要从网络协议角度出发阐述Linux的网络功能
STM32F103中文数据手册
这个里面包含了STM32F103的各种型号的数据手册,方面理解
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2005-07-13 10:18
社区公告
暂无公告