MFC选项卡式MDI:OnAfterTaskbarActivate()太多
(我的英语可能很奇怪) 我使用MFC选项卡式MDI,没有文档/视图 我删除自动生成的视图类,并使用MFC选项卡式MDI:OnAfterTaskbarActivate()太多,mfc,Mfc,(我的英语可能很奇怪) 我使用MFC选项卡式MDI,没有文档/视图 我删除自动生成的视图类,并使用CSplitterWnd和我自己的视图类 “我自己的视图类”有两个子控件:编辑控件和我的自定义控件 (编辑:我创建了新的选项卡式MDI,没有文档/视图MFC项目,并用spy++测试了该项目。但以下问题再次出现!) (编辑:再次使用文档/视图!) 在编写此程序时,我发现了一个奇怪的问题: 当我通过单击Aero Peek缩略图来验证窗口时,我的自定义控件被绘制了很多次(WM_PAINT被发送了很多次)
CSplitterWnd
和我自己的视图类
“我自己的视图类”有两个子控件:编辑控件和我的自定义控件
(编辑:我创建了新的选项卡式MDI,没有文档/视图MFC项目,并用spy++测试了该项目。但以下问题再次出现!)(编辑:再次使用文档/视图!) 在编写此程序时,我发现了一个奇怪的问题: 当我通过单击Aero Peek缩略图来验证窗口时,我的自定义控件被绘制了很多次(WM_PAINT被发送了很多次) 我在那个WM_画图中发现了
CMDIFrameWndEx::OnAfterTaskbarActivate
函数调用RedrawWindow
,OnAfterTaskbarActivate被调用了很多次(31次,耶)
你能告诉我这个问题的原因和解决方法吗?我也有同样的问题。我的解决方案是覆盖OnAfterTaskbarActivate 将此添加到您的MessageMap
ON_REGISTERED_MESSAGE(AFX_WM_AFTER_TASKBAR_ACTIVATE, OnAfterTaskbarActivate)
功能如下。请注意,这与没有重画的原始函数完全相同
LRESULT CMainFrame::OnAfterTaskbarActivate(WPARAM, LPARAM lp)
{
HWND hwndMDIChild = (HWND)lp;
if (hwndMDIChild != NULL && ::IsWindow(hwndMDIChild))
{
::SetFocus(hwndMDIChild);
}
return 0;
}
我希望这有帮助。它解决了我的问题。我遇到了与此相同的问题。我的解决方案是覆盖OnAfterTaskbarActivate 将此添加到您的MessageMap
ON_REGISTERED_MESSAGE(AFX_WM_AFTER_TASKBAR_ACTIVATE, OnAfterTaskbarActivate)
功能如下。请注意,这与没有重画的原始函数完全相同
LRESULT CMainFrame::OnAfterTaskbarActivate(WPARAM, LPARAM lp)
{
HWND hwndMDIChild = (HWND)lp;
if (hwndMDIChild != NULL && ::IsWindow(hwndMDIChild))
{
::SetFocus(hwndMDIChild);
}
return 0;
}
我希望这有帮助。它解决了我的问题。哦,非常感谢您的回答!我认为我的答案被忽略了;;我会尝试接受答案,谢谢!它工作得很好!顺便说一句,为什么会这样?我记得以前版本的MFC(或VisualStudio?)没有出现这种情况。哦,非常感谢您的回答!我认为我的答案被忽略了;;我会尝试接受答案,谢谢!它工作得很好!顺便说一句,为什么会这样?我记得以前版本的MFC(或VisualStudio?)没有出现这种情况。