您的位置:首页 > 理论基础 > 数据结构算法

关于设置Dialog背景颜色及其控件颜色中涉及的知识点

2012-07-25 10:30 302 查看
   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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息