1.函数OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
函数的命名:Ctl为Control的缩写,虽然一般Control的缩写为Ctr,但这里确实是Ctl,函数名意为响应控件颜色消息。
CDC类:Windows使用与设备无关的图形设备环境(DC :Device Context) 进行显示 。MFC基础类库定义了设备环境对象类----CDC类。
pDC由控件的父级提供,控件父级一般就是Dialog,除了combo box的drop-down list box,因为drop-down list box的父级是combo box,所以Dialog的OnCtlColor不会响应drop-down list box的消息。要想改变drop-down list box of combo box的颜色,则需要为combo box创建一个类,在类中重载消息函数OnCtlColor,check nCtlColor的参数CTLCOLOR_LISTBOX来实现。
pWnd:控件的句柄
nCtlColor:每种类型的控件有其对应的nCtlColor值
因为该函数中提供了控件的pWnd(句柄),则可以调用pWnd->GetDlgCtrID()来获取控件的ID,通过判断,可以实现对某个ID的控件进行Check,来改变它的颜色。
更多的应用是,来Check不同控件类型的nCtlColor值,来改变控件颜色。
-
CTLCOLOR_BTN Button control
-
CTLCOLOR_DLG Dialog box
-
CTLCOLOR_EDIT Edit control
-
CTLCOLOR_LISTBOX List-box control
-
CTLCOLOR_MSGBOX Message box
-
CTLCOLOR_SCROLLBAR Scroll-bar control
-
CTLCOLOR_STATIC Static control
2.HDC,DC,CDC
DC: Device Context,中文也叫设备上下文,是一种包含有关某个设备(如显示器或打印机)的绘制属性信息的 Windows 数据结构。
CDC: MFC中封装了操作系统窗口输出底层API的封装类,如CDC的派生类CClientDC,用于窗口客户区域的输出。
HDC: VC++开发环境中的DC句柄类型,32比特的无符号整数类型,用来标识DC设备的句柄。
设备上下文:即DC。
3.RGB,ColorREF
RGB(r,g,b)是一个宏
实际上它做得事是((COLORREF)(((BYTE)(r)|((WORD)((BYTE)(g))<<8))|(((DWORD)(BYTE)(b))<<16)))
rgb(r,g,b) = 一个整型值 = r + g * 256 + b*255*256 (r + g * 256 +
b*256*256)
COLORREF 是 一 个 32-bit 整 型 数 值,它 代 表 了 一 种 颜 色。你 可以 使 用 RGB 函 数 来 初 始 化 COLORREF
它的定义
typedef DWORD COLORREF;
COLORREF变量有两种赋值方法
●第一种
COLORREF cf = RGB(,,);
●第二种
CColorDialog colorDialog;
COLORREF color;
if( colorDialog.DoModal() == IDOK )
{
color = colorDialog.GetColor();
}
这 段 代 码 使 用 了 MFC 中 的 颜 色 对 话 框
如何从 COLORREF中取出RGB分量值?
可以使用宏GetRValue
GetGValue
GetBValue
他们的定义如下
#define GetRValue(rgb) ((BYTE)(rgb))
#define GetGValue(rgb) ((BYTE)(((WORD)(rgb)) >> 8))
#define GetBValue(rgb) ((BYTE)((rgb)>>16))
|
4.GetStockObject()
例如:(HBRUSH)::GetStockObject(BLACK_BRUSH); // 设置背景色
预定义的样式:
BLACK_BRUSH:黑色
WHITE_BRUSH:白色
GRAY_BRUSH:灰色
NULL_BRUSH:透明
HOLLOW_BRUSH :透明
参考:
【1】http://baike.baidu.com/view/1923644.htm
【2】http://zhidao.baidu.com/question/201429108
【3】http://hi.baidu.com/peishenglu/blog/item/e5d5df58d5a4ae272934f0fc.html
【4】http://hi.baidu.com/songwentao/item/2175de0d1b250bc22e4c6be8