zoukankan      html  css  js  c++  java
  • MFC编程入门之十九(对话框:颜色对话框)

      在上一节中为大家讲解了字体对话框的使用方法,熟悉了字体对话框,本节继续讲另一种通用对话框——颜色对话框。

      颜色对话框大家肯定也不陌生,我们可以打开它选择需要的颜色,简单说,它的作用是用来选择颜色。MFC中提供了CColorDialog类封装了颜色对话框的所有操作,我们可以通过它显示颜色对话框,并获取颜色对话框中选择的颜色。颜色对话框跟字体对话框一样,也是一种模态对话框。

      CColorDialog类的构造函数

      CColorDialog(

        COLORREF clrInit = 0,

        DWORD dwFlags = 0,

        CWnd* pParentWnd = NULL

      );

      参数说明:

      clrInit:默认选择颜色的颜色值,类型为COLORREF,实际上就是unsigned long类型。如果没有设置它的值,则默认值为RGB(0,0,0),即黑色。

      注:RGB(r, g, b)是宏,可以计算颜色值。括号中的三个值分别为红、绿、蓝分量的值。

      dwFlags:自定义颜色对话框功能和外观的属性值。详情可以在MSDN中查阅。

      pParentWnd:颜色对话框的父窗口的指针。

      获取颜色对话框中所选颜色值

      我们使用颜色对话框的最终目的还是要获得在颜色对话框中选择的颜色值。为此CColorDialog类的成员函数GetColor()能够很好的实现我们的要求。GetColor()函数的原型为:

      COLORREF GetColor() const;

      它返回所选颜色的COLORREF值。

      如果我们想获得R、G、B各分量的值呢?可以根据GetColor得到的COLORREF颜色值,通过使用GetRValue、GetGValue和GetBValue三个宏获得。GetRValue的语法形式为:

      BYTE GetRValue(DWORD rgb);

      参数rgb就是COLORREF颜色值,返回值即R分量值。其他两个宏的形式与之类似。例如,GetColor()函数返回的COLORREF为10000,则R分量值就是GetRValue(10000)。

      颜色对话框应用实例

      下面给大家做一个颜色对话框的小例子。此例要实现的功能简单介绍下:生成一个对话框,对话框中放置一个“颜色选择”按钮,四个静态文本框和四个编辑框。四个静态文本框分别显示Color:、R:、G:、B:,每个静态文本框后面跟一个编辑框,分别用来显示颜色对话框中选择的颜色值和所选颜色值的红色分量、绿色分量和蓝色分量。

      以下是实例创建的步骤:

      1、创建一个基于对话框的MFC工程,名字为“Example19”。

      2、在自动生成的主对话框IDD_EXAMPLE19_DIALOG的模板中,删除“TODO:Place dialog controls here.”静态文本框,添加一个按钮,ID设置为IDC_COLOR_BUTTON,Caption设置为“颜色选择”,用于显示颜色对话框来选择颜色。再添加四个静态文本框,ID分别为IDC_COLOR_STATIC、IDC_R_STATIC、IDC_G_STATIC和IDC_B_STATIC,Caption分别设为"Color:"、"R:"、"G:"和"B:",然后每个静态文本框后添加一个编辑框,四个编辑框的ID分别为IDC_COLOR_EDIT、IDC_R_EDIT、IDC_G_EDIT和IDC_B_EDIT,分别用来显示颜色对话框中选择的颜色值和所选颜色的红色分量值、绿色分量值和蓝色分量值。

      3、为按钮IDC_COLOR_BUTTON添加点击消息的消息处理函数CExample19Dlg::OnBnClickedColorButton()。

      4、修改消息处理函数CExample19Dlg::OnBnClickedColorButton()函数如下:

    C++代码:

       5、最后编译运行程序,在结果对话框中点击“颜色选择”按钮,弹出颜色对话框。初始状态下,选择框在红色上,我们选择另一种颜色,此时的颜色对话框如下:

      点“确定”按钮,对话框上的四个编辑框分别显示了选择的颜色值、R分量、G分量和B分量:

      我们在实际开发中,可以用获取到的颜色值来设置其他对象的颜色,使用还是很方便的。

  • 相关阅读:
    day 6 敌机
    day 11 绘制轮廓
    day 10 形态学处理 膨胀
    day 5 飞机发射子弹 难点??
    激活Navicat?如何注册Navicat?
    Gradle DSL method found: ‘android()’错误
    腾讯sdk配置
    Android模拟器报"Failed To Allocate memory 8"错误的解决办法
    文件上传工具swfupload[转]
    35个jquery技巧[转]
  • 原文地址:https://www.cnblogs.com/mupiaomiao/p/6229542.html
Copyright © 2011-2022 走看看