mfc中设置控件颜色

 
  

转自:http://hi.baidu.com/sicceer/item/f17eca08d72d88f1a1103467

CtlColor消息的用法 

很多人都觉得自己的程序的界面不那么美观,往往VC默认产生的对话框比较单调,因此很多人往往找到很多其它的控件对对话框进行美化修饰,例如给静态控件设置字体,设置背景颜色等等,其实这些完全可以由VC自己的WM_CTLCOLOR消息来完成!

 WM_CTLCOLOR 消息,使你可以告诉Windows在画各种控件的背景时用什么刷子。在Windows要画控件的时候,它发送WM_CTLCOLOR给控件的父窗口。这是你改变控件背景的好机会。

WM_CTLCOLOR消息用来完成对EDIT、STATIC、BUTTON等控件设置背景和字体颜色,其用法如下:

1.首先在自己需要设置界面的对话框上点击右键-->在右侧属性栏中加入WM_CTLCOLOR消息-->自动生成OnCtlColor()函数,此函数可以对本对话框的控件的界面外观做修饰,用法如下: 将类向导产生的函数做如下修改:

 HBRUSH CDialogColor::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC,pWnd, nCtlColor);// TODO: Change any attributes of theDC here //设置显示字体 CFont * cFont=new CFont; cFont->CreateFont(16,0,0,0,FW_SEMIBOLD,FALSE,FALSE,0, ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH&FF_SWISS,"Arial"); //对特定的控件做修改 switch(nCtlColor){ case CTLCOLOR_STATIC: //对所有静态文本控件的设置 {pDC->SetBkMode(TRANSPARENT); //设置背景为透明 pDC->SetTextColor(RGB(255,255,0)); //设置字体颜色 pWnd->SetFont(cFont); //设置字体 HBRUSH B = CreateSolidBrush(RGB(125,125,255)); //创建画刷 return (HBRUSH) B; //返回画刷句柄 } case CTLCOLOR_EDIT: //对所有编辑框的设置 {pDC->SetBkMode(TRANSPARENT);  pDC->SetTextColor(RGB(255,255,0));  pWnd->SetFont(cFont);   HBRUSH B = CreateSolidBrush(RGB(125,125,255));   return (HBRUSH) B;  } default:return CDialog::OnCtlColor(pDC,pWnd, nCtlColor);}} 注:case的类别有以下几种: CTLCOLOR_BTN 按钮控件 CTLCOLOR_DLG 对话框 CTLCOLOR_EDIT 编辑框 CTLCOLOR_LISTBOX 列表框 CTLCOLOR_MSGBOX 消息框 CTLCOLOR_SCROLLBAR 滚动条 CTLCOLOR_STATIC 静态文本

2.你可能觉得对所有的控件使用统一的界面设置觉得不自由,其实VC同样可以对特定的ID的控件进行设置,方法如下:  switch (pWnd->GetDlgCtrlID()) { //针对ID为IDC_CTL1、IDC_CTL2和IDC_CTL3的控件进行同样的设置 case IDC_CTL1: case IDC_CTL2: case IDC_CTL3:  {pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(255,255, 0)); pWnd->SetFont(cFont); HBRUSH B = CreateSolidBrush(RGB(125,125,255)); return (HBRUSH) B; } default: return CDialog::OnCtlColor(pDC, pWnd, nCtlColor); }   通过消息WM_CTLCOLOR我们可以改变对话框或一些特殊控件的背景颜色 1、添加WM_CTLCOLOR消息映射。 2、在CWnd::OnCtlColor里面作相应的处理 HRESULT CWnd::OnCtlColor(CDC *pDC, CWnd *pWnd, UINT nCtlColor){      switch (nCtlColor)     {   case CTLCOLOR_BTN:                 // Button control           {             pDC->SetBkColor( RGB( 255, 0, 0) );         }         break;          case CTLCOLOR_DLG:                 // Dialog box          break;            case CTLCOLOR_EDIT:                 // Edit control          {             COLORREF bkColor = RGB(255,0,0);               CRect rect;               pWnd->GetClientRect(&rect);   CBrush br;               br.CreateSolidBrush(bkColor);               pDC->FillRect(rect, &br);               pDC->SetBkColor(bkColor);                   break;    case CTLCOLOR_LISTBOX:         // List-box control          break;   case CTLCOLOR_MSGBOX:         // Message box             break;        case CTLCOLOR_SCROLLBAR:   // Scroll-bar control          break;       case CTLCOLOR_STATIC:             // Static control           break;        default:         break;     }         return CWnd::OnCtlColor(pDC, pWnd, nCtlColor);}

 

------------------------------------------------------------------------------------------------------------------------

OnCtlColor函数来改变控件颜色

在MFC类库提供了 CWnd::OnCtlColor 函数,在工作框架的子窗口被重画时将调用该成员函数.因此可以重载 WM_CTLCOLOR 消息的响应函数.此函数的原型:

  afx_msg HBRUSH OnCtlColor(CDC *pDC,CWnd *pWnd,UINT nCtlColor);            参数nCtlColor用于指定控件的类型,可以是:            .CTLCOLOR_BTN                按钮控件            .CTLCOLOR_DLG                对话框            .CTLCOLOR_EDIT               编辑框            .CTLCOLOR_LISTBOX            列表控件            .CTLCOLOR_MSGBOX             消息控件            .CTLCOLOR_SCROLLBAR 滚动条控件            .CTLCOLOR_STATIC             静态控件 [程序实现]            假设你已有了名为My的对话框工程.你有了一个STATIC的控件,ID为IDC_STATIC1.   HBRUSH CMyDlg::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_STATIC)

              {                     pDC->SetTextColor(RGB(255,0,0));  //字体颜色                     pDC->SetBkColor(RGB(0, 0, 255));   //字体背景色  

                }         // TODO: Return a different brush if the default is not desired         return hbr;            }

