怎样修改CListBox的背景色? 怎样修改CListBox的背景色?越简单越好。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 改变控件的颜色 需要改变控件的颜色,可以通过两种方法,其一,可以在父类中指定控件的颜色。其二,利用消息反射在控件类中指定颜色。 当控件需要重新着色时,工作框调用父窗口(通常是对话框)的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。 这样我们就完成了控件的着色。 http://www.codeproject.com/combobox/xlistbox.asp to HunterForPig(留着口水的猪) :你的代码是修改有文字部分的背景, 没文字部分的背景还是没被修改。 to vcleaner(我没做大哥已经很久了.......) :你们可能误解我的意思了,我不是指有文字部分的背景。 你可以通过重载OnCtlColor实现:HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { COLORREF clr; HBRUSH m_brMine; switch(nCtlColor) { case CTLCOLOR_LISTBOX: clr = RGB(160,0,0); pDC->SetTextColor(clr); //设置黑色的文本 clr = RGB(166,210,210); pDC->SetBkColor(clr); //设置淡蓝色的背景 m_brMine = ::CreateSolidBrush(clr); return m_brMine; //返回对应的刷子句柄 default: HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); return hbr; }} vc读取excel如何判断其中的空白记录(空行) datagrid能结合下拉列表吗 请高手指点:抓屏,压缩,然后网络传输的过程 很简单的问题,初学者应该都会遇见的问题。。win32数据类型问题。。。 EnumWindows和FindWindowEx和SPY++的问题~~~~此题有难度 帮帮忙吧!怎样在对话框中显示图片? 用GetSystemMetrics如何获得窗体的标题栏高度? 请高手帮忙分析一下我的IIS日志 大侠们,怎么样通过PE格式解析exe文件中的MENU资源(菜单项)。我都被逼疯了! 可变参数函数的调用 请教Socket编程问题 对stl比较了解的进来帮帮我
需要改变控件的颜色,可以通过两种方法,其一,可以在父类中指定控件的颜色。其二,利用消息反射在控件类中指定颜色。 当控件需要重新着色时,工作框调用父窗口(通常是对话框)的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。 这样我们就完成了控件的着色。
你的代码是修改有文字部分的背景, 没文字部分的背景还是没被修改。
你们可能误解我的意思了,
我不是指有文字部分的背景。
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
COLORREF clr;
HBRUSH m_brMine;
switch(nCtlColor)
{
case CTLCOLOR_LISTBOX:
clr = RGB(160,0,0);
pDC->SetTextColor(clr); //设置黑色的文本
clr = RGB(166,210,210);
pDC->SetBkColor(clr); //设置淡蓝色的背景
m_brMine = ::CreateSolidBrush(clr);
return m_brMine; //返回对应的刷子句柄
default:
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}
}