ctreectrl树形控件 怎样才能让他的背景色变成透明

时间:2022-12-09 14:50:27
ctreectrl树形控件 怎样才能让他的背景色变成透明~~~
我定义了一个对象 CTreeCtrl & m_Tree;

m_Tree.SetBkColor(RGB(255,255,255));//这函数可以改背景色,,但是无法透明~~~

7 个解决方案

#1


重载CTreeCtrl类,WM_ERASEBKGND消息中直接return TRUE;

#2


SetBkMode(TRANSPARENT)

#3


这个过程比较麻烦,你必须先选好要去掉的颜色,做好响应的树形控件BMP图。

//比如在视图CLeftView
void CLeftView::setTreeStyle()
{
CTreeCtrl &treectrl=this->GetTreeCtrl();
treectrl.SetBkColor(RGB(255,218,185)); //PeachPuff
treectrl.SetTextColor(RGB(0,0,162));
CBitmap bmp1; 
bmp1.LoadBitmap(IDB_TREE); //你的树形控件图片,假设除掉主要显示的部分后,他的背景色 为RGB(252,2,252))
         //当然,你可以设置成其他颜色
CImageList img;//用这个类
img.Create(16,16, ILC_COLOR24|ILC_MASK, 3,2); 
img.Add(&bmp1, RGB(252,2,252)); //RGB(252,2,252))为要去掉的色
treectrl.SetImageList(&img, TVSIL_NORMAL);
    img.Detach();

}

#4


引用 1 楼 visualeleven 的回复:
重载CTreeCtrl类,WM_ERASEBKGND消息中直接return TRUE;


重载类是什么意思,,,是不是派生一个CTreeCtrl的子类,然后子类里面重写ERASEBKGND响应函数???
我试了一下还是不行

#5


引用 4 楼 beyongmind 的回复:
引用 1 楼 visualeleven 的回复:
重载CTreeCtrl类,WM_ERASEBKGND消息中直接return TRUE;


重载类是什么意思,,,是不是派生一个CTreeCtrl的子类,然后子类里面重写ERASEBKGND响应函数???
我试了一下还是不行


经过验证,可以。
不过如果你透明的目的是为了给树控件弄个背景图,在重载类CTreeCtrl中的WM_ERASEBKGND中绘制背景,返回TRUE,在展开通知中刷新背景就行了。

#6


引用 5 楼 feilongjilei 的回复:
引用 4 楼 beyongmind 的回复:
引用 1 楼 visualeleven 的回复:
重载CTreeCtrl类,WM_ERASEBKGND消息中直接return TRUE;


重载类是什么意思,,,是不是派生一个CTreeCtrl的子类,然后子类里面重写ERASEBKGND响应函数???
我试了一下还是不行


经过验证,可以。
不过如果你透明的目的是为了给树控件弄……




我不明白的地方是,,,我断点设置在那边 程序都没跳到那边,
估计是那边乱了套,不知道消息怎么传递的

程序中我是这样写的

class MyTreeCtrl : public CTreeCtrl;// 派生的类
class CMyTreeView : public CTreeView;//CMyTreeView是视图,用于跟树形控件关联后显示树形的
这个类中定义了个对象MyTreeCtrl & m_Tree;然后
够造函数中关联起来CMyTreeView::CMyTreeView():m_Tree((MyTreeCtrl &)GetTreeCtrl())

////这边是派生类中重写的方法
BOOL MyTreeCtrl::OnEraseBkgnd(CDC* pDC) 
{
AfxMessageBox("on erasebkgnd");// 断点设在这,,没进来
return TRUE;
//return CTreeCtrl::OnEraseBkgnd(pDC);
}

#7


您好
我是本版版主
此帖以多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法

#1


重载CTreeCtrl类,WM_ERASEBKGND消息中直接return TRUE;

#2


SetBkMode(TRANSPARENT)

#3


这个过程比较麻烦,你必须先选好要去掉的颜色,做好响应的树形控件BMP图。

//比如在视图CLeftView
void CLeftView::setTreeStyle()
{
CTreeCtrl &treectrl=this->GetTreeCtrl();
treectrl.SetBkColor(RGB(255,218,185)); //PeachPuff
treectrl.SetTextColor(RGB(0,0,162));
CBitmap bmp1; 
bmp1.LoadBitmap(IDB_TREE); //你的树形控件图片,假设除掉主要显示的部分后,他的背景色 为RGB(252,2,252))
         //当然,你可以设置成其他颜色
CImageList img;//用这个类
img.Create(16,16, ILC_COLOR24|ILC_MASK, 3,2); 
img.Add(&bmp1, RGB(252,2,252)); //RGB(252,2,252))为要去掉的色
treectrl.SetImageList(&img, TVSIL_NORMAL);
    img.Detach();

}

#4


引用 1 楼 visualeleven 的回复:
重载CTreeCtrl类,WM_ERASEBKGND消息中直接return TRUE;


重载类是什么意思,,,是不是派生一个CTreeCtrl的子类,然后子类里面重写ERASEBKGND响应函数???
我试了一下还是不行

#5


引用 4 楼 beyongmind 的回复:
引用 1 楼 visualeleven 的回复:
重载CTreeCtrl类,WM_ERASEBKGND消息中直接return TRUE;


重载类是什么意思,,,是不是派生一个CTreeCtrl的子类,然后子类里面重写ERASEBKGND响应函数???
我试了一下还是不行


经过验证,可以。
不过如果你透明的目的是为了给树控件弄个背景图,在重载类CTreeCtrl中的WM_ERASEBKGND中绘制背景,返回TRUE,在展开通知中刷新背景就行了。

#6


引用 5 楼 feilongjilei 的回复:
引用 4 楼 beyongmind 的回复:
引用 1 楼 visualeleven 的回复:
重载CTreeCtrl类,WM_ERASEBKGND消息中直接return TRUE;


重载类是什么意思,,,是不是派生一个CTreeCtrl的子类,然后子类里面重写ERASEBKGND响应函数???
我试了一下还是不行


经过验证,可以。
不过如果你透明的目的是为了给树控件弄……




我不明白的地方是,,,我断点设置在那边 程序都没跳到那边,
估计是那边乱了套,不知道消息怎么传递的

程序中我是这样写的

class MyTreeCtrl : public CTreeCtrl;// 派生的类
class CMyTreeView : public CTreeView;//CMyTreeView是视图,用于跟树形控件关联后显示树形的
这个类中定义了个对象MyTreeCtrl & m_Tree;然后
够造函数中关联起来CMyTreeView::CMyTreeView():m_Tree((MyTreeCtrl &)GetTreeCtrl())

////这边是派生类中重写的方法
BOOL MyTreeCtrl::OnEraseBkgnd(CDC* pDC) 
{
AfxMessageBox("on erasebkgnd");// 断点设在这,,没进来
return TRUE;
//return CTreeCtrl::OnEraseBkgnd(pDC);
}

#7


您好
我是本版版主
此帖以多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接

见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法