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 {this

DWORD lStructSize;spa

HWND hwndOwner;.net

HWND hInstance;3d

COLORREF rgbResult;code

COLORREF* lpCustColors;blog

DWORD Flags;ip

LPARAM lCustData;get

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

相關文章
相關標籤/搜索