MFC 位图 按钮

MFC 图片按钮的实现 1.CBitmapButton 方式实现 在MFC工具栏,添加按钮到界面,然后会修改按钮的属性,设置Owner draw为true; CBitmapButton只用于添加bmp位图,其他图片会有一些兼容性问题,不会显示出来。具体原因没有深究,有空可自行深入学习。 LoadBitmaps加载状态图片,注意顺序为Up,Down,Focused,Disabled。并且添加的位图id后缀必须也是对应 Up,Down,Focused,Disabled,方便LoadBitmaps导入,否则可能因此抛出异常。 这 阅读详情

1.可新建一个类ImageButton(继承自CButton),并设置其风格为自绘: ModifyStyle(0,BS_OWNERDRAW);
ImageButton.h:
class ImageButton : public CButton
{
private:
 
public:
 ImageButton();

 // ClassWizard generated virtual function overrides
 //{{AFX_VIRTUAL(ImageButton)
 protected:
 virtual void PreSubclassWindow();//修改其风格属性
 //}}AFX_VIRTUAL

// Implementation
public:
 void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);//绘图
 
 virtual ~ImageButton(); 
 DECLARE_MESSAGE_MAP() 
};
2.ImageButton.cpp:
#include "ImageButton.h"

ImageButton::ImageButton()
{
 
}
ImageButton::~ImageButton()
{
}

//当主框架的OnDraw调用后,此按钮会自动更新显示(一直循环)
void ImageButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{

  CClientDC   dc(this);  
  HBITMAP   hBitmap;    //位图句柄
  hBitmap=(HBITMAP)LoadImage(
              ::AfxGetInstanceHandle(),_T("ok.bmp"),  
              IMAGE_BITMAP,0,0,  
              LR_LOADFROMFILE|LR_CREATEDIBSECTION);  
  ASSERT(hBitmap);  
  HBITMAP   hOldBitmap;    
  CDC   memDC;  
  memDC.CreateCompatibleDC(&dc);  
  hOldBitmap  =  (HBITMAP)memDC.SelectObject(/*&bmpDraw*/hBitmap);   //添加新的句柄
  dc.BitBlt(0,0,100,40,&memDC,0,0,SRCCOPY);//将缓存DC放入实际客户DC  

  //显示文字
  CString text(_T("FUCK"));
  CRect rect( 0, 0, 100,100);
 
  dc.DrawText(text,rect,DT_LEFT|DT_SINGLELINE|DT_VCENTER);

  memDC.SelectObject(hOldBitmap);  //恢复句柄

 
}

void ImageButton::PreSubclassWindow()
{
 // TODO: Add your specialized code here and/or call the base class 
 CButton::PreSubclassWindow();
 ModifyStyle(0,BS_OWNERDRAW);//注意,此句一定要,这样才能设置按钮为自绘,否则不有显示

图片
}

此后有两种方法调用:一是纯代码,二是通过按钮控件.
一.在对话框DLGDlg.h中添加上面ImageButton类的对象:
在class CDLGDlg : public CDialog
{
 ImageButton m_btnImg;
}
在DLGDlg.cpp加入:
#define   IDC_MYBUTTON   1010 //先定义一个资源号,以便和按钮绑定

BEGIN_MESSAGE_MAP(CDLGDlg, CDialog)
 ON_BN_CLICKED(IDC_MYBUTTON, CDLGDlg::OnBnClickedOk) //资源号与函数事件绑定
END_MESSAGE_MAP()

在的BOOL CDLGDlg::OnInitDialog()里加入
//通过代码创建按钮
 m_btnImg.Create(_T   ( "Title   "),  

WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_BITMAP/*|BS_ICON*/   ,CRect

(0,0,100,124),this,IDC_MYBUTTON); //与资源号IDC_MYBUTTON绑定,在前面资源号已与函数事件绑定

二.拖一个按钮控件,设置其[属性]中的[owner draw]为true,设置其ID号为IDC_BUTTON1.
 在对话框DLGDlg.h中添加上面ImageButton类的对象:
