2

我有一个程序,它有两个窗口,一个用于显示图形(称为“图形窗口”),另一个用于输入和显示文本(称为“文本窗口”)。文本窗口是图形窗口的子窗口。只要突出显示文本窗口,程序就会正确处理击键,但如果突出显示图形窗口,则忽略击键。我想要做的是安排文本窗口处理击键,即使图形窗口被突出显示。

问题已解决

文本窗口本身就是富编辑窗口的父级。

在图形窗口的消息处理程序中,我添加了:

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 窗口似乎可以解决问题。

4

2 回答 2

0

如果您可以访问两个窗口中的每个源代码,那么只需为适用的 WM 消息实现一个通用处理程序。但是,听起来您出于某种原因无法做到这一点(?)。

对于每个可以接收消息的窗口,您都可以实现子类化

这意味着您将窗口的标准 Wndproc 消息处理程序替换为自定义处理程序。在此自定义处理程序中,您可以决定希望以不同方式处理哪些消息。对于您不希望区别对待的所有这些消息,您调用默认的 Wndproc。

这允许您“重载”窗口的默认行为,或者在某个事件上添加额外的功能,然后执行默认行为。如果您无法访问 Wndproc 本身的源代码(例如在使用 RAD 工具时),它会特别方便。

因此,对于您的具体情况,您可以对每个窗口进行子类化,获取您感兴趣的消息,然后调用一个通用处理程序。

于 2015-11-09T16:02:39.740 回答
0

将每个窗口的击键路由到一个公共处理程序或使用 Win32 的低级窗口挂钩SetWindowsHookEx API

于 2015-11-09T15:33:37.247 回答