我有以下MFC应用程序UI结构:
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());
然后我运行了应用程序并调整了主框架的大小,我注意到以下内容:
WM_ERASEBKGND
消息。WM_ERASEBKGND
消息。我希望我的解释很清楚。
设置钩子会以如此戏剧性的方式影响行为似乎很奇怪。
你们之前是否遇到过这类问题?
答案 0 :(得分:0)
我想我发现了这个问题。 每次我们调整下一个嵌套窗口的大小时,内核堆栈都会增加,直到它没有enougth堆栈来调用wndproc并且我们停止接收消息。