• 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

  • 相关阅读:
    Docker入门之二镜像
    巧用Freemarker的自定义方法
    freemarker空值的多种处理方法
    ContextLoaderListener与DispatcherServlet所加载的applicationContext的区别
    Mingyang.net:自定义FreeMarkerView
    hibernate one-to-many many-to-one 双向注解
    Mingyang.net:Controller必需是public吗?
    Mingyang.net:org.springframework.context.annotation.ConflictingBeanDefinitionException
    Mingyang.net:No identifier specified for entity
    jQuery:find()及children()的区别
  • 原文地址:https://www.cnblogs.com/betterwgo/p/6909903.html
Copyright © 2020-2023  润新知