<カラーダイアログ> カラーダイアログを表示するためには、 CHOOSECOLOR 構造体変数のメンバに値をセットし、 ChooseColor 関数を呼びます。 typedef struct { DWORD lStructSize; HWND hwndOwner; HWND hInstance; COLORREF rgbResult; COLORREF *lpCustColors; DWORD Flags; LPARAM lCustData; LPCCHOOKPROC lpfnHook; LPCTSTR lpTemplateName; } CHOOSECOLOR, *LPCHOOSECOLOR; 重要なものだけ解説します。lStructSize には構造体のサイズを、 hwndOwner には親ウィンドウのハンドルを入れます。 関数が戻ってきたときに rgbResult には、ユーザが選んだ色が格納されますが、 呼び出すときに初期値を入れておく必要があります(0で構いません)。 lpCustColors には COLORREF 型配列へのポインタを渡します。この配列にはカラーダイアログ 上で作成できる16個の色が格納されます。Flags には以下のものがあります。
具体的には、というか私の場合は以下のようにしました。 static CHOOSECOLOR cc; static COLORREF crCustColors[16], crResult; memset (&cc, 0, sizeof(CHOOSECOLOR)); cc.lStructSize = sizeof (CHOOSECOLOR) ; cc.lpCustColors = crCustColors ; cc.Flags = CC_RGBINIT | CC_FULLOPEN ; if (!ChooseColor(&stColor)) return 0; crResult = cc.rgbResult; 構造体の重要なメンバだけに特定の値を入れ、他のメンバを「0」で初期化する場合には、 memset が便利です。私の場合は色情報を保存する必要があったので、static(もしくはグローバル)変数に しました。こうすれば、カスタムした16個の色も保存することができます。ただ、起動中は色が保存されますが、 このままでは、アプリケーションを終了してしまうと、色情報が消えてしまいます。 その為、次に説明するファイルへの保存が必要になります。 |
Copyright (c) 2003-2004 HIDEKAZU KAJIURA. All Rights Reserved. |