改变背景和字体颜色
我在一个dialogbar上放了两个listbox,dialogbar停靠在顶部,现在我想改变这两个listbox的背景色和里面的字体色,该怎么做?
我试着获得了两个listbox得指针,然后调用setbkcolor改变背景色,但不行!
请高手指教!
问题点数:20、回复次数:24Top
1 楼tonyswe(tong)回复于 2005-01-25 13:08:07 得分 0
写个继承类
,使用ClassWizard 处理反射的WM_CTLCOLOR(=WM_CTLCOLOR)消息并指定新的绘画
属性。
HBRUSH CMyListBox : : CtlColor (CDC* pDC, UINT nCtlColor )
{
pDC—>SetTextColor (m_clrFore);
pDC—>SetBkColor (m_clrBack);
return (HBRUSH) m_brush.GetSafeHandle ()
}Top
2 楼changpei(我的博客:http:\\changpei.tianyablog.com)回复于 2005-01-25 13:42:35 得分 0
获得了两个listbox得指针后,CDC dc(pList);
dc.SetBkColor(..).不行?我不信。Top
3 楼chabuduo123()回复于 2005-01-25 14:48:25 得分 0
我是这样做的,不行!
希望高手不吝赐教!Top
4 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 15:24:04 得分 0
完全可以的吗?我试过了.
HBRUSH CListDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(::GetDlgItem(this->m_hWnd,IDC_LIST1)==pWnd->m_hWnd)
{
pDC->SetTextColor(RGB(0,145,0));
pDC->SetBkColor(RGB(121,0,0));
}
return hbr;
}
Top
5 楼chabuduo123()回复于 2005-01-25 16:45:17 得分 0
可是我用的不是dlg,我用的是SDI,请问如何对SDI得dialogbar重载OnCtlColorTop
6 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 17:31:11 得分 0
tonyswe(tong) ( )应该也可以的Top
7 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 17:45:22 得分 0
OnCtlColor will not be called for the list box of a drop-down combo box because the drop-down list box is actually a child of the combo box and not a child of the window. To change the color of the drop-down list box, create a CComboBox with an override of OnCtlColor that checks for CTLCOLOR_LISTBOX in the nCtlColor parameter. In this handler, the SetBkColor member function must be used to set the background color for the text.
我try itTop
8 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 18:00:06 得分 0
HBRUSH Mylist::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetTextColor (RGB(130,0,0));
pDC->SetBkColor (RGB(0,130,0));
return CreateSolidBrush(RGB(0,0,130));
}
可以的.
(上面一段英文贴错了,不好意思)Top
9 楼chabuduo123()回复于 2005-01-25 18:10:42 得分 0
能说的详细一点吗?Top
10 楼lengfeng281(冷风)回复于 2005-01-25 18:48:12 得分 0
可是我用的不是dlg,我用的是SDI,请问如何对SDI得dialogbar重载OnCtlColor
关注Top
11 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 18:50:39 得分 0
子类化listbox,使用ClassWizard 处理反射的WM_CTLCOLOR(=WM_CTLCOLOR)消息
此消息对应函数如上我写的.Top
12 楼chabuduo123()回复于 2005-01-25 18:52:46 得分 0
不好意思,怎样子类化?Top
13 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 18:56:13 得分 0
就是继承啊!使用ClassWizard,new class---输入你的类名,下面选择基类(就是CListBox)
Top
14 楼chabuduo123()回复于 2005-01-25 19:05:47 得分 0
我这样做了,是这样:
HBRUSH CMylist::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
pDC->SetTextColor (RGB(130,0,0));
pDC->SetBkColor (RGB(0,130,0));
return CreateSolidBrush(RGB(0,0,130));
}
我这个函数,怎么多一个CWnd* pWnd参数,而且实现不了预计的功能Top
15 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 19:40:18 得分 0
有两个WM_CTLCOLOR,使用那个有等号的(=WM_CTLCOLOR)Top
16 楼chabuduo123()回复于 2005-01-25 20:14:01 得分 0
我重载了=WM_CTLCOLOR,按照你说的方法还是不行呀?!Top
17 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-25 21:00:39 得分 0
fanqingyufan@163.com
我看看,能解决我会回复你明天,不能的话,只能说对不起了.Top
18 楼chabuduo123()回复于 2005-01-25 21:19:44 得分 0
我重载了=WM_CTLCOLOR
HBRUSH Mylist::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetTextColor (RGB(130,0,0));
* pDC->SetBkColor (RGB(0,130,0));
return CreateSolidBrush(RGB(0,0,130));
}
在*号处设置间断,调试,发现窗口生成时,根本就没有经过这里!Top
19 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-26 08:02:57 得分 0
没受到收到邮件!
可能你根本没使用你的类.
你的控件变量要用Mylist类.而不是CListBox类Top
20 楼poplau(和你聊聊软件开发)回复于 2005-01-26 08:57:08 得分 0
关于控件的风格,最好用自绘的方式重载DrawItem函数Top
21 楼chabuduo123()回复于 2005-01-26 11:33:41 得分 0
我是在cdialogbar上用了两个clistbox,好像无法给他们映射变量?Top
22 楼chabuduo123()回复于 2005-01-26 12:33:58 得分 0
顶,请高手提供方法!Top
23 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-01-26 17:56:11 得分 20
发了Top
24 楼chabuduo123()回复于 2005-01-26 18:05:13 得分 0
谢谢!Top




