我希望在同一个按钮上同时显示图像图标和文本,例如Word中的图标。
我在按钮上设置了一个图标,但文字消失了。
HANDLE hBmp = (HBITMAP)LoadImage(g_hDllInstance,
MAKEINTRESOURCE(IDB_BITMAP4),
IMAGE_BITMAP,
NULL,
NULL,
LR_DEFAULTCOLOR);
HWND hwndButton = CreateWindowEx(
NULL,
_T("BUTTON"),
_T("SOME TEXT"),
BS_BITMAP | WS_VISIBLE | WS_CHILD,
point.x - 47,
point.y - 3,
36,
40,
hWnd,
(HMENU)200,
NULL,
NULL);
SendMessage(
(HWND)hwndButton,
(UINT)BM_SETIMAGE,
(WPARAM)IMAGE_BITMAP,
(LPARAM)hBmp);
我还试图在我的按钮上的一个较小的子窗口上设置图标,但由于某种原因我的子窗口不可见。
答案 0 :(得分:6)
Button Styles参考 1 中列出了如何获取按钮以显示图像和文本的说明:
按钮控件上的文本或图标或两者的外观取决于BS_ICON和BS_BITMAP样式,以及是否发送了BM_SETIMAGE消息。可能的结果如下。
BS_ICON or BS_BITMAP set? | BM_SETIMAGE called? | Result --------------------------+---------------------+-------------------- Yes | Yes | Show icon only. No | Yes | Show icon and text. Yes | No | Show text only. No | No | Show text only
换句话说:不要设置BS_ICON
或BS_BITMAP
样式(但要设置BS_TEXT
样式),并在按钮出现后发送BM_SETIMAGE
消息已创建。
要查看此操作,请在Visual Studio中创建标准Windows桌面应用程序,并应用以下更改:
启用视觉样式。这是最简单的方法,将#pragma
链接器指令放入唯一的编译单元:
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
在主窗口的WM_CREATE
处理程序中创建按钮:
case WM_CREATE:
{
HWND btn{ ::CreateWindowExW(0x0, L"BUTTON", L"Button text",
WS_VISIBLE | WS_CHILD | BS_TEXT,
10, 10, 200, 50, hWnd, (HMENU)110,
nullptr, nullptr) };
HICON icon{ (HICON)::LoadImageW(::GetModuleHandle(nullptr),
MAKEINTRESOURCEW(107),
IMAGE_ICON, 32, 32, 0x0) };
::SendMessageW(btn, BM_SETIMAGE, IMAGE_ICON, (LPARAM)icon);
}
break;
确保根据需要调整数字常量。 110
是按钮的控件标识符,107
是向导生成的应用程序图标资源的资源ID,32
是请求图标的宽度和高度。
此代码生成以下输出:
1 请注意,您必须enable visual styles才能使用此功能。