1.CBitmapButton 方式实现

在MFC工具栏,添加按钮到界面,然后会修改按钮的属性,设置Owner draw为true;

CBitmapButton只用于添加bmp位图,其他图片会有一些兼容性问题,不会显示出来。具体原因没有深究,有空可自行深入学习。

LoadBitmaps加载状态图片,注意顺序为Up,Down,Focused,Disabled。并且添加的位图id后缀必须也是对应 Up,Down,Focused,Disabled,方便LoadBitmaps导入,否则可能因此抛出异常。

这边使用 SubclassDlgItem 将 CBitmapButton 变量 m_bitmapbtn 绑定按钮ID。也可以通过在MFC操作界面,对按钮鼠标右键添加变量,并将变量类型将CButton修改为他的派生类CBitmapButton。

最后在对话框的OnInitDialog函数中添加如下代码,就可以实现图片按钮。

    m_bitmapbtn.SubclassDlgItem(IDC_BTN_BMP, this);  //CbitmapButton 变量绑定按钮
​​​​​​​    m_bitmapbtn.LoadBitmaps(IDB_BITMAP_DOWN, IDB_BITMAP_UP);//为变量按钮添加bmp图片,LoadBitmaps加载状态图片,注意顺序为Up,Down,Focused,Disabled。m_bitmapbtn.SizeToContent(); // 设置按钮适应图片大小

2.GDI+ 方式实现

这边使用了MFC Button 控件,属性设置,image type 设置为无,transparent设置为true(是否透明)

首先先添加对应的头文件和库到工程中,

#include <gdiplus.h>
#pragma comment(lib, "gdiplus.lib")
using namespace Gdiplus;
#define ULONG_PTR ULONG

其次在对话框的OnInitDialog函数中添加如下代码,就可以实现图片按钮。

 // GDI+ 重绘,实现图片按钮// 绑定控件变量m_pMfcButton = (CMFCButton *)GetDlgItem(IDC_MFCBTN1);m_pMfcButton->SetFaceColor(RGB(0, 0, 0), true); // 设置背景色// 初始化GDI+ULONG_PTR gdiplus_token = 0;Gdiplus::GdiplusStartupInput StartupInput;GdiplusStartup(&gdiplus_token, &StartupInput, NULL);// 读取图片Gdiplus::Bitmap *bmBtn = Gdiplus::Bitmap::FromFile(L"res/a1.png");Gdiplus::Bitmap *bmBtn2 = Gdiplus::Bitmap::FromFile(L"res/a2.png"); HBITMAP hBmp, hBmpHot;bmBtn->GetHBITMAP(NULL, &hBmp);bmBtn2->GetHBITMAP(NULL, &hBmpHot);m_pMfcButton->SetImage(hBmp, TRUE, hBmpHot);m_pMfcButton->m_bTransparent = TRUE;    // 设置按钮为透明的m_pMfcButton->SizeToContent();// 去初始化//Gdiplus::GdiplusShutdown(gdiplus_token);

3.CButtonST 方式实现

使用CButtonST时需要注意这个异常,也可能是我下载的版本有问题。因为Button控件,需要重绘,当按钮的属性设置Owner draw为true时程序会抛异常,所以我这边做了适当修改。

CButtonST和CBitmapButton有点类似,都是继承CButton做了新的封装,话不多说,直接上代码。

 m_btnST.SetBitmaps(::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP_DOWN)), RGB(0xFF, 0x00, 0xFF));//为变量按钮添加bmp图片//m_btnST.SetIcon(IDR_MAINFRAME);           //为变量按钮添加ico图片           m_btnST.SetFlat(FALSE);                                //设置为平面按钮m_btnST.SizeToContent();

最后,由于自己水平限制,也没有太多时间深究MFC这种比较古老的东西,在试了以上三种方式,效果都不是很理想,最后还是换成qt了项目。在这边也做了简单的整理希望给有用到这部分的人提供一些参考。

最后也给了整理上传的demo路径,1积分,可自行下载学习或留言(可能会很久很久以后才看到评论)。不喜勿碰,请略过。

下载地址:https://download.csdn.net/download/hallyz945/12803422

