Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)qqpublished in(发表于) 2014/7/9 22:38:46 visual c++中CColorDialog对话框的制作
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.comreturn;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.combrush.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运行程序即可。
赞