我定义了一个对象 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
重载类是什么意思,,,是不是派生一个CTreeCtrl的子类,然后子类里面重写ERASEBKGND响应函数???
我试了一下还是不行
#5
经过验证,可以。
不过如果你透明的目的是为了给树控件弄个背景图,在重载类CTreeCtrl中的WM_ERASEBKGND中绘制背景,返回TRUE,在展开通知中刷新背景就行了。
#6
我不明白的地方是,,,我断点设置在那边 程序都没跳到那边,
估计是那边乱了套,不知道消息怎么传递的
程序中我是这样写的
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
重载类是什么意思,,,是不是派生一个CTreeCtrl的子类,然后子类里面重写ERASEBKGND响应函数???
我试了一下还是不行
#5
经过验证,可以。
不过如果你透明的目的是为了给树控件弄个背景图,在重载类CTreeCtrl中的WM_ERASEBKGND中绘制背景,返回TRUE,在展开通知中刷新背景就行了。
#6
我不明白的地方是,,,我断点设置在那边 程序都没跳到那边,
估计是那边乱了套,不知道消息怎么传递的
程序中我是这样写的
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
您好
我是本版版主
此帖以多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法
我是本版版主
此帖以多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了 疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
见此回复三日内无回应
我们将强制结帖
相关规定详见界面 界面版关于版主结帖工作的具体办法