在按钮上绘制资源图标

Posted

技术标签:

【中文标题】在按钮上绘制资源图标【英文标题】:Draw Resource Icon on Button 【发布时间】:2021-02-15 16:35:58 【问题描述】:

我想在“所有者绘制”按钮上绘制我的程序图标。这可以是资源文件中的图标,也可以是通用的 Windows 图标。但是,即使经过无休止的搜索,我也无法找到此代码。我遇到了一些零零碎碎的答案。但是,没有完整的解释。

抱歉,我没有要发布的代码。我完全迷失了这个。标准 Win API 或 GDI+ 都适合我。

【问题讨论】:

这能回答你的问题吗? How to draw ICON in GDI+? 请发布一些代码,以便我们了解您正在使用的框架。 不,不幸的是,那个链接只是把我带进了一个兔子洞,我从来没有找到底部。我跟着一个又一个链接,没有答案。必须有一个简单的方法来做到这一点。 【参考方案1】:

创建按钮时,添加BS_ICON样式,然后获取图标的句柄,即可使用LoadImage

最后发送带有句柄的BM_SETIMAGE 消息到您的图标。

这是代码示例:

HWND button1 = CreateWindow(TEXT("Button"), TEXT("OK"), WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON | BS_ICON,
    50, 50, 50, 50, hwnd, (HMENU)1001, hInstance, NULL);
HICON hIcon = (HICON)LoadImage( // returns a HANDLE so we have to cast to HICON
    NULL,             // hInstance must be NULL when loading from a file
    L"iconname.ico",   // the icon file name
    IMAGE_ICON,       // specifies that the file is an icon
    0,                // width of the image (we'll specify default later on)
    0,                // height of the image
    LR_LOADFROMFILE |  // we want to load a file (as opposed to a resource)
    LR_DEFAULTSIZE |   // default metrics based on the type (IMAGE_ICON, 32x32)
    LR_SHARED         // let the system release the handle when it's no longer used
);
SendMessage(button1, BM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);

【讨论】:

谢谢朱松。我们在这里遇到了冰暴。所以,清理工作并没有给我太多编码的机会。几天后我会努力做到的。

以上是关于在按钮上绘制资源图标的主要内容,如果未能解决你的问题,请参考以下文章

在表单上绘制自定义图标

MFC单文档视图之图标资源加载及绘制

Android:具有可绘制资源的 ImageButton 引发 ResourceNotFoundException

如何将可绘制资源中的图像保存到 SD 卡?

如何在 Espresso 中测试 ActionMenuItemView 的图标

在Winform开发框架中使用DevExpress的内置图标资源