Vista で追加された新しいスタイルのボタン

画像を見てもらえば分かるように、ボタンに盾のアイコンがついた "管理者権限がいるよボタン" と、ウィザードで多く使われてる "キャプションと説明がついた大きくて平らなボタン" を作る方法。といっても後者は画像でネタバレしといた。

f:id:dacci:20070519232134p:image

ヘッダーファイルを見てたらスプリットボタンってものあるみたいだけど、後で気が向いたら書く。

管理者権限がいるよボタン

UAC が有効になってる状態で、コマンドを実行するには管理者権限が必要なことを表す時に使われるボタン。こんなボタンをクリックすると UAC エスカレーションのダイアログが出てきて続行するか聞かれるやつ。

これを作るには、ボタンを CreateWindowEx してから BCM_SETSHIELD メッセージを送信する。Button_SetElevationRequiredState マクロ使ってもいい。ただ、どちらも commctrl.h で定義されているので、それをインクルード。さらに _WIN32_WINNT >= 0x0600 じゃないと使えないので、インクルードする前に #define しておくこと。

// シールドを表示する
SendMessage(hShieldButton, BCM_SETSHIELD, 0, TRUE);
Button_SetElevationRequiredState(hShieldButton, TRUE);

// シールドを表示しない
SendMessage(hShieldButton, BCM_SETSHIELD, 0, FALSE);
Button_SetElevationRequiredState(hShieldButton, FALSE);

キャプションと説明がついた大きくて平らなボタン

ウィザードでよく使われてる、文字だけかと思ってマウスを重ねたらジワッと浮き上がってくる、キャプションとコマンドの簡単な説明が書かれた大きくて平らなボタン。たぶん正式名称はコマンドリンクボタンなのかな、よくわかんないけど。作り方は CreateWindowEx するときに、dwStyle に BS_COMMANDLINK を含める。説明は BCM_SETNOTE メッセージを送信する。対応するマクロは Button_SetNote。

このスタイルやマクロも commctrl.h に _WIN32_WINNT >= 0x0600 のときだけ使えるように定義されてる。さらに、こいつは最近のコモンコントロールを使うおまじないがないとうまくいかない。

// コマンドリンクボタンを作る
CreateWindowEx(NULL, WC_BUTTON, _T("コマンドリンクボタン"), 
    WS_CHILD | WS_VISIBLE | BS_COMMANDLINK, 
    10, 40, 430, 100, hWnd, NULL, hInstance, NULL);
// 説明を表示する
SendMessage(hCmdLinkButton, BCM_SETNOTE, 0, (LPARAM)_T("Vista ではこのようなボタンが使えるようになりました。"));
Button_SetNote(hCmdLinkButton, _T("Vista ではこのようなボタンが使えるようになりました。"));