WindowProc怎么用?

周晓荣 2010-08-19 09:14:41
我在一个对话框程序中,在class Wizard那里,添加了WindowProc函数
该函数好像是一个虚函数吧

然后在该函数中,我却无法捕捉到消息,代码如下...
我想按下回车后,把焦点转到下一窗口...但没效果,调试后发现该函数根本没捕捉到相应的消息,如按下某个字符

LRESULT CSuoshouDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class

if(message==WM_CHAR && wParam==0x0d)
{
::SetFocus(::GetWindow(m_hWnd,GW_HWNDNEXT));
return 1;
}

return CDialog::WindowProc(message, wParam, lParam);
}
...全文
997 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
周晓荣 2010-08-26
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 romicboy 的回复:]
楼主的头像真性感啊
[/Quote]

请别把我当成YY的对象。
romicboy 2010-08-26
  • 打赏
  • 举报
回复
楼主的头像真性感啊
周晓荣 2010-08-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 subfly 的回复:]
引用 13 楼 et214721856 的回复:
这个函数好像不能像楼主那样处理啊函数,要用到LRESULT DefWindowProc( HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
处理WindowProc无法扑捉到的消息。
[/Quote]
但我试过在此函数LRESULT DefWindowProc中也捕捉不到对话框中的键盘消息...
subfly 2010-08-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 et214721856 的回复:]
我想知道的是为什么在对话框中的过程函数没接收到按键消息

然后今天在孙鑫的书上看到,“在对话框程序中,某些特定的消息,例如按键消息,他们被WINDOWS内部的对话框过程处理了,(即在基类中完成了处理),或者被发送给子控件进行处理,所以我们在对话框类中就捕获不到按键的消息了”

然后这可能就是上面我问题的答案吧。


[/Quote]
这个函数好像不能像楼主那样处理啊函数,要用到LRESULT DefWindowProc( HWND hWnd,
UINT Msg,
WPARAM wParam,
LPARAM lParam
);
处理WindowProc无法扑捉到的消息。
zgsdzhaolanxiang1 2010-08-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 et214721856 的回复:]
我想知道的是为什么在对话框中的过程函数没接收到按键消息

然后今天在孙鑫的书上看到,“在对话框程序中,某些特定的消息,例如按键消息,他们被WINDOWS内部的对话框过程处理了,(即在基类中完成了处理),或者被发送给子控件进行处理,所以我们在对话框类中就捕获不到按键的消息了”

然后这可能就是上面我问题的答案吧。

自己顶下,谢谢楼上所有人的关注
[/Quote]
明白了 学习了。
周晓荣 2010-08-21
  • 打赏
  • 举报
回复
我想知道的是为什么在对话框中的过程函数没接收到按键消息

然后今天在孙鑫的书上看到,“在对话框程序中,某些特定的消息,例如按键消息,他们被WINDOWS内部的对话框过程处理了,(即在基类中完成了处理),或者被发送给子控件进行处理,所以我们在对话框类中就捕获不到按键的消息了”

然后这可能就是上面我问题的答案吧。

自己顶下,谢谢楼上所有人的关注
周药师 2010-08-20
  • 打赏
  • 举报
回复

BOOL CdemoDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message==WM_KEYDOWN)
{
TRACE("wParam==>%c\r\n",pMsg->wParam);
}
return CDialog::PreTranslateMessage(pMsg);
}

hallowwar_swallow 2010-08-20
  • 打赏
  • 举报
回复
查到了这个
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg-> message == WM_KEYDOWN)
{
switch(pMsg-> wParam)
{
case 1:// 判断键值
...
}
}

return CDlg::PreTranslateMessage(pMsg);
} ……
dingshaofengbinbin 2010-08-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 najiutan 的回复:]
查到了这个
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg-> message == WM_KEYDOWN)
{
switch(pMsg-> wParam)
{
case 1:// 判断键值
...
}
}

return CDlg::PreTranslateMessage(pMsg);
} ……
[/Quote]
就在这里面处理可以的。
freeC 2010-08-20
  • 打赏
  • 举报
回复
查到了这个
BOOL CDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg-> message == WM_KEYDOWN)
{
switch(pMsg-> wParam)
{
case 1:// 判断键值
...
}
}

return CDlg::PreTranslateMessage(pMsg);
}
周晓荣 2010-08-20
  • 打赏
  • 举报
回复
有谁来给点意见么`
周晓荣 2010-08-19
  • 打赏
  • 举报
回复
然后我在class Wizard的消息列表里,又看到DefWindowProc这函数,依然是个虚函数来的

然后我尝试了一下捕捉键盘消息,结果依然没效...

望高手们来个真相...

LRESULT CSuoshouDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class

if(message==WM_KEYDOWN )//&& wParam==0x0d)
{
::SetFocus(::GetWindow(m_hWnd,GW_HWNDNEXT));
return 1;
}

return CDialog::DefWindowProc(message, wParam, lParam);
}
周晓荣 2010-08-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fangongdalu7148 的回复:]
不过 挺搞不明白的,,WindowProc 接收不了WM_KEYDOWN 这样的消息。
[/Quote]
是的,我自己也搞不懂...
我试过其他消息类型,WM_CLOSE也接收不了,但WM_DESTROY就接收得到
不明白这函数还有什么用处
zgsdzhaolanxiang1 2010-08-19
  • 打赏
  • 举报
回复
不过 挺搞不明白的,,WindowProc 接收不了WM_KEYDOWN 这样的消息。
asas3434 2010-08-19
  • 打赏
  • 举报
回复
期待高手解答!!
zgsdzhaolanxiang1 2010-08-19
  • 打赏
  • 举报
回复
在PretranslateMessage里面 ..捕获 WM_KEYDOWN 消息。。
na2650945 2010-08-19
  • 打赏
  • 举报
回复
不懂。
帮顶。
wltg2001 2010-08-19
  • 打赏
  • 举报
回复
在PretranslateMessage里面处理吧

16,467

社区成员

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

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

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