1.启用多文档视图,添加TreeView数据
2.最小化主窗口,然后恢复窗口,发生CFileView窗口闪烁。
3.其中CApp**View.cpp视图显示区可以在OnDraw()中采用双缓冲解决了View区域的闪烁问题。
但是树状图还是发生闪烁,跟踪发现多次调用了WM_PAINT 消息。导致闪烁,一直没有找到什么原因引起多次调用WM_PAINT消息。
4.MFC 自动生成的选项卡式MDI隐藏然后恢复都没有出现闪烁。
这是公司之前写的代码,不太熟悉代码流程调用,所以搞了一天也没有解决树状图闪烁的问题。
现在开始记录工作进程。调查资料发现MDI采用数据和视图分离方法,在View 的OnDraw中进行绘制图形。
如下// CMuDocViewView 绘制
void CMuDocViewView::OnDraw(CDC* /*pDC*/)
{
CMuDocViewDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 在此处为本机数据添加绘制代码
}
在子窗口中可以改变窗口风格
BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或样式
cs.style &= ~FWS_ADDTOTITLE;
if( !CMDIChildWndEx::PreCreateWindow(cs) )
return FALSE;
return TRUE;
}
在View中设置选项卡标题
void CMuDocViewView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: 计算此视图的合计大小
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
GetParent()->SetWindowText(_T("测试视图")); //设置选项卡标题
}
5.Docment 可以创建多个文档,显示的时候内部机制调用OnDraw 绘制图形。
6.猜测会不会是View 窗口绘制,同时也刷新了TreeView,但是MFC 的MDI 却没有这样的调用,即微软MDI调用View视图不影响TreeView OnPaint