树控件过于单调,请问如何给树控件(CTreeCtrl)加上背景图片?
解决方案 »
- 请问jpg具体的文件格式是怎样的?怎样实现与bmp文件之间的相互转化
- 请教一个关于“事件对象”的问题
- 如何做出VC6 那样的workspace?
- 网络会议系统问题
- 问一个VC中比较低级的问题
- DirectX可否以对话框中的某个控件为主窗体进行绘图?
- 各位版主,改版后的CSDN中,怎么看我有多少可用分?
- 懂汇编的哥们看过来? -- 如何获得一个函数(静态)的地址?
- 想写一个程序功能为:音频文件转换为文本文件!
- 求!关于上传客户端与服务端的编程资料 C++
- 谁知道vc6中的Add to Project->Components and Controls在vc.net中跑到什么地方去了??
- 我自己写了View类中的OnPrint函数输出一些文本,在打印预览时显示正确,可是到打印机上就全是横线和黑方块了,为什么会这样?
{
if( m_bitmap.m_hObject != NULL )
m_bitmap.DeleteObject();
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
LpszResource, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE); if( hbmp == NULL )
return FALSE; m_bitmap.Attach( hbmp );
return TRUE;
}
3.2 为WM_PAINT加入消息句柄 void CMyTreeCtrl::OnPaint()
{
CPaintDC dc(this);
CRect rcclient;
GetClientRect(&rcclient); 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); 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); dc.SetBkColor(RGB(255,255,255));
dc.SetTextColor(RGB(0,0,0));
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&maskdc, rcclient.left, rcclient.top, SRCAND);
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&memdc, rcclient.left, rcclient.top,SRCPAINT);
brush.DeleteObject();
}
3.3 处理tvn_itemexpanding void CMyTreeCtrl::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
SetRedraw(FALSE);
*pResult = 0;
}
3.4 处理tvn_itemexpanded void CMyTreeCtrl::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
Invalidate();
SetRedraw(TRUE);
*pResult = 0;
}
3.5 加入WM_ERASEBKGND消息处理函数既然我们在OnPaint()函数中处理位图并返回TRUE以保证默认的窗口进程不擦除背景,加入这个消息句柄可以避免额外的对客户区的刷新以减少闪烁。 BOOL CMyTreeCtrl::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}