如果要指定某个特定控件可以这样写:ID为IDC_STATIC1

if (pWnd->GetDlgCtrlID()==IDC_STATIC1) {        pDC->SetTextColor(RGB(255,0,0));  //设置字体颜色        pDC->SetBkMode(TRANSPARENT); //设置字体背景为透明 // TODO: Return a different brush if the default is not desired   return (HBRUSH)::GetStockObject(BLACK_BRUSH);  // 设置背景色 } else return hbr;

【注】

BLACK_BRUSH:黑色

WHITE_BRUSH:白色

GRAY_BRUSH:灰色

NULL_BRUSH:透明

HOLLOW_BRUSH :透明

附:常用色值

R
G
B
R
G
B
R
G
B
黑色
0
0
0
#000000
黄色
255
255
0
#FFFF00
浅灰蓝色
176
224
230
#B0E0E6
象牙黑
41
36
33
#292421
香蕉色
227
207
87
#E3CF57
品蓝
65
105
225
#4169E1
灰色
192
192
192
#C0C0C0
镉黄
255
153
18
#FF9912
石板蓝
106
90
205
#6A5ACD
冷灰
128
138
135
#808A87
dougello
235
142
85
#EB8E55
天蓝
135
206
235
#87CEEB
石板灰
112
128
105
#708069
forum gold
255
227
132
#FFE384
暖灰色
128
128
105
#808069
金黄色
255
215
0
#FFD700
青色
0
255
255
#00FFFF
黄花色
218
165
105
#DAA569
绿土
56
94
15
#385E0F
白色
255
255
255
#FFFFFF
瓜色
227
168
105
#E3A869
靛青
8
46
84
#082E54
古董白
250
235
215
#FAEBD7
橙色
255
97
0
#FF6100
碧绿色
127
255
212
#7FFFD4
天蓝色
240
255
255
#F0FFFF
镉橙
255
97
3
#FF6103
青绿色
64
224
208
#40E0D0
白烟
245
245
245
#F5F5F5
胡萝卜色
237
145
33
#ED9121
绿色
0
255
0
#00FF00
白杏仁
255
235
205
#FFFFCD
桔黄
255
128
0
#FF8000
黄绿色
127
255
0
#7FFF00
cornsilk
255
248
220
#FFF8DC
淡黄色
245
222
179
#F5DEB3
钴绿色
61
145
64
#3D9140
蛋壳色
252
230
201
#FCE6C9
翠绿色
0
201
87
#00C957
花白
255
250
240
#FFFAF0
棕色
128
42
42
#802A2A
森林绿
34
139
34
#228B22
gainsboro
220
220
220
#DCDCDC
米色
163
148
128
#A39480
草地绿
124
252
0
#7CFC00
ghostWhite
248
248
255
#F8F8FF
锻浓黄土色
138
54
15
#8A360F
酸橙绿
50
205
50
#32CD32
蜜露橙
240
255
240
#F0FFF0
锻棕土色
135
51
36
#873324
薄荷色
189
252
201
#BDFCC9
象牙白
250
255
240
#FAFFF0
巧克力色
210
105
30
#D2691E
草绿色
107
142
35
#6B8E23
亚麻色
250
240
230
#FAF0E6
肉色
255
125
64
#FF7D40
暗绿色
48
128
20
#308014
navajoWhite
255
222
173
#FFDEAD
黄褐色
240
230
140
#F0E68C
海绿色
46
139
87
#2E8B57
old lace
253
245
230
#FDF5E6
玫瑰红
188
143
143
#BC8F8F
嫩绿色
0
255
127
#00FF7F
海贝壳色
255
245
238
#FFF5EE
肖贡土色
199
97
20
#C76114
雪白
255
250
250
#FFFAFA
标土棕
115
74
18
#734A12
紫色
160
32
240
#A020F0
乌贼墨棕
94
38
18
#5E2612
紫罗蓝色
138
43
226
#8A2BE2
红色
255
0
0
#FF0000
赫色
160
82
45
#A0522D
jasoa
160
102
211
#A066D3
砖红
156
102
31
#9C661F
马棕色
139
69
19
#8B4513
湖紫色
153
51
250
#9933FA
镉红
227
23
13
#E3170D
沙棕色
244
164
96
#F4A460
淡紫色
218
112
214
#DA70D6
珊瑚色
255
127
80
#FF7F50
棕褐色
210
180
140
#D2B48C
梅红色
221
160
221
#DDA0DD
耐火砖红
178
34
34
#B22222
印度红
176
23
31
#B0171F
蓝色
0
0
255
#0000FF
栗色
176
48
96
#B03060
钴色
61
89
171
#3D59AB
粉红
255
192
203
#FFC0CB
dodger blue
30
144
255
#1E90FF
草莓色
135
38
87
#872657
jackie blue
11
23
70
#0B1746
橙红色
250
128
114
#FA8072
锰蓝
3
168
158
#03A89E
蕃茄红
255
99
71
#FF6347
深蓝色
25
25
112
#191970
桔红
255
69
0
#FF4500
孔雀蓝
51
161
201
#33A1C9
深红色
255
0
255
#FF00FF
土耳其玉色
0
199
140
#00C78C

你可能感兴趣的:(wince)