用实现在中使用背景位牛
一、引言:
对于TreeView控件的背景位图的实现,目前介绍的文章比较少,有人虽然实现了,但是在点击TREE时,背景闪动比较厉害。本人在参照别人代码的基础上,把它总结一下,同时解决了这个背景闪烁的问题。目前FLASHGET1.3版也实现了TREEVIEW的背景位图。大家可以参照一下。
本文程序运行效果如下图:
二、原理:
因为WINDOWS标准TREEVIEW控件不支持背景位图,所以如果需要设置背景位图就需要先让其在内存CDC对象上对TREEVIEW缺省绘图,然后在选择背景位图,与缺省位图合成,即采用贴图的方式,把标准的TREEVIEW窗口贴在底图上。这个操作在内存中完成。
同时为了避免闪烁,必须重载OnItemexpanding和OnItemexpanded这两个函数。SetRedraw函数主要保证其不要在子树弹出时重画,而是子树已经扩展后重画。
三、实现步骤:
3.1 加入成员函数
BOOL CMyTreeCtrl::SetBKImage(LPCTSTR LpszResource)
{
if( m_bitmap.m_hObject != NULL )
m_leteObject();
HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
LpszResource, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
if( hbmp == NULL )
return FALSE;
m_tach( hbmp );
return TRUE;
}
3.2 为WM_PAINT加入消息句柄
void CMyTreeCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
CRect rcclient;
GetClientRect(rcclient);
// create a compatible memory dc
CDC memdc;
eateCompatibleDC(dc);
CBitmap bitmap;
eateCompatibleBitmap(dc, dth(), ight());
lectObject( bitmap );
DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
CDC maskdc;
eateCompatibleDC(dc);
CBitmap maskbitmap;
eateCompatibleBitmap(dc, dth(), ight());
lectObject( maskbitmap );
CBrush brush;
同捷科技被证监会否决说明该公司确实存在问题 eatePatternBrush(m_bitmap);
llRect(rcclient, brush);
tBlt(0,0,dth(), ight(),memdc,0,0,SRCAND);
tBlt(ft, p, dth(), ight(),
maskdc,ft, p,SRCCOPY);
}
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;
}查看本文来源
柳州哪家医院白癜风好海口医院哪家治疗男科好
痛风怎么缓解疼痛
- 上一篇:用实现数据源设置覆盖
- 下一篇:用实现对超长数据库字段的操作呢
-
狗狗挤肛门腺的方法位置
菜谱2022年06月17日
-
狗狗挠眼睛的问题位置
菜谱2022年06月17日
-
狗狗得了青光眼怎么医治位置
菜谱2022年06月17日
-
狗狗得了青光眼怎么办图位置
菜谱2022年06月17日
-
狗狗得了血管瘤怎么办图位置
菜谱2022年06月17日