MFC选项卡式MDI:OnAfterTaskbarActivate()太多

MFC选项卡式MDI:OnAfterTaskbarActivate()太多,mfc,Mfc,(我的英语可能很奇怪) 我使用MFC选项卡式MDI,没有文档/视图 我删除自动生成的视图类,并使用CSplitterWnd和我自己的视图类 “我自己的视图类”有两个子控件:编辑控件和我的自定义控件 (编辑:我创建了新的选项卡式MDI,没有文档/视图MFC项目,并用spy++测试了该项目。但以下问题再次出现!) (编辑:再次使用文档/视图!) 在编写此程序时,我发现了一个奇怪的问题: 当我通过单击Aero Peek缩略图来验证窗口时,我的自定义控件被绘制了很多次(WM_PAINT被发送了很多次)

(我的英语可能很奇怪)

我使用MFC选项卡式MDI,没有文档/视图

我删除自动生成的视图类,并使用
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?)没有出现这种情况。