0
我有以下MFC应用程序UI结构:SetWindowHookEx块WM_ERASEBKGND嵌套窗口
Main Frame
- CView derived class
- CWnd derived class
--- CMFCTabCtrl derived class
---- CDialog derived class
的CMFCTabCtrl可容纳在转动CWnd派生类等等等等...
如果您认为它作为窗口的树让限定以上是在深度0
当树的深度为1,意味着将出现问题:
Main Frame
- CView derived class
- CWnd derived class
--- CMFCTabCtrl derived class
----- CWnd derived class
------- CMFCTabCtrl derived class
-------- CDialog derived class
添加以下代码以我的申请:
extern HHOOK hHook = nullptr;
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam)
{
return CallNextHookEx(hook, nCode, wParam, lParam);
}
hHook = SetWindowsHookEx(WH_CALLWNDPROC, &HookProc, AfxGetInstanceHandle(), GetCurrentThreadId());
我然后运行应用程序和调整大小的主框架,我注意到以下:
- 在这种情况下,其中树的深度为0在对话框中收到
WM_ERASEBKGND
消息。 - 在树深度为1的情况下,在对话框中未收到
WM_ERASEBKGND
消息。
我希望我的解释清楚。
设置挂钩会以如此戏剧性的方式影响行为,这似乎很奇怪。
你们有没有遇到过这种问题?