怎样修改CListBox的背景色
2016-09-18 · 知道合伙人软件行家
关注
展开全部
需要改变控件的颜色,可以通过两种方法,其一,可以在父类中指定控件的颜色。其二,利用消息反射在控件类中指定颜色。
当控件需要重新着色时,工作框调用父窗口(通常是对话框)的cwnd::onctlcolor,可以在父窗口类中重置该函数并指定新的绘画属性。
如下所示,将对话框中的编辑控件的文本颜色改为蓝色。
hbrush cmydialog::onctlcolor(cdc* pdc,cwnd* pwnd,uint nctlcolor)
{
hbrush hbr=cdialog::onctlcolor(pdc,pwnd,nctlcolor);
//draw blue text for edit controls
if(nctlcolor==cltcolor—edit)
pdc->settextcolor(rgb(0,0,255));
return hbr;
}
由于每个窗口必须处理通知消息并指定每个控件的绘画属性,所以,这种方法不是完全的面向对象的方法,控件处理该消息并指定绘画属性更合理一些。
消息反射允许用户这样做,通知消息发给父窗口,若父窗口没有处理则发给控件,创建一个定制彩色列表框控件,其步骤如下。
首先用classwizard创建一个clistbox的派生类,并添加如下的成员变量。
class cmylistbox::public clistbox
{
...
private :
colorref m—clrfore; //foreground color
colorref m—clrback; //background color
cbrush m—brush ; //background brush
...
};
其二,在类的构造函数中初始化数据成员。
cmylistbox::cmylistbox()
{
//initialize data members
m—clrfore=rgb(255,0,0); //red text
m—clrback=rgb(0,255,0);
//green background
m—brush.createsolidbrush(m—clrback);
}
第三,使用classwizard处理反射消息(=wm—ctlcolor)并指定新的绘画属性。
hbrush cmylistbox::ctlcolor(cdc* pdc,uint nctlcolor)
{
pdc->settextcolor(m—clrfore);
pdc->setbkcolor(m—clrback);
return (hbrush)m—brush.getsafehandle();
}
现在控件可以重画自身,与父窗口无关。
最后,在父窗口头文件中包含派生的cmylistbox类,然后用classwizard 定义列表框控件的成员变量即可。其成员变量的类性为cmylistbox。 这样我们就完成了控件的着色。
当控件需要重新着色时,工作框调用父窗口(通常是对话框)的cwnd::onctlcolor,可以在父窗口类中重置该函数并指定新的绘画属性。
如下所示,将对话框中的编辑控件的文本颜色改为蓝色。
hbrush cmydialog::onctlcolor(cdc* pdc,cwnd* pwnd,uint nctlcolor)
{
hbrush hbr=cdialog::onctlcolor(pdc,pwnd,nctlcolor);
//draw blue text for edit controls
if(nctlcolor==cltcolor—edit)
pdc->settextcolor(rgb(0,0,255));
return hbr;
}
由于每个窗口必须处理通知消息并指定每个控件的绘画属性,所以,这种方法不是完全的面向对象的方法,控件处理该消息并指定绘画属性更合理一些。
消息反射允许用户这样做,通知消息发给父窗口,若父窗口没有处理则发给控件,创建一个定制彩色列表框控件,其步骤如下。
首先用classwizard创建一个clistbox的派生类,并添加如下的成员变量。
class cmylistbox::public clistbox
{
...
private :
colorref m—clrfore; //foreground color
colorref m—clrback; //background color
cbrush m—brush ; //background brush
...
};
其二,在类的构造函数中初始化数据成员。
cmylistbox::cmylistbox()
{
//initialize data members
m—clrfore=rgb(255,0,0); //red text
m—clrback=rgb(0,255,0);
//green background
m—brush.createsolidbrush(m—clrback);
}
第三,使用classwizard处理反射消息(=wm—ctlcolor)并指定新的绘画属性。
hbrush cmylistbox::ctlcolor(cdc* pdc,uint nctlcolor)
{
pdc->settextcolor(m—clrfore);
pdc->setbkcolor(m—clrback);
return (hbrush)m—brush.getsafehandle();
}
现在控件可以重画自身,与父窗口无关。
最后,在父窗口头文件中包含派生的cmylistbox类,然后用classwizard 定义列表框控件的成员变量即可。其成员变量的类性为cmylistbox。 这样我们就完成了控件的着色。
博思aippt
2024-07-20 广告
2024-07-20 广告
博思AIPPT是基于ai制作PPT的智能在线工具,它提供了4种AI制作PPT的方式,包括AI生成大纲、AI直接生成PPT、文本生成PPT、AI提炼文档生成PPT,一站式集成多种AI生成PPT的方式,可满足办公用户的不同需求和使用场景。ai生...
点击进入详情页
本回答由博思aippt提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询