【转】Win32 SDK 实现带图片的 Button 控件BM_SETIMAGE(Disable时图片不显示)

在编写对话框程序时,希望能在按钮控件里显示一个小插图,如图所示

最初使用的方法是使用 BM_SETIMAGE 消息,但却不能达到满意的效果,在网上查了一通资料,最后终于实现了,现在把实现的方法记下来。

首先来到MSDN上,查得如下资料

 

BM_SETIMAGE message

Associates a new image (icon or bitmap) with the button.

Parameters

wParam

The type of image to associate with the button. This parameter can be one of the following values:

  • IMAGE_BITMAP
  • IMAGE_ICON

lParam

A handle (HICON or HBITMAP) to the image to associate with the button.

Return value

不重要,略

Remarks

The appearance of text, an icon, or both on a button control depends on the BS_ICON and BS_BITMAP styles, and whether the BM_SETIMAGE message is called. The possible results are as follows:

 

BS_ICON or BS_BITMAP Set?BM_SETIMAGE Called?Result
YesYesShow icon only.
NoYesShow icon and text.
YesNoShow text only.
NoNoShow text only

 

既然希望同时显示图片和文字,那么就应该采取上表中的第二行设置(蓝色)。

故控件属性设置为:

 

然后在 OnInitDialog() 函数中添加如下语句:

 

SendDlgItemMessage(hwnd,IDC_BUTTON1,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)LoadBitmap(hIn,MAKEINTRESOURCE(IDB_BITMAP1)));

 

但是效果却是这样的:

如果把控件属性中的Bitmap项改为 True ,效果又成了这个样子:

真的很让人抓狂。在一通搜索后,发现解决方案就在MSDN中。在BM_SETIMAGE词条的下面,有一条老外的评论,是这样的:

 

Community Additions

Icon with text solution

I had the same problem for the icon + text in the button and I solved using the version 6 of the common controls.
You can make this by adding the library (if I understand it, I'm not sure).

However I've added it with the preprocessor directive:

#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'\"")

"EDIT:" This preprocessor directive go on a single line, I don't know why It force me to put a line break after "#pragma"

 

Linkinf94
1/14/2013

也就是说,使用6.0.0.0版本的 Common-Controls 就好了,所以在程序里加上这么一句话:

 

 

#pragma comment(linker,"\"/manifestdependency:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'\"")


就万事OK了(64位平台,改为AMD64)

 

关于 Common-Controls 还可以参考:


http://blog.csdn.net/thirdprince/article/details/6336010

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解读设计模式----命令模式(Command Pattern)

***本文与作者原文有一定的偏差,其中加入了一部分是个人看法,详细请查看作者原文。***原文连接http://www.dofactory.com/Patterns/PatternCommand.aspx命令模式意图:  GOF 在《设计模式》一书中阐述其意图:“将一个请求封装为一个对象,从而…

Windows Embedded CE 6.0开发初体验(七)编译和调试平台

在完成Catalog选择之后,平台定制的工作告一段落,接下来,我们就要进入变数最多的环节——“编译和调试”平台了。编译的操作简单,但是想通过编译却有很多变数。 编译平台的第一步是选择Debug或者Release版本。选择 Build菜单中的C…

python合并单元格 索引_python笔记:纵向合并表格

工作中我们常常遇到多个格式相同的表格面要合并成一个表格,比如将2019年的数据与2020年的数据合并在一起来进行分析。平时EXCEL时我们通常直接复制粘贴,但有时因表格内容过大,直接粘贴效率低,且当字段过多时还需要进行逐列粘取我们…

哈希表(HashTable)探究(转)

HashTable 通常称为哈希表,它表示键(key)/值(value)对的集合。 1、HashTable 的构造函数: HashTable() //初始化为0个元素的空实例 HashTable(Int32) //初始化为int32 个元素的…

【转】Win32子窗口控件(按钮、编辑框、静态框、滚动条等)!!

前言: 子窗口控件是特殊的子窗口,不需要我们注册窗口类,系统已经注册好了,我们只需要在创建时选择相应的窗口类名。常用的子窗口控件有按钮BUTTON、组合框COMBOBOX、编辑框EDIT、列表框LISTBOX、静态框STATIC、滚动条SCROLLBAR等类…

在PC上用模拟器搭建Windows Mobile仿真环境:Microsoft Device Emulator使用

因为工作需要,体验了一下微软的移动设备模拟器Device Emulator 3.0。在此把一些使用体验写出来和大家交流一下,在自己摸索过程中从网上找了很多资料参考,希望大家再做这个的时候少走一些弯路%^) 在PC上用模拟器搭建Windows Mobile仿真环境&am…

人生需要奋斗

看了几集电视剧 奋斗,有种特别的味道!人生需要奋斗,沿着自己的目标,前进。FIGHTING 转载于:https://www.cnblogs.com/gxj760998/archive/2008/04/11/1147725.html

【转】QT布局QGridLayout QHBoxLayout QVBoxLayout简要分析!!

