win32调用系统颜色对话框

2018-06-17 22:29:52来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

参考网站: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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:P1880 石子合并

下一篇:P2279 [HNOI2003]消防局的设立