TreeCtrl闪屏
我的代码如下
大侠们给我看看啊
BOOL CMainDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_ctrlTree.SetBKImage( IDB_BITMAP_TREEBG );
//CTreeCtrl图标列表
m_pImageList = new CImageList();
CBitmap bmp;
m_pImageList = new CImageList();
m_pImageList->Create( 20,20,ILC_MASK,5,5);
bmp.LoadBitmapW( IDB_BITMAP_TREEHEAD);
m_pImageList->Add( &bmp, (COLORREF)0x000000);
bmp.DeleteObject();
bmp.LoadBitmapW( IDB_BITMAP_NEW);
m_pImageList->Add( &bmp, (COLORREF)0xFFFFFF);
bmp.DeleteObject();
bmp.LoadBitmapW( IDB_BITMAP_FORWARD);
m_pImageList->Add( &bmp, (COLORREF)0xFFFFFF);
bmp.DeleteObject();
bmp.LoadBitmapW( IDB_BITMAP_OLD);
m_pImageList->Add( &bmp, (COLORREF)0xFFFFFF);
bmp.DeleteObject();
bmp.LoadBitmapW( IDB_BITMAP_RECYCLE);
m_pImageList->Add( &bmp, (COLORREF)0xFFFFFF);
bmp.DeleteObject();
m_ctrlTree.SetImageList( m_pImageList, TVSIL_NORMAL);
//初始化CTreeCtrl
TVINSERTSTRUCT tvInsert;
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT | /*TVIF_SELECTEDIMAGE |*/TVIF_IMAGE;
tvInsert.item.iImage = 0;
//tvInsert.item.iSelectedImage = 0;
tvInsert.item.pszText = _T("票务列表管理");
hTicketList = m_ctrlTree.InsertItem(&tvInsert);
hNewTicket = m_ctrlTree.InsertItem(TVIF_TEXT|TVIF_IMAGE,_T("最新票证"), 1, 1, 0, 0, 0, hTicketList, NULL);
hForwardTicket = m_ctrlTree.InsertItem(TVIF_TEXT|TVIF_IMAGE,_T("已转票证"), 2, 2, 0, 0, 0, hTicketList, NULL);
hOldTicket = m_ctrlTree.InsertItem(TVIF_TEXT|TVIF_IMAGE,_T("过期票证"), 3, 3, 0, 0, 0, hTicketList, NULL);
hRecycle = m_ctrlTree.InsertItem(TVIF_TEXT|TVIF_IMAGE,_T("回收站"), 4, 4, 0, 0, 0, hTicketList, NULL);
m_ctrlTree.Expand( hTicketList,TVE_EXPAND );
return TRUE;
}
void CMyTreeCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rcclient;
GetClientRect( &rcclient);
// create a compatible memory dc
CDC memdc;
memdc.CreateCompatibleDC( &dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap( &dc, rcclient.Width(), rcclient.Height());
memdc.SelectObject( &bitmap );
////////////////////////////////////////////////////
CWnd::DefWindowProc( WM_PAINT, (WPARAM)memdc.m_hDC , 0);
CDC maskdc;
maskdc.CreateCompatibleDC(&dc);
CBitmap maskbitmap;
maskbitmap.CreateBitmap( rcclient.Width(), rcclient.Height(), 1, 1, NULL);
maskdc.SelectObject( &maskbitmap );
/*maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,
rcclient.left, rcclient.top, SRCCOPY);*/
maskdc.StretchBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,
rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), SRCCOPY);
CBrush brush;
brush.CreatePatternBrush( &m_bitmap);
dc.FillRect(rcclient, &brush);
memdc.SetBkColor( RGB(0,0,0));
memdc.SetTextColor( RGB(255,255,255));
//memdc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &maskdc, rcclient.left, rcclient.top, SRCAND);
memdc.StretchBlt( rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &maskdc, rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), SRCAND);
dc.SetBkColor( RGB(255,255,255 ));
dc.SetTextColor( RGB(0,0,0));
dc.StretchBlt( rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &maskdc, rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), SRCAND);
//dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &memdc,
// rcclient.left, rcclient.top,SRCPAINT);
dc.StretchBlt( rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &memdc,
rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),SRCPAINT);
brush.DeleteObject();
}
当点击树型控件的项时,树的项的范围闪屏...这个问题怎么解决...着急...!!!