转自:https://blog.csdn.net/sabcdefg/article/details/106693203 在分析之前,先吐槽下M$的MFC,竟然没有相对布局!(至少我不知道,每次都是使用代码控制布局), M$这么多年,也不发展一下,你看C#都有相对布局... 参考精通Qt4编程(第2版),先看看…

php下拉选项登录_php下拉选项的批量操作的实现代码

实现功能&#xff0c;操作项可以单独删除&#xff0c;批量项可以批量删除&#xff0c;批量显示&#xff0c;隐藏(改广告的数据库的status_is的值)&#xff1b;1.视图关键点&#xff1a;<?php echo $row->id?>全选选择操作删除显示隐藏/*单个删除*/2.控制器&#xff…

协议栈开发学习总结

近来一直很少些关于技术方面的文章&#xff0c;一来是被工作和生活所累&#xff0c;没有很多闲暇多余的时间,二来呢是觉得一直没有好的case&#xff0c;或则有好的case&#xff0c;但觉得目前在这个case方面&#xff0c;自己还不算很professional。今天心情不错&#xff0c;感觉…

【转】QGridLayout 详解

转自&#xff1a;https://blog.csdn.net/u013928315/article/details/78123573 一、QGridLayout属性介绍 1、QGridlayout以方格的形式管理窗口部件&#xff0c;先看QGridLayout的属性&#xff0c;如下图 2、各个参数的介绍 layoutLeftMargin ...至layoutBottomMargin在ui_Mai…

php网站评论模块怎么写,模块内容评论循环

一、作用用于循环查询模块评论数据(支持分页查询)二、语法{commentmodule模块名称....}{/comment}三、参数介绍(红色表示必填参数&#xff0c;蓝色表示系统默认参数)参数介绍module用来查询模块的评论&#xff0c;例如新闻模块&#xff0c;填写newssite站点id&#xff0c;默认当…

什么是LINQ?

什么是LINQ? LINQ&#xff0c;语言级集成查询&#xff08;Language INtegrated Query&#xff09;经过了最近 20 年&#xff0c;面向对象编程技术&#xff08; object-oriented (OO) programming technologies &#xff09;在工业领域的应用已经进入了一个稳定的发展阶段。程序…

宋体(Simsun)和新宋体(NSimsun)的区别

我们平常说的宋体&#xff08;Simsun&#xff09;全称为中易宋体&#xff0c;它和新宋体&#xff08;NSimsun&#xff09;是由北京中易中标电子信息技术有限公司制作并持有版权的两个TrueType 字体。自从微软向中易购买了这套字型后&#xff0c;它便成为了简体中文使用者最熟悉…

商业计划书最好就是十页篇幅

第一页是市场介绍&#xff1b;第二页分析市场问题&#xff1b;第三页写解决问题的方式&#xff1b;第四页调研市场&#xff1b;第五页分析竞争对手&#xff1b;第六页介绍核心竞争力&#xff1b;第七页写盈利模式&#xff1b;第八页写近期目标&#xff1b;第九页写资金预算&…

java import 出错,Eclipse的java代码出错:The import XXXX cannot be resolved

折腾Eclipse时&#xff0c;经常会遇到这种情况&#xff1a;缺少某个库&#xff0c;找到之后&#xff0c;需要将该库&#xff0c;jar包&#xff0c;加入到当前项目&#xff0c;使得代码中的import xxx得以正常导入。【如何在Eclipse中导入/添加(外部的)库/jar包】基本思路&#…

Platform Builder实践之配置文件

这篇文章主要讲解PB的配置文件。从用途方面分析&#xff0c;PB包含两种配置文件。分别是源码配置文件和镜像配置文件。下面分别讲解这两种配置文件。 一、源码配置文件&#xff1a;源码配置文件用于编译源码时使用。这里的源码是指Windows CE公开的源码&#xff0c;如驱动程序、…

【转】itk、vtk、qt 显示dicom 数据

转自&#xff1a;https://blog.csdn.net/Zzhouzhou237/article/details/107199076/ 以下代码实现了itk读取dicom数据&#xff0c;转换为vtkData&#xff0c;然后用Qt显示。 1、Qt Designer 搭建界面&#xff0c;QVTKOpenGLNativeWidget 是vtk的一个类&#xff0c;连接qt与vtk…

页面执行顺序

今天写绑定下拉用户控件中&#xff0c;下拉列表的数据时&#xff0c;发现竟然后台的数据为空. 今天才有点明白页面的执行顺序。 转载于:https://www.cnblogs.com/jskingli/archive/2008/05/09/1190176.html

Windows CE创建桌面快捷方式

在使用Platform Builder创建Windows CE系统的内核映入文件NK.bin时&#xff0c; 创建一个桌面快捷方式的步骤如下&#xff1a;1、创建一个快捷方式文件Test.lnk&#xff0c;格式如下&#xff1a; 17#/Windows/Test.exe 其 中&#xff0c;17表示#后面有多少个字符 2、将此文件拷…