Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove border from win32 button

Tags:

button

winapi

I have a button which is created in the WM_CREATE function of a Win32 Application with the following code:

hChangeWorldButton = CreateWindowEx(NULL,
    "BUTTON",
    "OK",
    WS_CHILD | WS_VISIBLE | BS_FLAT | BS_BITMAP,
    2,
    2,
    25,
    25,
    hWnd,
    (HMENU)CHANGEWORLD_BUTTON,
    GetModuleHandle(NULL),
    NULL);
SendMessage(hChangeWorldButton, BM_SETIMAGE, (WPARAM)IMAGE_BITMAP, (LPARAM)worldBmp);

I would like the button to show only the image. Not the background and border.

How can I do this? I have tried many different button styles from MSDN but nothing seems to fit my needs. I was thinking of using BS_OWNERDRAW but it seems a bit overkill. Or is it the only solution?

Finally, how can I change the cursor to be a hand when it's hovering over the button?

like image 580
RaptorDotCpp Avatar asked Dec 07 '13 16:12

RaptorDotCpp


1 Answers

No button style is available that results in the visual representation you are after. You would have to go with BS_OWNERDRAW here.

As an alternative you could use a Static Control with the SS_NOTIFY style instead. A static control allows you to get the visual representation you want, and the SS_NOTIFY styles allows you to respond to mouse input. However, you will not be able to implement a keyboard interface.

While I have not tried this myself, it may also be possible to get the desired effect by using a Command Link (BS_COMMANDLINK), and setting the caption to an empty string.

like image 117
IInspectable Avatar answered Sep 28 '22 18:09

IInspectable