C言語プログラミング覚書き
ホーム
覚書き

<カラーダイアログ>

カラーダイアログを表示するためには、 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 には以下のものがあります。

CC_ENABLEHOOK lpfnHook で指定されたフック関数を有効にします。
CC_ENABLETEMPLATE nInstance と lpTemplateName で指定された テンプレートを使ってダイアログを作成します。
CC_ENABLETEMPLATEHANDLE hInstance がロード済みのテンプレートを含む メモリブロックを指していることを表わします。 この場合、lpTemplateName は無視されます。
CC_FULLOPEN カスタムカラー作成部分を含んだダイアログボックス全体を表示します。
CC_PREVENTFULLOPEN 「色の作成」ボタンを無効にします。
CC_RGBINIT rgbResult で指定した値を初期設定カラーとしてダイアログに使用します。
CC_SHOWHELP ダイアログボックスに「ヘルプ」ボタンを追加します。 この場合、hwndOwner を指定しなければなりません。


具体的には、というか私の場合は以下のようにしました。


    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.