请问应该如何改变动态建立的静态控件和编辑控件的背景颜色和字体颜色
请问应该如何改变动态建立的静态控件和编辑控件的背景颜色和字体颜色,谢谢 问题点数:20、回复次数:19Top
1 楼ydfivy(我就是一送外卖的)回复于 2006-03-01 11:57:08 得分 0
在OnCtrlColor消息处理函数中加处理就可以了.Top
2 楼lele1013()回复于 2006-03-01 13:35:32 得分 0
怎么处理?Top
3 楼nuaawenlin(飘人)回复于 2006-03-01 14:07:54 得分 0
if(nCtlXXX == CTLCOLOR_EDIT) ////记不清楚了,查msdn
PDC->SetBkColor()Top
4 楼lele1013()回复于 2006-03-01 15:23:00 得分 0
这种方法不行的,我试过了Top
5 楼lele1013()回复于 2006-03-02 10:56:54 得分 0
大家进来帮帮忙啊Top
6 楼Snow_Ice11111(雪上加冰)回复于 2006-03-02 12:54:08 得分 15
改变CStatic控件的前景、背景色:http://community.csdn.net/Expert/topic/4507/4507710.xml?temp=.1524164
处理WM_CTLCOLOR消息:
---------------------------------------------------------------------
HBRUSH CQQDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
// TODO: Change any attributes of the DC here
if(CTLCOLOR_STATIC == nCtlColor)
//if(CTLCOLOR_STATIC == nCtlColor && pWnd->GetDlgCtrlID()==IDC_TOOL) //改成这样就只对IDC_TOOL这一个静态文本控件起作用了
{
pDC->SetBkColor(RGB(255,255,255)); //背景色为白
pDC->SetTextColor(RGB(0,0,0)); //前景色为黑
hbr = CreateSolidBrush(RGB(255,255,255)); //其它区域也为白
}
else
hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Return a different brush if the default is not desired
return hbr;
}
----------------------------------------------------------------------
再加一个判断if (pWnd->GetDlgCtrlID()==IDC_....)就可以指定是改变哪个的颜色了,其它控件的颜色的改变方法和这个大同小异。Top
7 楼orbit(走了走了)回复于 2006-03-02 13:27:35 得分 0
http://blog.csdn.net/orbit
有个改变对话框和控件颜色的文章Top
8 楼lele1013()回复于 2006-03-03 10:03:35 得分 0
如果我动态建立了19个静态控件,我想使其中的18个改变颜色,还有一个不改变颜色,应该如何做呢Top
9 楼Atomictry(天影)回复于 2006-03-03 10:25:19 得分 5
if(CTLCOLOR_STATIC == nCtlColor)
{
if (pWnd->GetDlgCtrlID() != ID_不想改变颜色的)
{
pDC->SetBkColor(RGB(255,255,255)); //背景色为白
pDC->SetTextColor(RGB(0,0,0)); //前景色为黑
hbr = CreateSolidBrush(RGB(255,255,255)); //其它区域也为
}
}
// 建议,最好还是从一个CStatic类重载.Top
10 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 10:50:34 得分 0
那就在Resouse.h中自己调整这个19个动态创建控件的资源号,让它们连续,并且你不想改的控件资源号放最后,如:1401-1419,然后把上面代码:
if(CTLCOLOR_STATIC == nCtlColor && pWnd->GetDlgCtrlID()==IDC_TOOL)
改成:
if(CTLCOLOR_STATIC == nCtlColor && (pWnd->GetDlgCtrlID()>=1401 && pWnd->GetDlgCtrlID()<=1418))
Top
11 楼lele1013()回复于 2006-03-03 11:39:08 得分 0
如果想同时改变动态建立的静态控件和编辑控件的背景颜色和字体颜色,应该如何做呢Top
12 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 13:57:21 得分 0
看来楼主没有弄清楚Create方法参数的意义,它的最后一个参数表示控件的资源或ID,如:
CStatic::Create(.....,1401); //这种是直接在创建时指定资源号
CStatic::Create(.....,IDC_STATIC1); //这种是通过Resourse.h中自己指定资源号
前面一种方法容易和现有的控件资源号起冲突,故不常用。后面一种方法的话就和界面中事先放置一个控件的情况没什么两样了,不过要先#include "resourse.h"而已。所以,我上面给出的代码对动态创建或事先放置控件都适用。Top
13 楼lele1013()回复于 2006-03-03 15:18:51 得分 0
谢谢,但是我想同时改变两种控件的颜色Top
14 楼Snow_Ice11111(雪上加冰)回复于 2006-03-03 20:03:47 得分 0
那就删去控件类型的判断(即CTLCOLOR_STATIC == nCtlColor ),改成这样:
if(pWnd->GetDlgCtrlID()>=1401 && pWnd->GetDlgCtrlID()<=1418)
{
......
}
这样系统改的时候只按资源号处理,不管它什么控件类型了,只要你的控件的资源号在这个范围内即行。Top
15 楼lele1013()回复于 2006-03-06 08:57:50 得分 0
谢谢,但是我想两种控件改变的背景和字体颜色不同,应该怎样改变呢Top
16 楼Snow_Ice11111(雪上加冰)回复于 2006-03-06 12:56:27 得分 0
HBRUSH CQQDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
// TODO: Change any attributes of the DC here
if(CTLCOLOR_STATIC == nCtlColor && (pWnd->GetDlgCtrlID()>=1401 && pWnd->GetDlgCtrlID()<=1418))
{
pDC->SetBkColor(RGB(255,255,255)); //背景色为白
pDC->SetTextColor(RGB(0,0,0)); //前景色为黑
hbr = CreateSolidBrush(RGB(255,255,255)); //其它区域也为白
}
if(CTLCOLOR_EDIT == nCtlColor && (pWnd->GetDlgCtrlID()>=1420 && pWnd->GetDlgCtrlID()<=1425))
{
pDC->SetBkColor(RGB(255,0,0)); //背景色为红
pDC->SetTextColor(RGB(0,255,0)); //前景色为绿
hbr = CreateSolidBrush(RGB(255,0,0)); //其它区域也为红
}
hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Return a different brush if the default is not desired
return hbr;
}
Top
17 楼Snow_Ice11111(雪上加冰)回复于 2006-03-06 13:02:51 得分 0
少了两行,补:
HBRUSH CQQDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
// TODO: Change any attributes of the DC here
if(CTLCOLOR_STATIC == nCtlColor && (pWnd->GetDlgCtrlID()>=1401 && pWnd->GetDlgCtrlID()<=1418)) //静态文本控件且资源号在1401到1418之间的话
{
pDC->SetBkColor(RGB(255,255,255)); //背景色为白
pDC->SetTextColor(RGB(0,0,0)); //前景色为黑
hbr = CreateSolidBrush(RGB(255,255,255)); //其它区域也为白
return hbr;
}
if(CTLCOLOR_EDIT == nCtlColor && (pWnd->GetDlgCtrlID()>=1420 && pWnd->GetDlgCtrlID()<=1425)) //编辑框控件且资源号在1420到1425之间的话
{
pDC->SetBkColor(RGB(255,0,0)); //背景色为红
pDC->SetTextColor(RGB(0,255,0)); //前景色为绿
hbr = CreateSolidBrush(RGB(255,0,0)); //其它区域也为红
return hbr;
}
hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Return a different brush if the default is not desired
return hbr;
}Top
18 楼wjj888888(不赖)回复于 2006-03-06 14:29:50 得分 0
................................Top
19 楼lele1013()回复于 2006-03-06 16:30:59 得分 0
谢谢大家的帮忙Top




