visual-studio - CView 作为 CMFCTabCtrl 上的选项卡,不绘制无效区域(在拖动时)
问题描述
我有一个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
是对象。m_wndTabs 调整大小以覆盖整个客户区:CViewTest1
CViewTest2
CMyView
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()。它看起来像这样:
任何想法?
解决方案
CViewTest1 和 2 是 CView 类。
CView 不应包含其他视图。
外框应包含带有视图的选项卡。
推荐阅读
- python - 从 Python 脚本调用 Scrapy spider
- ruby-on-rails - Rails 迁移:检查变量是否存在
- magento - 在后端 Magento 中显示前端类别 URL
- sql-server - 使用命令“update-Database”更新数据库时出现“用户登录失败”错误
- php - 如何在 WooCommerce 中按 total_sales 然后 rand 订购?
- node.js - Vue.js 抛出多个警告:无效的道具:道具“项目”的类型检查失败。预期的数组,得到值为“”的字符串
- php - 命名空间和扩展类
- spring - 使用Spock在Spring中模拟注入不起作用
- image - xamarin 有时会通过 URL 形成图像而不在列表视图中显示图像
- highcharts - Highmap:触发悬停+在悬停气泡数据上显示国家的工具提示