在class CDLGDlg : public CDialog
{
 ImageButton m_btnImg;
}
在DLGDlg.cpp中:
将按钮与按钮变量关联:
 DDX_Control(pDX, IDC_BUTTON1, m_button1);

BEGIN_MESSAGE_MAP(CDLGDlg, CDialog)
 ON_BN_CLICKED(IDC_BUTTON1, CDLGDlg::OnBnClickedOk) //资源号与函数事件绑定
END_MESSAGE_MAP()

上面两者区别:用纯代码,要自己定义资源号(IDC_MYBUTTON),并显示创建按钮(Create函数).而用按钮控

件时,要拖放按钮,设置其属性[owner draw]为true,再将其ID与变量绑定,并与事件绑定.

MFC 位图按钮CBitmapButton 实现不同状态显示不同位图 MFC 位图按钮CBitmapButton 实现不同状态显示不同位图   步骤如下: 1.  在对话框上拖放一个按钮(CButton)控件,设置ID(如:IDC_BUTTON5); 2.  在对话框类添加成员变量(CBitmapButton类对象):    CBitmapButton  m_button; 3.  在初始化函数 OnInitDialog() 中调用 SubclassDl 阅读详情

相关推荐

MFC自绘按钮及位图背景实现源代码解析

在Microsoft Foundation Classes (MFC)中,标准按钮控件提供了基本的图形用户界面功能,但在某些情况下,我们需要实现更具有个性化的按钮样式。自定义按钮绘制允许开发者按照需求设计按钮的外观和行为,包括改变按钮的形状、添加自定义图标、自定义鼠标悬停和点击效果等。在Windows应用程序中,字体颜色是对话框、按钮和各种控件中显示文本时非常重要的属性。字体颜色由RGB颜色模式定义,每个颜色通道(红、绿、蓝)都有一个从0到255的值。

weixin_42609225的博客 1182

ImageButton去边框的问题

在ImageButton中载入图片,图片周围的白边会影响到图片的美观,解决的办法如下: 方法1.将ImageButton的背景改为所需要的图片    在XML里设置:      android:background="@drawble/xx" 方法2.将ImageButton背景改为透明    在XML里设置:                       

zhang106209的博客 2748

MFC 图标和文本共存的按钮

创建CButton类的派生类CImageButton从而在普通按钮上实现图标和文本共存的效果

MFC的PNG图片按钮

MFC的PNG图片按钮 #pragma once #include "afxwin.h" ///////////////////////////////////////////////////////////////////// // 工程: YF_GCM -> ButtonDemo // 作者: ** // 描述: 自绘制位图按钮 // 主要函数: // Set...

5474

MFC单文档控件自绘之图像按钮(CImageButton)

在MFC中,无句柄控件自绘之图像按钮,绘制图像按钮

用FSL的eddy_topup pipeline完整处理DTI数据:从原理到实战,搞定涡流和磁化率畸变

本文详细介绍了如何使用FSL的eddy_topup pipeline完整处理DTI数据,解决涡流和磁化率畸变问题。从原理到实战,涵盖了数据格式转换、脑提取、b0图像处理等关键步骤,并提供了acqparams.txt配置和eddy命令的详细解析,帮助研究人员高效完成DTI数据校正。

weixin_29235525的博客 283

MFC ICO 左上角添加图标 按钮上同时添加图标和文字

整理贴 : 本文结尾提供的代码希望大家共同维护

u010039305的博客 1869

最优控制理论 二+、哈密尔顿函数法的补充

本章基于变分法所推出的哈密尔顿函数法,2、讨论了积分方程约束的转化、控制+状态等式约束的一阶必要条件。3、控制分段连续、状态存在内点约束等情况下的角点条件,给出了协态变量和哈密尔顿函数在内点处不连续的表达式。...

MSysの优快云 9395

MFC中位图按钮

