我想把其中的一个CheckBox的背景色改成白色的
我试着从CButton派生一个新的CMyCheckBox,然后 SetBkColor(...)
却发现,那个小方框也变成白色的了,
请问有什么好的方法,只让文字那一部分背景是白色的
11 个解决方案
#1
#2
重载窗口的 OnCtlColor 函数, 其中添加下面的 code:
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
// 如果想设置字的颜色, 则可用 pDC->SetTextColor(. ..);
pDC->SetBkColor(RGB(255, 255, 255));
break;
default:
break;
}
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
// 如果想设置字的颜色, 则可用 pDC->SetTextColor(. ..);
pDC->SetBkColor(RGB(255, 255, 255));
break;
default:
break;
}
#3
你可以设置背景颜色后,再对控件进行响应,把控件设置成以前的默认颜色.具体看一下下面的代码,看能不能有用
有两种方法。其一,可以在父类中指定控件的颜色,或者利用MFC新的消息反射在控件类中指定颜色。 当控件需要重新着色时,工作框调用父窗口(通常是对话框)的CWnd: : OnCrtlColor,可以在父窗口类中重置该函数并指定控件的新的绘画属性。例如,下述代码将对话中的所有编辑控件文本颜色改为红色:
HBRUSH CAboutDig : : OnCtlColor (CDC * pDCM , CWnd * pWnd , UINT nCtlColor)
{
HBRUSH hbr = CDialog : : OnCtlColor (pDC, pWnd , nCtlColor )
//Draw red text for all edit controls .
if (nCtlColor= = CTLCOLOR_EDIT )
pDC —> SetTextColor (RGB (255, 0 , 0 , ) )
return hbr
}
然而,由于每个父窗口必须处理通知消息并指定每个控件的绘画属性,所以,这种方法不是完全的面向对象的方法。控件处理该消息并指定绘画属性更合情合理。消息反射允许用户这样做。通知消息首先发送给父窗口,如果父窗口没有处理则发送给控件。创建一个定制彩色列表框控件必须遵循下述步骤。
首先,使用ClassWizard 创建一个CListBox 的派生类并为该类添加下述数据成员。
class CMyListBox publilc CListBox
{
…
private
COLORREF m_clrFor // foreground color
COLORREF m_clrBack //background color
Cbrush m_brush //background brush
…
}
其次,在类的构造函数中,初始化数据中。
CMyListBox : : CMyListBox ()
{
//Initialize data members .
m_clrFore =RGB (255 , 255 , 0) //yellow text
m_clrBack=RGB (0 , 0 , 255) // blue background
m_brush . CreateSolidBrush (m _clrBack )
}
最后,使用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 ()
}
现在,控件可以自己决定如何绘画,与父窗口无关。
#4
控件的颜色,我知道怎么改变,问题是:
dialog是白色的,checkbox也是白色的,这样就导致,checkbox的那个小方框看不见了;(
我不太清楚楼上的两位是否是这个意思,我在网吧没有vc测试
等回公司,再测试一下。
多谢了:)
dialog是白色的,checkbox也是白色的,这样就导致,checkbox的那个小方框看不见了;(
我不太清楚楼上的两位是否是这个意思,我在网吧没有vc测试
等回公司,再测试一下。
多谢了:)
#5
就是说把CheckBox的背景色设为你窗口的背景色(这里就是与你的CHECKBOX所在图片的位置的颜色一致,或者pDC->SetBkMode(TRANSPARENT)设置为透明),然后设置CHECKBOX上文字的颜色就行
#6
恩,我回去test一下 thx:)
#7
楼上说的, 我都测试过了, 和我以前的做法是一样的
pDC->SetBkMode(TRANSPARENT), 的确可以把背景改透明了,
问题是, CheckBox右边的小框框 也透明了, 除非用鼠标去点击它, 它才会出现
否则就是透明的 :(
pDC->SetBkMode(TRANSPARENT), 的确可以把背景改透明了,
问题是, CheckBox右边的小框框 也透明了, 除非用鼠标去点击它, 它才会出现
否则就是透明的 :(
#8
up
#9
弄个Caption为空字符串的Check Box,再在旁边放个Static。Static的颜色啊什么都好对付多了,就是全部自绘也没什么大不了的。
#10
楼上好办法,学习
#11
to Snow_ice
空字符串的CHeckBox, 会有很小的一点空白, 我之前就测试过
我现在还没有找到办法, 我已经打算把 CheckBox 用 Button来代替了, 右边的那个小框框用图片
来代替..
呵呵
空字符串的CHeckBox, 会有很小的一点空白, 我之前就测试过
我现在还没有找到办法, 我已经打算把 CheckBox 用 Button来代替了, 右边的那个小框框用图片
来代替..
呵呵
#1
#2
重载窗口的 OnCtlColor 函数, 其中添加下面的 code:
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
// 如果想设置字的颜色, 则可用 pDC->SetTextColor(. ..);
pDC->SetBkColor(RGB(255, 255, 255));
break;
default:
break;
}
switch (nCtlColor)
{
case CTLCOLOR_STATIC:
// 如果想设置字的颜色, 则可用 pDC->SetTextColor(. ..);
pDC->SetBkColor(RGB(255, 255, 255));
break;
default:
break;
}
#3
你可以设置背景颜色后,再对控件进行响应,把控件设置成以前的默认颜色.具体看一下下面的代码,看能不能有用
有两种方法。其一,可以在父类中指定控件的颜色,或者利用MFC新的消息反射在控件类中指定颜色。 当控件需要重新着色时,工作框调用父窗口(通常是对话框)的CWnd: : OnCrtlColor,可以在父窗口类中重置该函数并指定控件的新的绘画属性。例如,下述代码将对话中的所有编辑控件文本颜色改为红色:
HBRUSH CAboutDig : : OnCtlColor (CDC * pDCM , CWnd * pWnd , UINT nCtlColor)
{
HBRUSH hbr = CDialog : : OnCtlColor (pDC, pWnd , nCtlColor )
//Draw red text for all edit controls .
if (nCtlColor= = CTLCOLOR_EDIT )
pDC —> SetTextColor (RGB (255, 0 , 0 , ) )
return hbr
}
然而,由于每个父窗口必须处理通知消息并指定每个控件的绘画属性,所以,这种方法不是完全的面向对象的方法。控件处理该消息并指定绘画属性更合情合理。消息反射允许用户这样做。通知消息首先发送给父窗口,如果父窗口没有处理则发送给控件。创建一个定制彩色列表框控件必须遵循下述步骤。
首先,使用ClassWizard 创建一个CListBox 的派生类并为该类添加下述数据成员。
class CMyListBox publilc CListBox
{
…
private
COLORREF m_clrFor // foreground color
COLORREF m_clrBack //background color
Cbrush m_brush //background brush
…
}
其次,在类的构造函数中,初始化数据中。
CMyListBox : : CMyListBox ()
{
//Initialize data members .
m_clrFore =RGB (255 , 255 , 0) //yellow text
m_clrBack=RGB (0 , 0 , 255) // blue background
m_brush . CreateSolidBrush (m _clrBack )
}
最后,使用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 ()
}
现在,控件可以自己决定如何绘画,与父窗口无关。
#4
控件的颜色,我知道怎么改变,问题是:
dialog是白色的,checkbox也是白色的,这样就导致,checkbox的那个小方框看不见了;(
我不太清楚楼上的两位是否是这个意思,我在网吧没有vc测试
等回公司,再测试一下。
多谢了:)
dialog是白色的,checkbox也是白色的,这样就导致,checkbox的那个小方框看不见了;(
我不太清楚楼上的两位是否是这个意思,我在网吧没有vc测试
等回公司,再测试一下。
多谢了:)
#5
就是说把CheckBox的背景色设为你窗口的背景色(这里就是与你的CHECKBOX所在图片的位置的颜色一致,或者pDC->SetBkMode(TRANSPARENT)设置为透明),然后设置CHECKBOX上文字的颜色就行
#6
恩,我回去test一下 thx:)
#7
楼上说的, 我都测试过了, 和我以前的做法是一样的
pDC->SetBkMode(TRANSPARENT), 的确可以把背景改透明了,
问题是, CheckBox右边的小框框 也透明了, 除非用鼠标去点击它, 它才会出现
否则就是透明的 :(
pDC->SetBkMode(TRANSPARENT), 的确可以把背景改透明了,
问题是, CheckBox右边的小框框 也透明了, 除非用鼠标去点击它, 它才会出现
否则就是透明的 :(
#8
up
#9
弄个Caption为空字符串的Check Box,再在旁边放个Static。Static的颜色啊什么都好对付多了,就是全部自绘也没什么大不了的。
#10
楼上好办法,学习
#11
to Snow_ice
空字符串的CHeckBox, 会有很小的一点空白, 我之前就测试过
我现在还没有找到办法, 我已经打算把 CheckBox 用 Button来代替了, 右边的那个小框框用图片
来代替..
呵呵
空字符串的CHeckBox, 会有很小的一点空白, 我之前就测试过
我现在还没有找到办法, 我已经打算把 CheckBox 用 Button来代替了, 右边的那个小框框用图片
来代替..
呵呵