100分,求大神相助,单文档切换时图闪烁(急)
100分,求大神帮助,单文档切换时图闪烁(急!)
我是单文档,被分割为左右两部分,左边是一个treeview,右边是一个Listview,点击左边treeview的Item,右边的视图可以切换问题是我点击左边Item切换时,整个单文档会闪烁,左边和右边都会闪烁一下。代码如下:
void CTreeOptionWnd::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
{//这个函数点击选项发出一个消息
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
HTREEITEM hTreeItem = GetTreeCtrl().GetSelectedItem();
HWND pCWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
if (hTreeItem == m_hSubItem[0])
{
::SendMessage(pCWnd, WM_CHANGEDVIEW, WPARAM(0), 0); //WM_CHANGEDVIEW是我自定义的消息
}
if (hTreeItem == m_hSubItem[1])
{
::SendMessage(pCWnd, WM_CHANGEDVIEW, WPARAM(1), 0);
}
*pResult = 0;
}
自定义消息
ON_MESSAGE(WM_CHANGEDVIEW, OnChangedeView)
OnchangeView 函数是控制切换视图的函数
LRESULT CMainFrame::OnChangedeView( WPARAM wParam, LPARAM lParam )
{
CCreateContext bContext;
UINT uiDlgID = (UINT)wParam;
CRect rc;
//((CView *)m_SplitterWnd.GetPane(0, 1))->GetClientRect(&rc);
GetClientRect(&rc);
CDocument *pDoc = ((CView *)m_SplitterWnd.GetPane(0, 1))->GetDocument();
pDoc->m_bAutoDelete = FALSE;
((CView *)m_SplitterWnd.GetPane(0, 1))->DestroyWindow();
pDoc->m_bAutoDelete = TRUE;
switch( uiDlgID )
{
case 0:
bContext.m_pNewViewClass = RUNTIME_CLASS(CFormSetPassword);
break;
case 1:
bContext.m_pNewViewClass = RUNTIME_CLASS(CListControlWnd);
break;
default:
break;
}
bContext.m_pCurrentDoc = pDoc;
bContext.m_pNewDocTemplate = NULL;
bContext.m_pLastView = NULL;
bContext.m_pCurrentFrame = NULL;
if (!m_SplitterWnd.CreateView(0, 1, bContext.m_pNewViewClass, CSize(rc.Width(),rc.Height()), &bContext))
{
return FALSE;
}
//m_SplitterWnd.CreateView(0, 1, bContext.m_pNewViewClass, CSize(rc.Width(),rc.Height()), &bContext);
CView * pNewView= (CView *)m_SplitterWnd.GetPane(0, 1);
m_SplitterWnd.SetActivePane(0 , 1);
pNewView->SendMessage(WM_INITIALUPDATE, 0, 0); //必须加上这句才能是视图显示
m_SplitterWnd.RecalcLayout();
//m_SplitterWnd.ShowView
RedrawWindow();
//UpdateWindow();
return 0;
}
求大神帮忙 ,我切换视图时候会闪烁。就是闪一下,跟刷新了一样
我是单文档,被分割为左右两部分,左边是一个treeview,右边是一个Listview,点击左边treeview的Item,右边的视图可以切换问题是我点击左边Item切换时,整个单文档会闪烁,左边和右边都会闪烁一下。代码如下:
void CTreeOptionWnd::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
{//这个函数点击选项发出一个消息
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
HTREEITEM hTreeItem = GetTreeCtrl().GetSelectedItem();
HWND pCWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
if (hTreeItem == m_hSubItem[0])
{
::SendMessage(pCWnd, WM_CHANGEDVIEW, WPARAM(0), 0); //WM_CHANGEDVIEW是我自定义的消息
}
if (hTreeItem == m_hSubItem[1])
{
::SendMessage(pCWnd, WM_CHANGEDVIEW, WPARAM(1), 0);
}
*pResult = 0;
}
自定义消息
ON_MESSAGE(WM_CHANGEDVIEW, OnChangedeView)
OnchangeView 函数是控制切换视图的函数
LRESULT CMainFrame::OnChangedeView( WPARAM wParam, LPARAM lParam )
{
CCreateContext bContext;
UINT uiDlgID = (UINT)wParam;
CRect rc;
//((CView *)m_SplitterWnd.GetPane(0, 1))->GetClientRect(&rc);
GetClientRect(&rc);
CDocument *pDoc = ((CView *)m_SplitterWnd.GetPane(0, 1))->GetDocument();
pDoc->m_bAutoDelete = FALSE;
((CView *)m_SplitterWnd.GetPane(0, 1))->DestroyWindow();
pDoc->m_bAutoDelete = TRUE;
switch( uiDlgID )
{
case 0:
bContext.m_pNewViewClass = RUNTIME_CLASS(CFormSetPassword);
break;
case 1:
bContext.m_pNewViewClass = RUNTIME_CLASS(CListControlWnd);
break;
default:
break;
}
bContext.m_pCurrentDoc = pDoc;
bContext.m_pNewDocTemplate = NULL;
bContext.m_pLastView = NULL;
bContext.m_pCurrentFrame = NULL;
if (!m_SplitterWnd.CreateView(0, 1, bContext.m_pNewViewClass, CSize(rc.Width(),rc.Height()), &bContext))
{
return FALSE;
}
//m_SplitterWnd.CreateView(0, 1, bContext.m_pNewViewClass, CSize(rc.Width(),rc.Height()), &bContext);
CView * pNewView= (CView *)m_SplitterWnd.GetPane(0, 1);
m_SplitterWnd.SetActivePane(0 , 1);
pNewView->SendMessage(WM_INITIALUPDATE, 0, 0); //必须加上这句才能是视图显示
m_SplitterWnd.RecalcLayout();
//m_SplitterWnd.ShowView
RedrawWindow();
//UpdateWindow();
return 0;
}
求大神帮忙 ,我切换视图时候会闪烁。就是闪一下,跟刷新了一样