Vistaの盾マークのアイコンを表示する方法を調べていて、Windows XP からボタンにアイコンをつけられるようになっていることに気づいた。
未だにWindows 98対応させられたりする現状では使うことはなさそうだけど。
コードの断片。
LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { // 省略 test(); test2(); return TRUE; } CImageList m_Image; // アイコンをつけてみる void test() { m_Image.Create(48, 48, ILC_COLOR32, 0, 1); m_Image.ReplaceIcon(-1, AtlLoadIcon(IDI_ICON1)); BUTTON_IMAGELIST bi = {}; bi.himl = m_Image; SetRect(&bi.margin, 4, 4, 4, 4); bi.uAlign = BUTTON_IMAGELIST_ALIGN_LEFT; Button_SetImageList(GetDlgItem(IDC_BUTTON1), &bi); } // CommCtrl.h からコピペ #define BCM_SETSHIELD (BCM_FIRST + 0x000C) #define Button_SetElevationRequiredState(hwnd, fRequired) \ (LRESULT)SNDMSG((hwnd), BCM_SETSHIELD, 0, (LPARAM)fRequired) // シールドアイコンをつける void test2() { Button_SetElevationRequiredState(GetDlgItem(IDC_BUTTON2), TRUE); }