Windows 7 で ボタン へ 盾アイコンを付ける

Windows Vista や Windows 7 では

  • Button
  • Hyperlink
  • Commandlink

等のコントロールに盾アイコンを表示することができるようになっている。

Window 7 からは アイコンのデザインが少し変わったようだ。

Windows VISTA

Windows 7

ボタンへ盾アイコンをつけるには簡単だ。下記のマクロを使用して対象のウィンドウへメッセージを送れば良い。

// 盾アイコンを付ける
void CSetElevationDlg::OnBnClickedCommand1()
{
    Button_SetElevationRequiredState(GetDlgItem(IDOK)->m_hWnd, TRUE);
}

// 盾アイコンを外す
void CSetElevationDlg::OnBnClickedCommand2()
{
    Button_SetElevationRequiredState(GetDlgItem(IDOK)->m_hWnd, FALSE);
}

盾アイコンは自分や、自分の子ウィンドウだけではなく、他のウィンドウにも付けるが出来る。(※ただしボタンに無暗に付けてもUACの動作には関係ない)
テーマがクラシックスタイルの場合は、下記のようにWindowsのスタートボタン等にもつけることが出来るようになっている。

ちなみに”デスクトップに表示されている全てのボタンに盾アイコンを付けたい”場合、次を参考に実装すれば良い。

#define BTN_OFF 0
#define BTN_ON 1

// 個別の子ウィンドウへの処理を行う、アプリケーション定義のコールバック関数
static BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)   
{
    const ATOM wButtonAtom = 0xC017; // "Button"クラスのグローバルATOM   
    WINDOWINFO info;
    GetWindowInfo(hwnd, &info);
    if (info.atomWindowType == wButtonAtom && IsWindowVisible(hwnd))
    {
        Button_SetElevationRequiredState(hwnd, lParam == BTN_ON);
        InvalidateRect(hwnd, NULL, TRUE);
    }
    EnumChildWindows(hwnd, EnumWindowsProc, lParam);
    return TRUE;
}

// 盾アイコンを付ける
void CSetElevationDlg::OnBnClickedCommand1()
{
    Button_SetElevationRequiredState(GetDlgItem(IDOK)->m_hWnd, TRUE);
    CWaitCursor wait;
    EnumChildWindows(NULL, EnumWindowsProc, BTN_ON); // 子ウィンドウを列挙する。
}

// 盾アイコンを外す
void CSetElevationDlg::OnBnClickedCommand2()
{
    Button_SetElevationRequiredState(GetDlgItem(IDOK)->m_hWnd, FALSE);
    CWaitCursor wait;
    EnumChildWindows(NULL, EnumWindowsProc, BTN_OFF);    // 子ウィンドウを列挙する。
    Button_SetElevationRequiredState(GetDlgItem(IDC_COMMAND1)->m_hWnd, TRUE);
}

Before (Normal)

After (Custom)

 

参照情報:

アプリケーション開発者向け Microsoft® Windows 7 対応アプリケーションの互換性
http://msdn.microsoft.com/ja-jp/windows/dd883236.aspx

Livedoor タグ:

広告

Windows 7 で ボタン へ 盾アイコンを付ける」への2件のフィードバック

  1. //盾アイコンを付ける void CsetElevation1g::OnBn(1ickedCommand1(){ Batton_SetElevation Reguiredstate

コメントを残す

コメントを投稿するには、以下のいずれかでログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中