社区
界面
帖子详情
请问如何给树控件(CTreeCtrl)加上背景图片?
dylwx
2003-09-14 02:44:53
树控件过于单调,请问如何给树控件(CTreeCtrl)加上背景图片?
...全文
64
2
打赏
收藏
请问如何给树控件(CTreeCtrl)加上背景图片?
树控件过于单调,请问如何给树控件(CTreeCtrl)加上背景图片?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
SeainBlue
2003-09-14
打赏
举报
回复
实现步骤:
3.1 加入成员函数 BOOL CMyTreeCtrl::SetBKImage(LPCTSTR LpszResource)
{
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;
}
gzshd
2003-09-14
打赏
举报
回复
派生CTreeCtrl类
VC++ 专家指导.doc
(66)怎样才能关闭
树
形
控件
中的滚动条? 149 (67)如何建立一个带滚动条的窗口? 149 (68)如何实现对话框的拖放? 150 (69)TrackMouseEvent()怎么了 151 (70)奇怪的组合框
控件
152 (71)关于使用MS SANS SERIF字体 152 (72...
VC++常用功能实例
被禁止(Disable)的
控件
如何改变其文本或背景色? 90 有ODBC的查找函数吗? 91 多个MRU菜单的问题 91 校验框类问题 93 CFormView类的Fold按钮 94 视的背景色 94 隐藏
控件
台程序 94 修改SDI窗口标题 95 焦点问题 95 从一...
VC++常用的共用函数100多页
被禁止(Disable)的
控件
如何改变其文本或背景色? 90 有ODBC的查找函数吗? 91 多个MRU菜单的问题 91 校验框类问题 93 CFormView类的Fold按钮 94 视的背景色 94 隐藏
控件
台程序 94 修改SDI窗口标题 95 焦点问题 95 从一...
C++MFC教程
系统会在队列中取出每一条消息,根据消息的接收句柄而将该消息发送给拥有该窗口的程序的消息循环。每一个运行的程序都有自己的消息循环,在循环中得到属于自己的消息并根据接收窗口的句柄调用相应的窗口过程。而在...
C
Tree
Ctrl
操作总结
C
Tree
Ctrl
操作总结
界面
15,979
社区成员
115,897
社区内容
发帖
与我相关
我的任务
界面
VC/MFC 界面
复制链接
扫一扫
分享
社区描述
VC/MFC 界面
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章