为什么对话框不出理WM_CHAR消息?

collide 2003-06-22 07:02:02
我使用mfc wizard创建了一个基于对话框的工程,在Class wizard中,给对话框添加了WM_CHAR消息处理函数,(OnChar(...)),可是当我运行此程序时,发现并不处理WM_CHAR消息?为什么?而我用同样的方法,添加WM_INITDIALOG消息时,就可以。
...全文
215 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Crob 2003-06-23
  • 打赏
  • 举报
回复
if(pMsg->message==WM_CHAR){
if(pMsg->hwnd==this->GetDlgItem(IDC_EDIT_DAY)->m_hWnd
|| pMsg->hwnd==this->GetDlgItem(IDC_EDIT_ALL)->m_hWnd
|| pMsg->hwnd==this->GetDlgItem(IDC_EDIT_LOGINTIME)->m_hWnd
)
{
//在指定的控件上响应了WM_CHAR
}
}
songfen8432 2003-06-23
  • 打赏
  • 举报
回复
就是Crob的做法,我用过很多次的,绝对没问题。
goodsong 2003-06-23
  • 打赏
  • 举报
回复
Crob(我干嘛这么帅~~~) (是对的
lyt_hf 2003-06-23
  • 打赏
  • 举报
回复
: Crob(我干嘛这么帅~~~) (是对的
Crob 2003-06-23
  • 打赏
  • 举报
回复
你可以把pMsg->message==WM_KEYDOWN换成pMsg->message==WM_CHAR
Crob 2003-06-23
  • 打赏
  • 举报
回复

BOOL CMyDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN){
UINT iKey=(UINT)pMsg->wParam;
if(iKey==13){
//按了回车
pMsg->message=WM_CHAR;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
xubobbs 2003-06-23
  • 打赏
  • 举报
回复
楼上的有道理,当一个对话框中什么都没有的时候,ONCHAR 事件才能给窗体接收到,否则默认的消息传递都是给输入焦点的窗口。默认的情况下,你什么都没有的对话框中OK肯定是开始焦点的。
kingcom_xu 2003-06-22
  • 打赏
  • 举报
回复
没有ok和cancel两个按钮吗?
collide 2003-06-22
  • 打赏
  • 举报
回复
我的对话框没有任何控件,这怎么也不行呢?
kingcom_xu 2003-06-22
  • 打赏
  • 举报
回复
因为输入焦点落在其它子控件上,如果把对话框上所有控件移走就没问题了.

解决方法之一是重载PreTranslateMessage函数

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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