C++メモ(Win32API):カラーダイアログ

※先日C++(Win32API)を使った時に覚えた内容をメモしています。
 まだ勉強中なので、間違いがあればご指摘ください。

カラーダイアログ    カラーダイアログ

【カラーダイアログ表示関数】

BOOL ChooseColor(LPCHOOSECOLOR cc);
 第1引数:CHOOSECOLOR構造体
 戻り値 :成否(True/False)

【CHOOSECOLOR構造体】

Struct CHOOSECOLOR
{
	DWORD		lStructSize		//構造体のサイズ
	HWND		hwndOwner			//ウィンドウハンドル
	HWND		hInstance			//インスタンスハンドル
	COLORREF		rgbResult			//初期カラー・選択カラー
	COLORREF*		lpCustColors		//カスタムカラー(16色まで)
	DWORD		Flags			//初期化フラグ
	LPARAM		lCustData			//フックプロシージャに渡すデータ
	LPCCHOOKPROC	lpfnHook			//フックプロシージャ(FlagsにCC_ENABLEHOOKが指定されている場合に動作)
	LPCTSTR		lpTemplateName		//リソース名称(FlagsにCC_ENABLETEMPLATEが指定されている場合に動作)
}

【Flags(初期化フラグ)】

CC_RGBINIT				//rgbResultを初期カラーに設定する
CC_FULLOPEN			//オープン時にカスタムカラー設定窓を開く
CC_PREVENTFULLOPEN			//「色の作成」ボタンを無効にする
CC_SHOWHELP			//ヘルプボタン「?」を表示
CC_ENABLEHOOK			//フックプロシージャを使う
CC_ENABLETEMPLATE			//リソースを利用する
CC_ENABLETEMPLATEHANDLE		//hInstanceを有効にする
CC_SOLIDCOLOR			//ソリッドカラーだけを表示する
CC_ANYCOLOR			//使用可能な全ての色を表示する

【ダイアログの位置】
  カラーダイアログの表示位置を指定するには、フックプロシージャを使う必要があります。
  ダイアログが作成されたとき(WM_INITDIALOG)に、MoveWindow関数で移動させます。



【サンプルコード】

void Sumple()
{
	//カスタムカラーを配列に格納(16色まで設定可能)
	COLORREF CustColors2[16];
	CustColors2[0]= RGB(255,0,0);
	CustColors2[1]= RGB(0,255,0);
	CustColors2[2]= RGB(0,0,255);
	
	//CHOOSECOLOR構造体
	CHOOSECOLOR cc;
	cc.lStructSize = sizeof(cc);
	cc.hwndOwner = NULL;
	cc.hInstance = NULL;
	cc.rgbResult = RGB(255,0,0);
	cc.lpCustColors = CustColors;
	cc.Flags = CC_RGBINIT | CC_ENABLEHOOK;
	cc.lCustData = NULL;
	cc.lpfnHook = CCHookProc;
	cc.lpTemplateName = NULL;
	
	//カラーダイアログ表示
	ChooseColor(&cc);
	
	//cc.rgbResultに選択した色が格納されます
}

//フックプロシージャ
UINT CALLBACK CCHookProc(HWND hdlg,UINT msg,WPARAM wp,LPARAM lp)
{
	switch(msg)
	{
	case WM_INITDIALOG:
		//ダイヤログサイズを取得
		RECT rect;
		GetWindowRect(hdlg,&rect);
		SIZE sz;
		sz.cx = rect.right - rect.left;		//横幅
		sz.cy = rect.bottom - rect.top;		//縦幅

		//出力位置の設定
		POINT pnt;
		pnt.x = 100;
		pnt.y = 100;
	
		//ダイヤログ位置設置
		MoveWindow(hdlg , pnt.x , pnt.y , sz.cx , sz.cy , TRUE);
	
		//ダイアログのタイトルセット
		SetWindowText(hdlg,TEXT("カラーダイアログ"));
		
		break;
	default:
		return FALSE;
	}
	return TRUE;
}


コメント
コメントする








    
この記事のトラックバックURL
トラックバック