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

  • 相关阅读:
    读写二进制c# 二进制读写
    重构风险程序员一定要遵守的规则
    文件区域使用fcntl锁定文件,并且测试
    数据清空js清空div里的数据问题
    模板缓存ThinkPHP中的模板引擎和视图层
    描述null11121 Base 2
    操作系统请求操作系统 算法
    工程项目eclipse项目名前出现红色感叹号,小红叉解决
    程序链接关于静态链接,动态链接,共享库,ABI的一些记录(os学习)
    NMAKE命令行编译
  • 原文地址:https://www.cnblogs.com/betterwgo/p/6909903.html
Copyright © 2011-2022 走看看