首页 > 解决方案 > CView 作为 CMFCTabCtrl 上的选项卡,不绘制无效区域(在拖动时)

问题描述

我有一个CWinAppExMDI 应用程序,VS2017。被ChiledFrame覆盖(我更改了这个问题的名称)CMyView

pDocTemplate = new CMultiDocTemplate(   IDR_MYTYPE,
                                        RUNTIME_CLASS(CMyDoc),
                                        RUNTIME_CLASS(CMyChildFrame),
                                        RUNTIME_CLASS(CMyView));

CMyViewclient-rect 用CMFCTabCtrl( m_wndTabs) 覆盖:它有 2 个选项卡、对象CViewTest1CViewTest2类(从 MFC 派生CView)。这是MyView::Create函数的相关部分:

    CRect rectDummy;
    rectDummy.SetRectEmpty();

    // Create tabs window:
    if (!m_wndTabs.Create(CMFCTabCtrl::STYLE_3D_ONENOTE, rectDummy, this, 1))
    {
        TRACE0("Failed to create output tab window\n");
        return -1;      // fail to create
    }

    // Create output panes ('300' value is dummy client-rect is updated on CViewTest1/2::OnSize):

    CViewTest1 *pWnd1 = (CViewTest1*)RUNTIME_CLASS(CViewTest1)->CreateObject();
    pWnd1->Create(nullptr, nullptr, LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE, CRect(0, 0, 300, 300), this, 1, pContext);
    pWnd1->SetFont(&afxGlobalData.fontRegular);

    CViewTest2 *pWnd2 = (CViewTest2*)RUNTIME_CLASS(CViewTest2)->CreateObject();
    pWnd2->Create(nullptr, nullptr, LBS_NOINTEGRALHEIGHT | WS_CHILD | WS_VISIBLE, CRect(0, 0, 300, 300), this, 2, pContext);
    pWnd2->SetFont(&afxGlobalData.fontRegular);

    m_wndTabs.AddTab(pWnd1, L"Tab 1");
    m_wndTabs.AddTab(pWnd2, L"Tab 2");

    // Redraw tab 0 ("Tab 1"): <--- Here already smells an issue.
    m_wndTabs.SetActiveTab(1); // (This need to move to 1 & back to 0)
    m_wndTabs.SetActiveTab(0);

和对象parent是对象。m_wndTabs 调整大小以覆盖整个客户区:CViewTest1CViewTest2CMyView

void CMyView::OnSize(UINT nType, int cx, int cy)
{
    CView::OnSize(nType, cx, cy);

    if (m_wndTabs) // Tab control should cover the whole client area:
        m_wndTabs.SetWindowPos(nullptr, -1, -1, cx, cy, SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOZORDER);

}

现在,当我将一个子框架拖到另一个子框架上并返回时:控制选项卡的行为与预期相同,但 CViewTest1 对象(在活动选项卡上)没有获得 OnDraw()。它看起来像这样:

在此处输入图像描述

任何想法?

标签: visual-studiovisual-c++mfc

解决方案


CViewTest1 和 2 是 CView 类。

CView 不应包含其他视图。

外框应包含带有视图的选项卡。


推荐阅读