MFC 图片按钮的实现相关推荐

  1. MFC的PNG图片按钮

    MFC的PNG图片按钮 | 火苗999℃的博客 pngbutton.h #pragma once #include "afxwin.h"/ // 工程: YF_GCM -> ...

  2. MFC之按钮添加图标

    MFC之按钮添加图标 一.在资源编辑器中添加一个按钮,把它的Bitmap属性设为true 二.在按钮上点右键,添加一个变量m_Btn(CButton类型的) 三.将图片导入到资源管理器中,ID为IDB ...

  3. 自己写一个图片按钮(XAML)

    有时需要用三张图片(正常状态,鼠标移上,鼠标按下)来作为一个按钮的样式,虽然这种做法不好,应该用矢量的方式制作样式,但有的时候还是需要这样做的. 每次都修改按钮的样式来实现这个做法,既麻烦又会生成大段 ...

  4. 图片按钮ImageButton

    //按钮上放图片,图片按钮JButton enterButton = new JButton("");//由.png图片获得URL对象URL url = getClass().ge ...

  5. js layui跳转页面_layui自己添加图片按钮并点击跳转页面的例子

    1.按钮样式 2.定义按钮 layui.use('table', function(){ var table = layui.table; table.render({ elem: '#test' , ...

  6. 漂亮的自适应宽度的多色彩CSS图片按钮

    一.素材               二.效果 三.CSS *{padding:0;margin:0}/*----------------------------------- 自适应宽度图片按钮 - ...

  7. [安卓] 2、使用2中方法做按钮监听和图片按钮使用

      第一种方法是使用点击监听器来实现(代码中注释掉的部分):这种方法要在初始化的函数中将按钮绑定在点击监听器上(23,24)btn_ok.setOnClickListener(this);.然后处理统 ...

  8. 界面组件——按钮(Button)与图片按钮(ImageButton)

    介绍 用例 介绍 Button继承了TextView,同时还是ImageButton的父类. Button.ImageButton的功能主要是在UI界面上生成一个按钮,该按钮可以供用户单击,当用户单击 ...

  9. 2.Button按钮实例:普通按钮和图片按钮

    目标效果:   在这个程序中,将实现两个按钮:普通按钮和图片按钮,当用户点击不同的按钮时,在其下方的文本框中显示点击的次数.        布局实现: <LinearLayout xmlns:a ...

最新文章

  1. linux模拟器 cygwin源
  2. 华为昇腾AI全栈知识深入解读,师资培训沙龙深圳场圆满落幕!
  3. 给Jquery easyui 的datagrid 每行增加操作链接(转载)
  4. 需求分析的定义(转)
  5. wxWidgets:wxDir类用法
  6. @FeignClient注解 中属性 contextId使用
  7. 两台服务器数据库怎么自动同步数据库,mysql 多台数据库同步server-id 重复导致的问题...
  8. 【剑指 offer】—— 浮点数的相等性判断
  9. Aspose.Excel模板输出中名称管理器的使用
  10. 《数据挖掘概念与技术》第二版 中文版 第二章答案
  11. android canvas 教程,Android Canvas drawLine
  12. Python 打造最强表白程序(源码)
  13. MFC程序版本自动升级更新
  14. 企业微信开发(1)——整体说明
  15. 怎么用java打开pkg文件怎么打开,pkg文件怎么打开 【处置方式】
  16. ubuntu 串口调试助手
  17. visual basic与python_学visual basic还是 python?
  18. 【CRH】列车通过曲线时,曲线半径、超高值与车速的关系
  19. Shell实例:for循环语句实现求奇数和与偶数和——实验+解析,超详细!!!
  20. Uniapp 应用消息通知插件 Ba-Notify

热门文章

  1. 爬虫入门—requests模块基础之药监企业信息爬取
  2. 计算机无法正确抓取硬盘信息,获取硬盘信息失败?2招轻松解决,u盘装系统就这么简单!...
  3. 信息系统项目管理师(2022年)—— 重点内容:知识管理(15)
  4. CentOS系统中安装QQ2012
  5. 股票的阿尔法收益和贝塔收益
  6. 外推内插法c语言程序,[原创]如何进行内插法和外推法的计算
  7. tilemap 菱形_45度斜角地图菱形坐标转换
  8. HTML怎么做成多彩背景,纯html+div+css模拟酷炫彩色渲染背景
  9. DolphinScheduler安装与使用
  10. Pycharm的project interpreter