我有一个程序,它有两个窗口,一个用于显示图形(称之为"图形窗口"),另一个用于输入和显示文本(称其为"文本窗口")。文本窗口是图形窗口的子窗口。只要文本窗口高亮显示,程序就会正确处理键击,但如果图形窗口高亮显示则会忽略键击。我想做的是安排文本窗口处理按键,即使图形窗口高亮显示。
问题已解决:
文本窗口本身就是富编辑窗口的父窗口。
在图形窗口的消息处理程序中,我添加了:
case WM_CHAR:
case WM_KEYDOWN:
case WM_KEYUP:
case WM_SYSKEYDOWN:
case WM_SYSKEYUP:
SendMessage(handle_of_rich_edit_window, message, wParam, lParam);
break;
我之前曾尝试将消息发送到文本窗口,但似乎不起作用(我不知道为什么)。将消息直接发送到richedit窗口似乎可以做到这一点。
将每个窗口的击键路由到一个通用处理程序,或者使用Win32 的低级别窗口钩子SetWindowsHookExAPI
如果您可以访问两个窗口中的每一个源代码,那么只需为应用的WM消息实现一个通用处理程序。然而,听起来你因为某种原因无法做到这一点(?)。
对于每个可以接收消息的窗口,都可以实现子类化。
这意味着您可以用自定义的Wndproc消息处理程序替换窗口的标准Wndprocs消息处理程序。在这个自定义处理程序中,您可以决定要区别对待哪些消息。对于那些您不希望区别对待的消息,您可以调用默认的Wndproc。
这允许您"重载"窗口的默认行为,或者在某个事件上添加额外的功能,然后执行默认行为。如果您不能访问Wndproc本身的源代码(例如,在使用RAD工具时),它会特别方便。
因此,对于您的特定情况,您可以对每个窗口进行子类化,获取您感兴趣的消息,然后调用一个通用处理程序。