【问题标题】:Remove border from win32 button从win32按钮删除边框
【发布时间】:2013-12-07 16:21:44
【问题描述】:

我有一个在 Win32 应用程序的 WM_CREATE 函数中创建的按钮,代码如下:

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

我希望按钮只显示图像。不是背景和边框。

我该怎么做?我从MSDN 尝试了许多不同的按钮样式,但似乎没有什么能满足我的需求。我正在考虑使用 BS_OWNERDRAW ,但这似乎有点矫枉过正。或者它是唯一的解决方案?

最后,当光标悬停在按钮上时,如何将光标更改为手?

【问题讨论】:

    标签: winapi button


    【解决方案1】:

    没有可用的按钮样式可以产生您所追求的视觉表示。您必须在这里使用BS_OWNERDRAW

    作为替代方案,您可以使用带有SS_NOTIFY 样式的Static Control。静态控件允许您获得所需的视觉表示,SS_NOTIFY 样式允许您响应鼠标输入。但是,您将无法实现键盘接口。

    虽然我自己没有尝试过,但也可以通过使用Command Link (BS_COMMANDLINK) 并将标题设置为空字符串来获得所需的效果。

    【讨论】:

      【解决方案2】:

      要消除按钮的背景和边框,只需使按钮小于位图即可。

      【讨论】: