TreeCtrl闪屏

snappyrain 2007-08-23 03:29:27
我的代码如下

大侠们给我看看啊

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();
}



当点击树型控件的项时,树的项的范围闪屏...这个问题怎么解决...着急...!!!
...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
snappyrain 2007-08-24
  • 打赏
  • 举报
回复
没有人来了??
zkcq2004 2007-08-23
  • 打赏
  • 举报
回复
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);
最后那点 你好象用了2次 我不知道你的SRCAND和SRCPAINT是定义的啥?
snappyrain 2007-08-23
  • 打赏
  • 举报
回复
谢谢 zkcq2004()大哥这么认真地看
我都没这么认真看……。

我注释了一个,不是这个原因
zkcq2004 2007-08-23
  • 打赏
  • 举报
回复
m_pImageList = new CImageList();

CBitmap bmp;
m_pImageList = new CImageList();
是不是你用了2个的原因?
snappyrain 2007-08-23
  • 打赏
  • 举报
回复
我把它注释了.
zkcq2004 2007-08-23
  • 打赏
  • 举报
回复
//memdc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(), &maskdc, rcclient.left, rcclient.top, SRCAND);
不知道你是注释2句还是不注释.
zkcq2004 2007-08-23
  • 打赏
  • 举报
回复
看起来太费劲了..
snappyrain 2007-08-23
  • 打赏
  • 举报
回复
闪两下!
snappyrain 2007-08-23
  • 打赏
  • 举报
回复
当点击树型控件的项时,树的项的范围闪屏...这个问题怎么解决...着急...!!!
zkcq2004 2007-08-23
  • 打赏
  • 举报
回复
帮顶.

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