zoukankan      html  css  js  c++  java
  • win32调用系统颜色对话框

    参考网站:http://blog.csdn.net/u013242177/article/details/50437358

    • 首先要包含commdlg.h头文件,这个是通用对话框的头文件,包括文件对话框,颜色对话框,打印对话框等。
    • 然后再声明一个CHOOSECOLOR类型的变量,声明一个COLORREF类型的变量rgbLineColor,用来存储用户选择的颜色。
    static CHOOSECOLOR stChooseColor; 
    static COLORREF rgbLineColor;

       其中CHOOSECOLOR是一个结构体,包括了用ChooseColor函数来初始化颜色对话框的一些信息,可以从MSDN中查到这个结构体如下:

    typedef struct {

    DWORD lStructSize;

    HWND hwndOwner;

    HWND hInstance;

    COLORREF rgbResult;

    COLORREF* lpCustColors;

    DWORD Flags;

    LPARAM lCustData;

    LPCCHOOKPROC lpfnHook;

    LPCTSTR lpTemplateName;

    } CHOOSECOLOR;

    • 然后再对stChooseColor的内容进行赋值
    stChooseColor.lStructSize    = sizeof(CHOOSECOLOR) ;
    stChooseColor.hwndOwner      = hWnd ;
    stChooseColor.rgbResult      = rgbLineColor ;
    stChooseColor.lpCustColors   = (LPDWORD) dwCustColors ;
    stChooseColor.Flags          = CC_RGBINIT ;
    stChooseColor.lCustData      = 0 ;
    stChooseColor.lpfnHook       = NULL ;
    stChooseColor.lpTemplateName = NULL ;
    • 最后用ChooseColor函数来创建一个颜色对话框供用户选择颜色
    if (ChooseColor(&stChooseColor))
    { 
    rgbLineColor = stChooseColor.rgbResult; 
    }

    获取COLORREF中RGB分量值:

    COLORREF colorrrefRGB =RGB(120,250,110);
    
    BYTE r = GetRValue(colorrrefRGB);
    
    BYTE g = GetGValue(colorrrefRGB);
    
    BYTE b = GetBValue(colorrrefRGB);

    代码示例:

    #include "commdlg.h"
    
    ......................................
    
    void CmyDialogt::OnBnClickedButtonPickcolor()
    {
        // TODO: Add your control notification handler code here
        static CHOOSECOLOR stChooseColor; 
        static COLORREF rgbLineColor; 
        static COLORREF dwCustColors[16];
    
        stChooseColor.lStructSize    = sizeof(CHOOSECOLOR) ;
        stChooseColor.hwndOwner      = this->m_hWnd ;
        stChooseColor.rgbResult      = rgbLineColor ;
        stChooseColor.lpCustColors   = (LPDWORD) dwCustColors ;
        stChooseColor.Flags          = CC_RGBINIT ;
        stChooseColor.lCustData      = 0 ;
        stChooseColor.lpfnHook       = NULL ;
        stChooseColor.lpTemplateName = NULL ;
    
        if (ChooseColor(&stChooseColor))
        {
            rgbLineColor = stChooseColor.rgbResult;
    
            BYTE r = GetRValue(rgbLineColor);
            BYTE g = GetGValue(rgbLineColor);
            BYTE b = GetBValue(rgbLineColor);
        }
    }

    运行结果:

    clipboard

  • 相关阅读:
    Spring中的事务传播行为与隔离级别
    redis分布式共享锁模拟抢单的实现
    synchronized关键字修饰非静态方法与静态方法的区别
    docker安装Tensorflow并使用jupyter notebook
    python 图像处理(4):图像的绘制
    python 图像处理(3):图像数据类型及颜色空间转换
    python 图像处理 (2):图像像素的访问与裁剪
    python 读取图像的几种方法
    python 图像处理:图像的读取、显示与保存
    NLP 正向、逆向 分词
  • 原文地址:https://www.cnblogs.com/betterwgo/p/6909903.html
Copyright © 2011-2022 走看看