社区
界面
帖子详情
为什么基于对话框的应用程序的对话框不能响应WM_CHAR消息?
ygzdev
2003-10-24 08:11:45
我刚接触VC不久,对此不了解!不知道是什么原因,请问怎么才能响应该消息呢?谢谢!!
...全文
168
12
打赏
收藏
为什么基于对话框的应用程序的对话框不能响应WM_CHAR消息?
我刚接触VC不久,对此不了解!不知道是什么原因,请问怎么才能响应该消息呢?谢谢!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tserpent
2003-10-28
打赏
举报
回复
你可以这样处理回车键:
BOOL CXXXDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN:
DoYourFunction()....;
return TRUE;
case VK_ESCAPE:
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
ygzdev
2003-10-27
打赏
举报
回复
编辑框加上want return属性我试过是不行的,但现在这个want return又是干什么用的呢,我就不解了!
carbon107
2003-10-27
打赏
举报
回复
编辑框的属性 加上want Return
ygzdev
2003-10-27
打赏
举报
回复
THANK YOU VERY VERY MUCH!
ygzdev
2003-10-26
打赏
举报
回复
编辑框架上want return属性是不行的,我早试过了。MilitaryMiatures(++)真是厉害,我派生出的类只响应WM_CHAR消息,结果还是不可以。这下试试WM_GETDLGC!谢谢了!
MilitaryMiniatures
2003-10-26
打赏
举报
回复
//sorry,shoule be WM_GETDLGCODE
LRESULT CYoutEdit::OnGetDlgCode(WPARAM wParam, LPARAM lParam)
{
return CEdit::OnGetDlgCode(wParam, lParam) | DLGC_WANTALLKEYS;
}
这么处理的结果是,你要自己处理Tab键,比较讨厌,可以看看DLGC_WANTCHARS这个行不行,估计不行。
MilitaryMiniatures
2003-10-24
打赏
举报
回复
回车一般被解释为对话框中的默认按钮。
编辑框架上want return属性,好像不一定行。
当需要这种情况时,我的做法一般是从CEdit派生一个类,其中响应WM_GETDLGC,并且返回一个数据表明需要所有的键盘输入,并且响应WM_CHAR消息,其中可以判断回车。
当然,对话框中的编辑框需要进行子类化。
huanyun
2003-10-24
打赏
举报
回复
编辑框的属性 加上want Return
ygzdev
2003-10-24
打赏
举报
回复
我的本意就是要在编辑框中回车后进行处理,但发现编辑框对其他字符都可以处理,但就是对回车不能处理。我试着重写OnOK函数,可惜发现有时的回车并不会响应他
MilitaryMiniatures
2003-10-24
打赏
举报
回复
一般说来,对话框是没有输入焦点的,(focus),输入焦点在其中的控件上,所以说,你的对话框响应不到消息WM_CHAR
huanyun
2003-10-24
打赏
举报
回复
如果你的界面中有一个有焦点的支持onChar消息 那么其他的窗口就得不到了
huanyun
2003-10-24
打赏
举报
回复
CEdit支持onChar
WM
_
CHAR
、
WM
_KEYDOWN和
WM
_SYSKEYDOWN
消息
WM
_KEYDOWN和
WM
_
CHAR
都是键盘
消息
。TranslateMessage函数已经将按键
消息
转换成字符
消息
了,那么WndProc函数中需要对事件进行选择。如:键入“D”键,就应该选择
WM
_
CHAR
,因为
WM
_
CHAR
只是字母,不包含特殊字符如Ctrl等。如果键盘键入的是“Ctrl+D”,则应该选择
WM
_KEYDOWN,因为
WM
_KEYDOWN既包含字母也包含特殊字符。
对话框
响应
WM
_KEYDOWN
消息
对于按键
消息
,
WM
_
CHAR
也一样,我敢肯定地告诉你你将会失败,为什么,问题就是出在
WM
_
CHAR
上,你可以试一试,当你不把光标移动到Edit控件时,
对话框
可以捕获到
WM
_
CHAR
消息
,但是一旦你把光标移动到Edit控件时,就捕获不到
WM
_
CHAR
了. 出现了这种情况,有什么方法可以捕获到
WM
_
CHAR
呢?我想对于MFC编程,小Case了,只需重载PreTranslateMe
对话框
无法捕捉
WM
_
CHAR
,
WM
_KEYDOWN,
WM
_KEYUP的解決方法
原因: 一般程序初始化的时候焦点就会落到某个控件上或者说窗口,当KEYDOWN的时候是由当前活动的窗口处理的(每个控件也都是一个窗口),所以视图或者
对话框
就会没反应,最好在PreTranslateMessage里处理。 解決方法: 重載函數PreTranslateMessage PreTranslateMessage进行处理,代码如下: if ( pMsg-> m
键盘
消息
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
则是描述字符码的,它对应的键盘操作所按下的字符。这二者之间的映射关系在不同物理键盘设备下并不固定,所以Windows封装了TranslateMessage这个API来完成物理键到字符的转换。二、
WM
_SYSKEY*与
WM
_KEY*区别
WM
_SYSKEY*
消息
由两种情况产生:1.F10
OPTool - 用于迭代算法的优化工具箱.zip
OPTool - 用于迭代算法的优化工具箱.zip
界面
15,976
社区成员
115,866
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章