tags:

views:

34

answers:

1

I wanted to get both icon and text, so I didn't set BM_ICON on my button. In WM_INITDIALOG (yes, the button is in a dialog) I say:

SendDlgItemMessage(hwndDlg, IDC_CREATE, BM_SETIMAGE, IMAGE_ICON, reinterpret_cast<LPARAM>(create_image));

It doesn't work. The button shows text only. Now, if I do set the BS_ICON style, it works, but there's no text, as documented. Just in case, create_image is instantiated as follows:

create_image = LoadImage(g_current_instance, MAKEINTRESOURCE(IDI_ICONCREATE), IMAGE_ICON, 32, 32, LR_SHARED);

So how do I make it work?

+1  A: 

I believe what you want is called an "OwnerDraw" button. You can mix text and graphics on them. You provide the 3 button-states and it draws what you tell it.

Ownerdraw Control Example: http://www.codeguru.com/cpp/controls/buttonctrl/advancedbuttons/article.php/c5161

The link above might be a bit extreme, but you now have a search term to find lots of examples. I remember Petzolds "Programming Windows" also has an example.

Note that you can make non-rectangular buttons with these. Generally when you see a weird shaped button on Windows, this is how they do it.

Search Example: Win32 ownerdraw button.

JustBoo