<br />首先,我们创建一个基于对话框的应用程序CmyDialog ; <br /> Ι.MFC的CBitmapButton类,这也是最简单的功能最强的位图按钮。我们可以采取如下的步骤: <br /> 需定义CBitmapButton 对象与CButton一一对应. <br /><br /> 1. 在创建按钮资源IDC_BUTTON时选择 owner draw (自己画); <br /> 2. 在对话框.h文件内定义位图按钮对象 CBitma

backbin的专栏 4533

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解)

本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。

weixin_27032989的博客 567

别再傻傻用外部中断了!STM32H743定时器编码器模式4倍频测速保姆级配置(附CubeMX+HAL库代码)

本文详细介绍了STM32H743定时器编码器模式的4倍频测速配置方法,通过CubeMX和HAL库实现高效脉冲计数。相比传统外部中断方案,硬件编码器模式显著降低CPU占用率,提升测速精度,适用于电机控制和运动检测等高要求场景。

weixin_33711647的博客 403

MFC制作位图按钮

MFC制作位图按钮 前序 学习过MFC的读者应该都知道MFC自带的控件是相当丑陋的,我曾在自带按钮的基础上做了一些美化可总会遇到挺多问题,当然也是技术不过关的表现,我在原本的按钮上添加图标后,觉得按钮样式太丑了,想给MFC使用皮肤样式,但这时却出现了各种不兼容问题(图片显示不了了),之后我也没细细研究了。后来想着还是制作自己的按钮比较好看点,最近在看一个开源项目的时候发现了项目里面的按钮是...

佛系程序猿 8597

CAD二次开发(C#版):从零搭建开发环境与核心DLL引用指南

本文详细介绍了使用C#进行CAD二次开发的环境搭建与核心DLL引用指南,涵盖Visual Studio配置、AutoCAD插件项目创建、DLL引用技巧及调试方法。通过实战示例和常见问题排查,帮助开发者快速掌握CAD二次开发的核心技术,提升开发效率。

weixin_28837817的博客 729

MFC添加位图按钮,MFC添加图标按钮

1、建立MFC下的基于对话框的应用程序; 2、在对话框上添加按钮,并把按钮属性中Bitmap设置为true;(即位图打钩) 3、在对话框类(CXXXDlg)中添加按钮变量,即建立类向导中的memery variables(本例中为m_BtonBmp); 4、新建或者导入bmp文件,明确该文件的ID; 5、在对话框的初始化(OnInitDialog)中设置按钮的显示,如下

wangqing_19900504的专栏 1448

告别盲打:为NXOpen Python API生成智能代码提示的完整指南

本文提供了一份为NXOpen Python API生成智能代码提示的完整指南。通过配置匹配的Python环境、利用类型存根文件生成工具创建.pyi文件,并在PyCharm或VSCode中正确配置,开发者可以彻底告别“盲打”,获得精准的代码补全和参数提示,从而大幅提升NX二次开发的效率和体验。

weixin_29057695的博客 371

YOLOv8 交通流量监测详解

本文介绍了一个基于YOLOv8的交通流量监测系统,该系统通过深度学习技术实现车辆实时检测、跟踪和分类。系统核心功能包括:1)使用YOLOv8模型检测道路车辆并进行持续跟踪;2)按方向和车型统计车流量;3)支持多区域流量监测和数据可视化。文章提供了完整的代码实现示例,涵盖基础车辆检测、视频流处理和高级数据分析功能。系统还可进一步优化性能,如使用轻量级模型、GPU加速等,并建议扩展车速估算、密度分析等功能。该方案为交通管理提供了有效的实时监测和决策支持工具。

u010117029的博客 346

MFC中位图和位图按钮的方法

VC 背景填充位图的几种方法 IDB_BG 是位图资源的ID 方法一 OnEraseBkgnd(CDC* pDC)  {  // 设置画刷为希望的背景  CDC backBmp;                 backBmp.CreateCompatibleDC(pDC);  CBitmap bitmap;  bitmap.LoadBitmap(IDB_BG);  CBrus

QiuRongXing的专栏 1570

CRC_16---ModBus 计算方法及代码实现

1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器

1万+

MFC位图按钮

语言: VC++, IDE: VS2017 1.拖拽一个按钮,默认ID“IDC_BUTTON1”,将其属性中的Bitmap修改为“True”,假设位图资源的ID为“IDB_BT_BITMAP”, 2.在代码中加载位图,并设置为按钮位图(通常作为初始化,可以加在对话框OnInitDialog函数中添加) CBitmap bitmap; HBITMAP hbmp; bitmap.LoadBitmap...

weixin_43694353的博客 997

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MFC/VC++中怎样设置位图按钮并且位图不会覆盖文字——–位图按钮

1:第一次尝试 设置 IDC_BUTTON3按钮风格的bitmap为true 在OnInitialDilog中: CButton* cbpTest = NULL; HINSTANCE hInstance=AfxGetResourceHandle(); HBITMAP m_hBmp4=(HBITMAP)LoadImage(hInstance, MAKEINTRESOURC...

u011555996的博客 1078

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MFC中位图按钮的实现方法:

MFC中位图按钮的实现方法:( 位图必须用.bmp 格式的) 首先,我们创建一个基于对话框的应用程序CmyDialog ;  Ι.MFC的CBitmapButton类,这也是最简单的功能最强的位图按钮。我们可以采取如下的步骤:  需定义CBitmapButton 对象与CButton一一对应.  1. 在创建按钮资源IDC_BUTTON时选择 owner draw (自己画);

Dreamershi的专栏 3161

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

MFC 如何添加位图按钮

一、位图按钮 1、建立MFC下的基于对话框的应用程序; 2、在对话框上添加按钮,并把按钮属性中Bitmap设置为true; 3、在对话框类(CXXXDlg)中添加按钮变量(本例中为m_BtonBmp); 4、新建或者导入bmp文件,明确该文件的ID; 5、在对话框的初始化(OnInitDialog)中设置按钮的显示,如下 hInstance   =   ::AfxGetInstance

u010679895的专栏 1289

MFC添加位图按钮

MFC基于对话框的按钮看着不够别致,要想使按钮更漂亮,在按钮上添加为位图是个不错的选择。   位图按钮 1.  建立MFC下的基于对话框的应用程序 2.  在对话框上添加按钮,并把按钮属性中Bitmap设置为true; 3.  在对话框类(CxxxDlg)中添加按钮变量(本例为m_BtonBmp); 4.  新建或者导入bmp文件,明确该文件的ID; 5.  在对话框的初始化(OnI

csd1208的专栏 1216

MFC/VC++中怎样设置位图按钮并且位图不会覆盖文字--------位图按钮

1:第一次尝试 设置    IDC_BUTTON3按钮风格的bitmap为true 在OnInitialDilog中: CButton* cbpTest = NULL;     HINSTANCE hInstance=AfxGetResourceHandle(); HBITMAP    m_hBmp4=(HBITMAP)LoadImage(hInstance, MAKEINTRE

zhangyulin54321的专栏 7009

MFC 为按钮加载位图 CBitmapButton

系统环境:Windows 7 软件环境:Visual C++ 2008 SP1 本次目的:使用位图按钮,并且设置按钮的鼠标悬停效果       在用MFC开发时,界面是比较不好开发的一块。VC中自带了CBitmapButton类,但是用途不多,网上很多Button类的派生类蛮实用的,但是若是简单的位图按钮用自带的CBitmapButton就可以实现了,以下是效果图: 步骤一

u013050589的专栏 7185

MFC中位图按钮的实现方法:( 位图必须用.bmp 格式的)

MFC中位图按钮的实现方法:( 位图必须用.bmp 格式的) 首先,我们创建一个基于对话框的应用程序CmyDialog ; Ι.MFC的CBitmapButton类,这也是最简单的功能最强的位图按钮。我们可以采取如下的步骤: 需定义CBitmapButton 对象与CButton一一对应. 1. 在

seven407的专栏 3503
上一篇: OSG安装
下一篇: MFC MDI 全屏
tmljs1988
博客等级 码龄19年 134粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值