如何在文本按钮上放置图标?

2023-12-05

我想在同一个按钮上同时显示图像图标和文本,例如在 Word 中。

enter image description here

我在按钮上设置了图标,但文本消失了。

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

我还尝试在按钮上的较小子窗口上设置图标,但由于某种原因我的子窗口不可见。


Instructions on how to get a button to display both an image and text are outlined in the Button Styles reference1:

按钮控件上文本或图标或两者的外观取决于 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 or 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是请求图标的宽度和高度。

此代码产生以下输出:

Image button


1 Note, that you have to enable visual styles for this to work.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在文本按钮上放置图标? 的相关文章

随机推荐

  • 带 unique_ptr 的受保护析构函数

    我正在尝试从第三方库调用 API 当我想将 unique ptr 与具有受保护析构函数的类一起使用时 会出现问题 这是例子 include
  • MySQL 安装:错误:无法构建 gem 本机扩展

    我正在尝试将 MySQL 安装到最新版本 因为某些安装过程中出现了错误 我运行命令gem install mysql我收到以下信息 构建本机扩展 这 可能需要一段时间 错误 错误 安装 mysql 错误 失败 构建 gem 本机扩展 Sys
  • R 中用于文本分类的 SVM

    我正在使用支持向量机对我的文本进行分类 但实际上我并没有得到结果 而是得到了数值概率 数据框 1 20 训练集 21 50 测试集 Updated ou lt structure list text structure c 1L 6L 1L
  • 功能区 GUI 指南

    我正在考虑在我的一个应用程序中实现功能区 GUI 当然希望遵守 MS 指南 因此它感觉就像普通的功能区等 但我正在尝试找出如何解决动态更改中的特定问题丝带 我正在创建一个概念游戏编辑器 请不要问为什么要使用功能区 因为这纯粹是一个概念想法
  • 有没有一种简单的方法从数组中删除重复元素?

    我想从数组中删除重复的元素 use itertools Itertools use std collections HashSet derive Debug struct Person name String age u32 fn main
  • 0-1多维背包

    因此 我正在尝试生成一种算法 该算法将找到 n 个物品 在我的情况下为 4 个 的最佳组合 这些物品只能在最大重量容量下放入背包一次 0 1 概括起来可能更有效 我想在我的背包中放置不超过四个独特的物品 以便它们的重量小于某个值 W 同时最
  • 如何在 facebook-api 中标记照片?

    我想问是否 如何可以使用 FB API 图形或 REST 来标记照片 我已经成功创建了一个相册并在其中上传了一张照片 但我仍然坚持标记 我已获得权限和正确的会话密钥 到目前为止我的代码 try uid facebook gt getUser
  • Rails 中的“新建”操作如何重定向到“创建”?

    在 Rails 中 我可以使用以下命令自动创建一组用于 CRUD 操作的路由resources在路线文件中 这创造了index new create edit show update并破坏路线 我了解这些路由如何工作的一般流程 通常当调用路
  • Java 如何将音频数据存储在字节数组中。

    谁能告诉我如何将音频文件 au 中的音频数据读取存储到字节数组中 我查看了 Oracle 上的 Java 文档 但我不知道如何使用这些信息来编写程序 我猜测 音频数据 您需要 AU 文件中的音频样本 不包括标头信息和元数据 如果您只想将文件
  • 获取跨域iframe的DOM内容[重复]

    这个问题在这里已经有答案了 我有一个用于跨域网站的 iframe 我想读取 iframe 的 DOM 我相信这是可能的 因为使用检查器 我什至可以修改 iframe 的 DOM 然而 我尝试以各种方式阅读它 都会遇到相同的来源政策 我想要的
  • Azure Devops 管道,用于使用 iPhone 应用程序和 watchos 应用程序构建 ios 捆绑包

    我想使用 Azure Devops 管道来构建 ios 捆绑包 其中包含 iphone 应用程序和 watchos 应用程序 有一个工作区包含 3 个应用程序 一个用于手机 两个用于手表 我的工作区 我的手机应用程序 我的手表应用程序 My
  • 我的组合框不显示我在 VBA 中添加的值

    我正在尝试向用户窗体中的组合框添加选项 当我运行代码时 Excel 不会给出任何错误 但是当用户窗体显示时 它不会显示我之前添加到组合框中的实体 也就是说 当我单击组合框时 它不显示任何选项 只显示一个空白行 就好像没有添加任何项目一样 这
  • 我怎样才能摆脱角度的 $parent

    Here s Plunker 我在带有 ng include 的控制器中有一个外部模板 它根据按钮的单击事件显示和隐藏 它按要求工作 但在 ng include 模板中使用 parent 还有其他更好的方法吗 Html div div di
  • 如何从 C++ 生成均匀分布在 0 和 1 之间的随机双精度数?

    如何从 C 生成均匀分布在 0 和 1 之间的随机双精度数 当然我可以想到一些答案 但我想知道标准做法是什么 良好的标准合规性 随机性好 速度好 对于我的应用程序来说 速度比随机性更重要 多谢 PS 如果重要的话 我的目标平台是 Linux
  • Node.js:从不同域加载页面的 html

    我想知道如何加载托管在不同域上的 HTML 我正在使用 JavaScript 并且想要创建一个书签 以便我能够解析外部 HTML 我已经在谷歌上搜索了几个小时 但毫无结果 JavaScript 不允许发出跨域请求 这是一个很大的安全风险 相
  • 不计算列中重复值的值的累积和

    我在 R 中有这样的数据 x lt c 1 2 2 3 4 4 7 8 y lt c 300 200 200 150 100 100 30 20 df lt data frame x y 数据集的累积为 cum df lt data fra
  • 需要帮助防止无限循环。属性设置

    所以我有一个颜色选择器 用户可以使用 RGB 或 HSB 选择颜色 每个值都有滑块 属性 例如 当用户设置红色时 我将计算 HSB 值以反映新的颜色值 当用户设置 Hue 时 RGB 值将从 HSB 值重新计算 但请注意那里有一个循环 当我
  • Azure AD B2C:User.Identity.Name 为 null,但 User.Identity.m_instance_claims[9] 具有名称

    用户通过我的 Azure AD B2C Web 应用程序身份验证后 我尝试检索User Identity Name 然而 它是空的 然而 User Identity m instance claims 9 如下面的屏幕截图所示 确实具有正确
  • 如何以编程方式隐藏选项卡栏,然后展开视图以适合

    我从这个问题中得到了代码 如何以编程方式隐藏 UITabBarController 这很棒 但是视图现在无法扩展以适应选项卡栏留下的空间 我已经为视图设置了适当的 UIViewAutoresizingMasks 但我假设仅仅因为它的隐藏并不
  • 如何在文本按钮上放置图标?

    我想在同一个按钮上同时显示图像图标和文本 例如在 Word 中 我在按钮上设置了图标 但文本消失了 HANDLE hBmp HBITMAP LoadImage g hDllInstance MAKEINTRESOURCE IDB BITMA