MFC的图片按钮

MFC的图片按钮

利用CBitmapButton类实现位图按钮的两种方法 利用CBitmapButton类实现位图按钮的两种方法:
方法一:
1、在资源编辑的时候选中按钮的 Owner draw 属性,不需要选择 Bitmap 属性.
按钮右键–>Styles–>Owner draw

2、在程序中定义一个CBitmapButton成员变量。
注意:不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,
这么做并不能将按钮直接映射为CBitmapButton类的对象,反而会出现初始化错误

3、使用CBitmapButton::LoadBitmaps装载各种状态的图片,
使用CBitmapButton::SubclassDlgItem关联到想要的按钮,
使用CBitmapButton::SizeToContent函数使按钮适合图片大小。
注意Loadbitmaps一定要在关联到按钮之前进行!

附:添加资源Bitmap的方法:Insert菜单–>Resource –>Resource type:Bitmap–>Import, 
之后选择所需的图片就可以了

方法一的例子:
首先,选中按钮的owner Draw属性,在资源中加载两副*.bmp格式的位图,
然后在对话框类中加入:

CBitmapButton m_btnX1;//必须放在函数外面才能正常实现 BOOL CXXXXXXX::OnInitDialog() { CDialog::OnInitDialog(); m_btnX1.LoadBitmaps(IDB_XXXX_UP,IDB_XXXX_DOWN);//这里是两副位图,鼠标按下和弹起,                                                //  也可以只加一个ID资源; m_btnX1.SubclassDlgItem(IDC_DASEN_X1,this); m_btnX1.SizeToContent(); }

方法二:使用CBitmapButton::AutoLoad函数关联到想要的按钮
需要注意:
A、使用CBitmapButton::AutoLoad函数之前不能使用CBitmapButton::LoadBitmaps装载
各种状态的图片,否则会出错。
B、AutoLoad函数完成关联和改变按钮大小的功能。类似于上面CBitmapButton::SubclassDlgItem
和CBitmapButton::SizeToContent函数的功能。
C、CBitmapButton::AutoLoad使用的位图是默认资源ID的,即它会自动装载相关资源位图。
位图的资源ID格式为:
“按钮Caption+U”、”按钮Caption+D”、”按钮Caption+F”、”按钮Caption+X”,
分别代表Up、Down、Focus、Disable状态。
如资源编辑时,希望关联的按钮的Caption为Test,
那么其默认装载的位图资源的ID为:”TestU”/”TestD”/”TestF”/”TestX”,
注意分号””也是其ID的一部分。
方法二例子:
首先,选中Caption为:”myBitmapButton”按钮的owner Draw属性
其次,添加两个位图资源,并修改其ID分别为:”myBitmapButtonU”和”myBitmapButtonD”,这里只添加两个位图
然后在对话框类中加入:

CBitmapButton m_btnX1;//必须放在函数外面才能正常实现  BOOL CXXXXXXX::OnInitDialog()  {  CDialog::OnInitDialog();    m_btnX1.AutoLoad(IDC_BUTTON1,this);//ID为IDC_BUTTON1的按钮的Caption为:myBitmapButton  }

至此两种方法就都结束了。

原文地址:http://yq1518602434.blog.163.com/blog/static/202937084201252011141376/

转载于:https://my.oschina.net/leixiaohua1020/blog/302278

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/109752.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • android bindservice方法,Android bindservice方法返回false

    android bindservice方法,Android bindservice方法返回false我想从另一个类(BaseExpandableListAdapter)的活动中调用一个方法。活动中的方法启动服务并调用bindService(,,)方法。但是,bindService方法总是返回false。我查了其他类似的帖子,但没有一个解决了我的问题。任何评论非常感谢。Androidbindservice方法返回false这里是BaseExpendableListAdapter类中,我调用该方法…

  • waf(web安全防火墙)主要功能点

    waf(web安全防火墙)主要功能点注入攻击SQL注入防护:阻止恶意SQL代码在网站服务器上执行。命令注入防护:阻止攻击者利用网站漏洞直接执行系统命令。XPATH注入防护:阻止攻击者构造恶意输入数据,形成XML文件实施注入。LDAP注入防护:阻止攻击者将网站输入的参数引入LDAP查询实施注入。SSI注入防护:阻止攻击者将SSI命令在服务端执行,主要发生在.shtml,.shtm,.stm文件。缓冲区溢出防护:阻止请求中填入超过缓冲区容量的数据,防止恶意代码被执行。HPP攻击防护:阻止攻击者利用HPP漏洞来发起注入…

  • iOS layoutSubviews 调用[通俗易懂]

    iOS layoutSubviews 调用[通俗易懂]在初始化时,使用init和-(instancetype)initWithFrame:(CGRect)frame,但是,在调用时是有系统区分的,iOS11.0以下,调用init和-(instancetype)initWithFrame:(CGRect)frame当frame为CGRectZero是不会调用的, 在调用addSubView时,这个跟添加的subView尺寸大小没有关系。 改变…

  • Thread之ParameterizedThreadStart

    Thread之ParameterizedThreadStartTreadStart委托仅仅指向无参数且无返回值的方法。如果新线程上运行带参数的方法,那么需要用到ParameterizedThreadStart委托,ParameterizedThreadStart定义:publicdelegatevoidParameterizedThreadStart(objectobj);一:要求只能有一个参数,且为object类型二:无返回值T…

  • docker加载配置文件重启服务导致pod重启

    docker加载配置文件重启服务导致pod重启

  • 数据库课程设计-职工工资管理系统

    数据库课程设计-职工工资管理系统XXX大学《数据库原理及应用课程设计》设计报告…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号