如何改变对话框及其控件的颜色!(3个小疑点,前两个各20分,最后10分)
怎么改变对话框及其控件的颜色!!!!!!!(3个小问题,前两个各20分,最后10分)
(1)
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)和
CtlColor(CDC* pDC, UINT nCtlColor) 有什么区别?情举例说下
CtlColor函数怎么生成?我在消息相应列表里怎么找不到它??
(2),我现在是这样:
HBRUSH COpenCom::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC-> SetBkColor(RGB(232,240,232));
return m_brush;
}
else if(nCtlColor == CTLCOLOR_DLG)
{
pDC-> SetBkColor(RGB(232,240,232));
return m_brush;
}
// return (HBRUSH)m_brush.GetSafeHandle();
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
我不知道到底是
pDC-> SetBkColor(RGB(232,240,232));起作用还是
return m_brush; 起作用,有啥区别??
(3),我看有的例子上有这么一句:
pDC-> SetBkMode(TRANSPARENT);
这一句什么意思?什么作用???
------解决方案--------------------
(3),我看有的例子上有这么一句:
pDC-> SetBkMode(TRANSPARENT);
这一句什么意思?什么作用???
这个你可以试试就知道了
比如如果不设置,那么你先后写两段文字(互相有重叠),那么后写的文字会把前面的文字遮盖掉一部分,设置之后就不会遮盖了
------解决方案--------------------
(2)都起作用.
pDC-> SetBkColor(RGB(232,240,232));
设置控件的背景颜色
return m_brush;
返回改变前的画刷.系统需要此画刷.
------解决方案--------------------
pDC-> SetBkMode(TRANSPARENT);
设置透明效果,设置这个时,你所用的控件属性里也要选择 transparent
------解决方案--------------------
参考下下面这段代码吧,之前我用过的:
................................................................
HBRUSH CVdserverDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_LISTBOX)
{
//pDC-> SetBkMode(TRANSPARENT);
pDC-> SetTextColor(RGB(0,0,0));
pDC-> SetBkColor(RGB(233,233,220));
HBRUSH b=CreateSolidBrush(RGB(233,233,220));
return b;
}
else if(nCtlColor==CTLCOLOR_SCROLLBAR)
{
pDC-> SetTextColor(RGB(0,0,0));
HBRUSH b=CreateSolidBrush(RGB(200,210,225));
return b;
}
else if(nCtlColor==CTLCOLOR_EDIT)
{
pDC-> SetTextColor(RGB(0,0,0));
HBRUSH b=CreateSolidBrush(RGB(200,210,225));
return b;
}
else if(nCtlColor==CTLCOLOR_STATIC)
{
pDC-> SetBkMode(TRANSPARENT);
pDC-> SetTextColor(RGB(0,0,0));
HBRUSH b=CreateSolidBrush(RGB(200,210,225));
return b;
}
else if(nCtlColor==CTLCOLOR_DLG)
{
pDC-> SetTextColor(RGB(0,0,0));
HBRUSH b=CreateSolidBrush(RGB(200,210,225));
return b;
}
return hbr;
}
(1)
OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)和
CtlColor(CDC* pDC, UINT nCtlColor) 有什么区别?情举例说下
CtlColor函数怎么生成?我在消息相应列表里怎么找不到它??
(2),我现在是这样:
HBRUSH COpenCom::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: 在此更改 DC 的任何属性
if(nCtlColor == CTLCOLOR_STATIC)
{
pDC-> SetBkColor(RGB(232,240,232));
return m_brush;
}
else if(nCtlColor == CTLCOLOR_DLG)
{
pDC-> SetBkColor(RGB(232,240,232));
return m_brush;
}
// return (HBRUSH)m_brush.GetSafeHandle();
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
return hbr;
}
我不知道到底是
pDC-> SetBkColor(RGB(232,240,232));起作用还是
return m_brush; 起作用,有啥区别??
(3),我看有的例子上有这么一句:
pDC-> SetBkMode(TRANSPARENT);
这一句什么意思?什么作用???
------解决方案--------------------
(3),我看有的例子上有这么一句:
pDC-> SetBkMode(TRANSPARENT);
这一句什么意思?什么作用???
这个你可以试试就知道了
比如如果不设置,那么你先后写两段文字(互相有重叠),那么后写的文字会把前面的文字遮盖掉一部分,设置之后就不会遮盖了
------解决方案--------------------
(2)都起作用.
pDC-> SetBkColor(RGB(232,240,232));
设置控件的背景颜色
return m_brush;
返回改变前的画刷.系统需要此画刷.
------解决方案--------------------
pDC-> SetBkMode(TRANSPARENT);
设置透明效果,设置这个时,你所用的控件属性里也要选择 transparent
------解决方案--------------------
参考下下面这段代码吧,之前我用过的:
................................................................
HBRUSH CVdserverDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_LISTBOX)
{
//pDC-> SetBkMode(TRANSPARENT);
pDC-> SetTextColor(RGB(0,0,0));
pDC-> SetBkColor(RGB(233,233,220));
HBRUSH b=CreateSolidBrush(RGB(233,233,220));
return b;
}
else if(nCtlColor==CTLCOLOR_SCROLLBAR)
{
pDC-> SetTextColor(RGB(0,0,0));
HBRUSH b=CreateSolidBrush(RGB(200,210,225));
return b;
}
else if(nCtlColor==CTLCOLOR_EDIT)
{
pDC-> SetTextColor(RGB(0,0,0));
HBRUSH b=CreateSolidBrush(RGB(200,210,225));
return b;
}
else if(nCtlColor==CTLCOLOR_STATIC)
{
pDC-> SetBkMode(TRANSPARENT);
pDC-> SetTextColor(RGB(0,0,0));
HBRUSH b=CreateSolidBrush(RGB(200,210,225));
return b;
}
else if(nCtlColor==CTLCOLOR_DLG)
{
pDC-> SetTextColor(RGB(0,0,0));
HBRUSH b=CreateSolidBrush(RGB(200,210,225));
return b;
}
return hbr;
}