Win32消息,子窗口不能接受WM_KEYDOWN消息

木头木木头 2013-06-03 03:35:05
我有一个主窗口,里面创建了一个子窗口。所有的操作其实都是为了对子窗口里的图片进行处理。但是一些控件如Button等放在主窗口。现在我想要这个子窗口处理我的PAGEUP和PAGEDOWN键盘消息,但是在主窗口的消息处理函数中可以接收到WM_KEYDOWN消息,而在子窗口中却不能接收到。我知道可以通过主窗口主动POST消息给子窗口实现,但是我想知道能不能直接在子窗口里接收消息。比如,主窗口放弃处理这个消息,并传递给子窗口。我对Windows的消息传递机制一直不是很清楚,希望有懂的大神简单讲解一下这个问题,非常感谢。
case WM_KEYDOWN:
switch (wParam)
{
case VK_LEFT: // LEFT ARROW
MessageBox(hWnd,"Left","Left", MB_YESNO);
break;
case VK_RIGHT: // RIGHT ARROW
MessageBox(hWnd,"Right","Right", MB_YESNO);
break;
case VK_UP: // UP ARROW
MessageBox(hWnd,"UP","UP", MB_YESNO);
break;
case VK_DOWN: // DOWN ARROW
MessageBox(hWnd,"DOWN","DOWN", MB_YESNO);
break;
case VK_HOME: // HOME
MessageBox(hWnd,"HOME","HOME", MB_YESNO);
break;
case VK_END: // END
MessageBox(hWnd,"END","END", MB_YESNO);
break;
case VK_PRIOR: // PAGE UP
MessageBox(hWnd,"PAGEUP","PAGEUP",MB_YESNO);
break;
case VK_NEXT: // PAGE DOWN
MessageBox(hWnd,"PAGEDOWN","PAGEDOWN",MB_YESNO);
break;
default:
break;
}
break;Win32,WM_KEYDOWN,消息处理,子窗口
...全文
470 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
schlafenhamster 2013-06-03
  • 打赏
  • 举报
回复
创建子窗口 不是 子类化 ! 如: m_hListView=CreateListView((HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), hwnd) ; LVoldProc = (WNDPROC)SetWindowLong(m_hListView, GWL_WNDPROC, (LONG)LVProc); 红的 才是 子类化。
木头木木头 2013-06-03
  • 打赏
  • 举报
回复
引用 1 楼 Sandrer 的回复:
你的子窗口设置焦点没有?
那是不是每次用了主窗口上的Button后都要设置焦点啊?这个有点麻烦哦
木头木木头 2013-06-03
  • 打赏
  • 举报
回复
引用 3 楼 schlafenhamster 的回复:
子类化这个子窗口。“而在子窗口中却不能接收到”
我已经子类化了,是在主窗口里根据打开的文件处理消息,创建子窗口的。
木头木木头 2013-06-03
  • 打赏
  • 举报
回复
引用 1 楼 Sandrer 的回复:
你的子窗口设置焦点没有?
没有。一直以来的概念是鼠标点哪里焦点就在哪里了,汗。Win32的焦点还没有学习过。那请问应该怎么设置焦点呢?我在主窗口有几个Button。随便点一个后连主窗口都接受不到WM_KEYDOWN消息了。我想应该是焦点的问题。
schlafenhamster 2013-06-03
  • 打赏
  • 举报
回复
子类化这个子窗口。“而在子窗口中却不能接收到”
sumos 2013-06-03
  • 打赏
  • 举报
回复
在主窗口的PreTranslateMessage中, MSG* pMsg if(pMsg->message == WM_KEYDOWN || pMsg->message == WM_KEYUP) { pMsg->m_hWnd = 子控件句柄; return FALSE; } 我没测试过,你可以试试,想法就是转移消息接收者
Sandrer 2013-06-03
  • 打赏
  • 举报
回复
你的子窗口设置焦点没有?

16,466

社区成员

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

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

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