visual c++中CColorDialog对话框的制作             
CColorDialog对话框
CColorDialog是一个比较常用的对话框,它的功能是返回一种用户选择的颜色。CColorDialog对话框界面如图1所示。

图1 CcolorDialo g对话框
CColorDialog类中常用的成员函数如表1所示。

表1                   CColorDialog类中常用的成员函数
函  数  名
 说    明
GetColor
 返回用户在对话框中选择颜色
GetSavedCustomColors
 返回用户自定义的颜色
CColorDialog提供了GetColor成员函数,它可以返回用户在对话框中选择颜色。
请看下面的例子,制作一个可以显示用户选择颜色的类。

图2中界面上有很8个小格,每个小格填充了一种颜色,当用户单击某小格时,就会弹出如图1所示的CColorDialog对话框。用户在CColorDialog对话框中选择一种颜色,单击“确定”按钮,界面中的小格便显示出所选颜色。
图2  CColorDialog类的使用
根据对功能的分析,抽象出类的原型:
                         class CColorButton : public CButton
            {
            public:
            CColorButton(COLORREF color=RGB(255,255,255));
            virtual ~CColorButton();
            private:
            COLORREF m_Color;
            //http://www.isstudy.com
            };
                        CColorButton类继承CButton的特征,构造函数CColorButton为面板(小格)默认设置了一种颜色。成员变量m_Color记录当前面板(小格)的颜色。
当用户单击面板(小格)区域时,激活CColorDialog类对象。这需要添加消息响应函数。由于前面已经介绍过如何添加消息响应函数,这里不再重复。
在消息响应函数中添加如下代码:
                         void CColorButton::OnClicked()
            {
            CColorDialog ColorDlg;
            ColorDlg.DoModal();     //显示颜色选择框
            COLORREF thisColor=ColorDlg.GetColor();    //获取选择的颜色
            if(thisColor==NULL)     //判断是否为空
            //http://www.isstudy.com
            return;
            m_Color=thisColor;     //记录新颜色
            this->Invalidate(true);
            }            重载虚函数DrawItem,重新绘制类的外观。
                         void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
            {
            CRect rect,Clrect;
            rect=lpDrawItemStruct->rcItem;
            CDC* pDC=::CDC::FromHandle(lpDrawItemStruct->hDC);
            CBrush brush;
            //http://www.isstudy.com
            brush.CreateSolidBrush(m_Color);    //将用户选中颜色载入笔刷
            Clrect.SetRect(rect.left+2,rect.top+2,rect.right-2,rect.bottom-2);
            //绘制3D边框
            pDC->Draw3dRect(&rect,GetSysColor(COLOR_3DSHADOW),GetSysColor(COLOR_3DHILIGHT));
            pDC->FillRect(&Clrect,&brush);    //填充所选颜色
            brush.DeleteObject();
            }            向对话框资源中添加8个CColorButton类对象,注意,需要将Owner draw设置为True。按Ctrl+F5运行程序即可。