![]()
色選択ダイアログを表示するための関数としてChooseColorが用意されている。
この関数では引数にパラメータを指定することである程度自由がきくため使いやすい。しかし今回は図のようなダイアログを表示するだけとした。
#include "commdlg.h"
//
// 色選択ダイアログの表示
//
//pDefaultAndResultにはデフォルトで選択されている色を代入すること
//結果はpDefaultAndResultに返る
//
bool ShowChooseColorDialog(HWND hParentWnd,COLORREF* pDefaultAndResult)
{
BOOL ret;
CHOOSECOLOR sChooseColor;
static COLORREF pRGB[16]; //必ずstatic!
if(pDefaultAndResult == NULL)
return false;
::ZeroMemory(pRGB,sizeof(COLORREF) * 16); //16個ともRGB(0,0,0)
::ZeroMemory(&sChooseColor,sizeof(CHOOSECOLOR));
sChooseColor.lStructSize= sizeof(CHOOSECOLOR);
sChooseColor.Flags = CC_ANYCOLOR | CC_RGBINIT | CC_FULLOPEN;
sChooseColor.rgbResult = *pDefaultAndResult;
sChooseColor.lpCustColors = pRGB;
sChooseColor.hwndOwner = hParentWnd;
ret = ::ChooseColor(&sChooseColor);
if(ret == FALSE)
return false;
*pDefaultAndResult = *sChooseColor.lpCustColors;
return true;
}
void Test(void)
{
bool ret;
COLORREF sColor;
//デフォルトで赤を選択
sColor = RGB(0xff,0,0);
ret = ShowChooseColorDialog(NULL,&sColor);
if(ret)
::MessageBox(NULL,_T("色を選択しました"),_T(""),MB_OK);
else
::MessageBox(NULL,_T("色に変更はありません"),_T(""),MB_OK);
}
