オーナードローせずにボタンにアイコン

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);
	}