Кнопки оконные. Вы можете создать кнопку с помощью вызова CreateWindow или CreateWindowEx:
- http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx
При создании окна кнопки убедитесь, что вы передали стиль BS_OWNDERDRAW:
- http://msdn.microsoft.com/en-us/library/bb775951(VS.85).aspx
Это сообщит кнопке для отправки сообщений WM_DRAWITEM на ваши кнопки WNDPROC:
- http://msdn.microsoft.com/en-us/library/bb775923(v=VS.85).aspx
В WNDPROC ваших кнопок вы обрабатываете сообщение WM_DRAWITEM и раскрашиваете свою кнопку в соответствии с информацией в DRAWITEMSTRUCT, полученной в виде указателя в lParam.
Чтобы отобразить растровое изображение как что-либо кроме прямоугольника, вам нужно предоставить 1-разрядное растровое изображение с битовой маской того же размера, что и растровое изображение, которое вы хотите отобразить для своей кнопки. В битовой маске установлены биты, где вы хотите, чтобы пиксели в вашем растровом изображении кнопки были установлены на экране. Пиксели в растровом изображении кнопки, которые не отображаются, должны быть черными. Создайте битовый рисунок с битовой маской на экране с оператором AND, а затем ИЛИ с битовой картой вашей кнопки. Конечно, вам необходимо учитывать различные состояния кнопок (обычно кнопка имеет только два состояния).
Возможно, я смешал черные / белые или установить / не установить биты в приведенном выше объяснении, но растровые операции И / ИЛИ (SRCAND / SRCPAINT) являются правильными операциями для того, что вы пытаетесь получить.
- http://msdn.microsoft.com/en-us/library/aa930997.aspx
Надеюсь, это поможет.