如何创建带有图标的C++按钮
How to create a C++ button with an icon
我正在尝试制作一个自定义退出按钮,并且我已经在 photoshop 中为该按钮创建了一个自定义图形。 我有以下代码定义的按钮:
button = CreateWindow(L"BUTTON", L"", WS_VISIBLE | WS_CHILDWINDOW, 400, 4, 480, 24, hWnd, button_id, hInstance, NULL);
我想将close.bmp
或close.png
或close.ico
(最简单的)放在按钮上,但是如果没有 MFC,我找不到一种方法来做到这一点。 请帮忙!!
谢谢
使用BS_BITMAP
或BS_ICON
按钮样式。 创建按钮后,向其发送一条带有位图或图标句柄的BM_SETIMAGE
消息。 若要获取位图或图标的句柄,请使用 LoadImage
。
如果图像具有 Alpha 通道(透明度),请确保将其另存为每像素 32 位的位图。 您可以使用图标,但边缘可能不会那么平滑。
有两种主要可能性:
-
如果只想将位图放在常规按钮上,则使用
WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_BITMAP
样式组合创建按钮,使用LoadBitmap
加载位图,然后通过在BM_SETIMAGE
消息中将其句柄发送到按钮来将加载的位图放在按钮上。 -
如果要更改整个按钮的外观,请使用
WS_CHILD|WS_VISIBLE|BS_OWNERDRAW
样式组合创建它,并处理WM_DRAWITEM
消息。将此消息的lParam
投射到LPDRAWITEMSTRUCT
,并使用其hDC
成员绘制按钮。在这种情况下,请使用LoadBitmap
预加载位图,并使用BitBlt
或TransparentBlt
(源)在 DC 上绘制它。或者,您可以使用LoadIcon
和DrawIconEx
(源)。DRAWITEMSTRUCT
的其他成员可用于选择位图,即按钮的外观,具体取决于当前操作或状态。
很棘手...
最好的选择是使用"所有者绘制"按钮,即样式位BS_OWNERDRAW
。
然后,每当要重绘按钮时,按钮(父窗口)的所有者将收到消息WM_DRAWITEM
。
缺点是按钮必须完全绘制,不仅是图标,还有框架、背景、标签(如果需要)、焦点矩形......您必须检查关联的DRAWITEMSTRUCT
并确定要绘制的确切样式。
为了简化工作,Windows 函数DrawFrameControl()
可以绘制多种样式的框架(包括标准按钮框架)非常有用。
发送BM_SETIMAGE消息,并将加载的图像句柄传递给lParam。
button1 = CreateWindowW(L"BUTTON", L"&Button", WS_VISIBLE | WS_CHILD | WS_TABSTOP | BS_BITMAP, 20, 50, 80, 25, hwnd, (HMENU) 600, NULL, NULL);
hImg = LoadImageW(NULL, L"test123.bmp", IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR | LR_DEFAULTSIZE | LR_LOADFROMFILE);
SendMessageW(button1, BM_SETIMAGE, IMAGE_BITMAP, (LPARAM) hImg);
PS:你需要在创建窗口() 时使用BS_BITMAP标志
- 如何为 C++ Visual Studio 2019 指定应用程序图标?
- 从 wxWidgets 中的.DLL加载图标
- 如何修复加载图标()函数不显示图标?
- QT Framewrok 和 Visual Studio - 图标冲突
- 如何在 c++ 中将图标放在按钮上?
- Windows 资源管理器中的图标在使用 resource.rc 时显示 2 个不同的图标
- 为什么从文件获取图标时应用程序有时会崩溃?
- 如何在MFC中的静态文本控件上插入图标?
- wxWidgets 3.1.3 图标在 mac 下加载 - ICNS 文件不可读?
- 如何使用IExecuteCommand和动词在上下文菜单外壳扩展中显示本地化文本和自定义图标?
- 在 C# 中更改鼠标光标图标
- Gtk::带有set_icon_name的窗口图标集在 wayland 上不起作用
- 为什么图标主题资源路径没有列在get_search_path
- 如何在 VC6 中的对话框中将图标设置为按钮
- GTK 3 C++按钮中带有标签的图标
- Visual Studio 2015资源视图和资源编译器使用不同的方法在项目目录中查找图标文件.如何修复
- 如何在 Windows 中立即刷新文件夹图标
- 图标编辑器中的自定义颜色 (VS 2015)
- Shell_NotifyIcon在系统托盘中创建空白、无响应的图标
- 为没有qmake/VS的Qt Windows应用程序设置.exe图标