0

我问了一个问题,有人评论说我的问题不清楚,所以这里是一个新问题。

我正在尝试使用 WIN32 API 创建具有多个窗口的应用程序。我创建了两个窗口,一个是父级的子级。然后我有一个消息循环,但不幸的是只有父 Wn​​dProc 收到消息,而孩子没有。- 那就是 wndProc 只被调用一次而不是两次。(这是预期的行为吗?)

我还尝试为子窗口创建另一个 WndProcChild 函数,并注册它自己的类,但仍然无济于事。

下面是一段代码摘录(只有子窗口的声明和消息循环)

我是 Win32 新手,所以要温柔...谢谢,丹

wcEdit.lpfnWndProc   = WndProcChild;  
wcEdit.style         = CS_HREDRAW | CS_VREDRAW;  
wcEdit.cbClsExtra    = 0;  
wcEdit.cbWndExtra    = 0;  
wcEdit.hInstance     = hInstance;;  
wcEdit.hCursor       = 0;  
wcEdit.lpszMenuName  = 0;  
wcEdit.lpszClassName = L"child";  
RegisterClass(&wcEdit);  
edit_hwnd = CreateWindow(L"child",  L"child_title", NULL,    
     0, 0, 0, 0, ParentWindow,    
     NULL, global_instance, NULL);    

UpdateWindow(edit_hwnd);
while (GetMessage(&msg, NULL, 0, 0))  
{  
     TranslateMessage(&msg);  
     DispatchMessage(&msg);  
}  

只是为了再次解释我想要实现的目标 - 我想处理 WM_KEYDOWN 消息两次 - 一次在父窗口中,一次在子窗口中。我实际上不需要他们成为父子,只是认为这样可以节省我创建两个不同的 wndProcs

4

3 回答 3

1

听起来您WM_KEYDOWN两次期待该消息......这不会发生。只有具有关键焦点的窗口才会收到WM_KEYDOWN消息。

于 2009-11-10T14:59:53.807 回答
0

继承窗口有两个属性,父窗口和所有者。在 OS/2 中,这些是单独的属性,但在 Win32 中,它们合并为一个。看看这个 SO线程

于 2009-11-10T15:00:52.643 回答
0

您可以尝试使用钩子或其他类似方法来解决此问题,因为在 Windows 上没有直接的方法可以实现此目的。基本上,您需要监视拥有另一个窗口的线程上的按键事件并拦截它们。我将从SetWinEventHook函数开始。

于 2016-02-02T08:10:35.057 回答