首页 > 解决方案 > 如何找出哪个窗口触发了 WM_PARENTNOTIFY?

问题描述

当我将一个按钮(A)的父级设置为另一个按钮(B)时,我发现它不会触发WM_COMMAND按钮A的消息,并且WM_PARENTNOTIFY窗口(按钮A的父级)会收到消息。但是查了reference之后,发现没有办法得到按钮B的标识,like HMENUor HWND。有人可以帮助我吗?

图片

对应图像

标签: c++windowsuser-interfacewinapifrontend

解决方案


是的,有人将一个按钮放入另一个按钮,或者说将一个按钮的父级设置为另一个按钮,这确实很奇怪,但是当父级按钮的样式为 时,它确实具有一些现实意义BS_GROUPBOX,就像Frame在 Visual基本的。

img_button_in_button

我对这个问题的解决方案是SetWindowSubClass在创建一个新控件后调用,这样在调用这个 API 时设置的新回调函数可以接收到触发这个事件的控件的真实 hWnd。

有一点需要说明:

  • return DefSubclassProc(hWnd, uMsg, wParam, lParam);如果控件不处理该事件,请使用。

  • 删除WS_CHILD那些调用的控件的样式SetWindowSubClass,或者这些控件无法正确显示,唯一显示的只是一个空窗口。

感谢所有在这个问题上帮助我的人!


推荐阅读