2013-02-26 40 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消息。

我希望我的解釋清楚。

設置掛鉤會以如此戲劇性的方式影響行爲,這似乎很奇怪。

你們有沒有遇到過這種問題?

回答