我有一个CWinAppEx
MDI应用程序VS2017。 ChiledFrame
涵盖了(我更改了此问题的名称)CMyView
:
pDocTemplate = new CMultiDocTemplate( IDR_MYTYPE,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMyChildFrame),
RUNTIME_CLASS(CMyView));
CMyView
client-rect包含CMFCTabCtrl
(m_wndTabs
):它有2个标签,CViewTest1
和CViewTest2
类的对象(源自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
和CViewTest1
个CViewTest2
个对象是CMyView
个对象。
m_wndTabs调整为覆盖整个客户区域:
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()。它看起来像是:
有什么想法吗?
答案 0 :(得分:2)
CViewTest1和2是CView类。
CView不应包含其他视图。
外框应包含带有视图的Tab。