2013-02-26 54 views
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()); 

我然后运行应用程序和调整大小的主框架,我注意到以下:

  1. 在这种情况下,其中树的深度为0在对话框中收到WM_ERASEBKGND消息。
  2. 在树深度为1的情况下,在对话框中未收到WM_ERASEBKGND消息。

我希望我的解释清楚。

设置挂钩会以如此戏剧性的方式影响行为,这似乎很奇怪。

你们有没有遇到过这种问题?

回答