#pragma pack(push, 8)
BOOL Button_SetIcon(HWND hwndButton, HINSTANCE hModule, LPSTR szIcon, INT cx = 32, INT cy = 32, UINT fuLoad = LR_DEFAULTCOLOR)
{
BOOL ret = FALSE;
HICON hIconBlend;
HICON hIcon = (HICON)LoadImage(hModule, szIcon, IMAGE_ICON, cx, cy, fuLoad);
struct
{
HIMAGELIST himl; // Index: Normal, hot, pushed, disabled, focused.
RECT margin; // Margin around icon.
UINT uAlign;
} bi;
memset(&bi, 0, sizeof(bi));
bi.himl = ImageList_Create(cx,cy,ILC_COLOR16|ILC_MASK,4,0);
bi.uAlign = 4;
ImageList_AddIcon(bi.himl,hIcon); // Normal
ImageList_AddIcon(bi.himl,hIcon); // hot
ImageList_AddIcon(bi.himl,hIcon); // pushed
// disabled
hIconBlend = ImageList_GetIcon(bi.himl,0,ILD_BLEND50|ILD_TRANSPARENT);
ImageList_AddIcon(bi.himl,hIconBlend);
DestroyIcon(hIconBlend);
hIconBlend = ImageList_GetIcon(bi.himl,3,ILD_BLEND50|ILD_TRANSPARENT);
ImageList_Remove(bi.himl,3);
ImageList_AddIcon(bi.himl,hIconBlend);
DestroyIcon(hIconBlend);
ImageList_AddIcon(bi.himl,hIcon); // focused
if(!(ret = SendMessage(hwndButton,(0x1600/*BCM_FIRST*/ + 0x0002)/*BCM_SETIMAGELIST*/,0,(LPARAM)&bi)))
{
ImageList_Destroy(bi.himl);
ret = SendMessage(hwndButton,BM_SETIMAGE,IMAGE_ICON,(LPARAM)hIcon);
}
else
{
DestroyIcon(hIcon);
SetWindowText(hwndButton,"");
}
return ret;
}
#pragma pack(pop)