用picture控件贴图的方法讨论

【MFC开发(12)】图片框控件 Picture Control 1.显示一个BMP图片到窗口上 开始你得有一个BMP图片的资源,找到图片之后导入到项目资源中 首先需要新建一个图片控件,直接拖拽到想放置的位置即可 然后在Picture控件的Type属性下拉框中选择Bitmap; 在Picture控件的Image属性下拉框中选择BMP资源ID为IDC_BITMAP1即可。 Type属性下拉列表中有8种类型,下面分别介绍下: Frame:显示一个无填充的矩形框,边框颜色可以通过Color属性的下拉列表设定 Etched Hor... 阅读详情

在前面的文章中曾提到过用picture控件贴图的方法,但对于用同一个picture控件贴不同的图没有提及,这里说一下我最近学习到的方法。


这里有一点需要注意的就是在贴第二幅图片之前要分离位图类对象与前一个位图资源的联系,具体代码如下:

CBitmap bitmap;
bitmap.LoadBitmap(IDB_BIT1);
(CStatic*)GetDlgItem(IDC_PIC)->SetBitmap(HBITMAP(bitmap));
//显示第二幅位图
bitmap.detach();
bitmap.LoadBitmap(IDB_BIT2);
(CStatic*)GetDlgItem(IDC_PIC)->SetBitmap(HBITMAP(bitmap));

这个程序主要是利用了detach函数分离了bitmap与位图资源的联系,然后再重新加载位图。另外,setbitmap函数需要的参数为HBITMAP类型,所以用了HBITMAP运算符取得了CBitmap对象的位图资源句柄,但如果直接传递bitmap作为参数也能够成功。

但这个程序可能存在一个潜在的危险----内存泄露,因为我们使用了资源文件,虽然用了detach函数分离了位图对象与位图资源的关系,但并未删除位图资源,随着重复修改显示位图的次数增多,可能会导致能存泄露,由于我也是个VC新手,所以不知道怎么测试内存泄露。

然后,我根据自己的经验想出了另外一种方法,代码如下:

HBITMAP hbitmap1;
HBITMAP hbitmap2;
hbitmap1=(HBITMAP)::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC1));
hbitmap2=(HBITMAP)::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC2));
//显示第一幅位图((CStatic*)GetDlgItem(IDC_PIC1))->SetBitmap(hbitmap1);//显示第二幅位图((CStatic*)GetDlgItem(IDC_PIC1))->SetBitmap(hbitmap2);

最后要记住在窗口对象的析构函数或ondestroy函数释放资源空间,代码如下:
DeleteObject(hbitmap1);
DeleteObject(hbitmap2);

这个方法是我想出的一个解决方法,具体是否解决了内存泄露我现在还暂时没有能力验证。

这里需要说明一下,MAKEINTRESOURCE宏能够通过资源的ID号获取到资源的名字,由于::LoadBitmap函数的第二个参数为LPCSTR所以需要采用这个方法,这也是MSDN提供的方法。

注意,这里并没有利用CBitmap类,这是因为我觉得这样可以使程序简化,至于有什么缺点我还不得而知,还请知道的朋友告知!

当然,如果实在不放心也可以用CBitmap类,代码如下:

CBitmap bitmap;
HBITMAP hbitmap1;
HBITMAP hbitmap2;
hbitmap1=(HBITMAP)::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC1));
hbitmap2=(HBITMAP)::LoadBitmap(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_PIC2));
//显示第一幅位图
bitmap.Attach(hbitmap1);
((CStatic*)GetDlgItem(IDC_PIC1))->SetBitmap(HBITMAP(bitmap));
//显示第二幅位图
bitmap.Detach();
bitmap.Attach(hbitmap2);
((CStatic*)GetDlgItem(IDC_PIC1))->SetBitmap(HBITMAP(bitmap));

对于上述代码仍要需要自己释放资源。

同理,用上述方法也可以对picture控件进行icon图片的贴图,大致过程相同,但需要将图片控件的style属性改为icon,代码如下:

HICON hicon;
hicon=(HICON)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, 16, 16, 0);
((CStatic*)GetDlgItem(IDC_PIC))->ModifyStyle(0x0,SS_ICON|SS_CENTERIMAGE);
((CStatic*)GetDlgItem(IDC_PIC))->SetIcon(hicon);

这里用了LoadImage而没有用loadicon主要是因为要调整图片大小,我的图片资源文件时16*16的,但当图片控件的style属性为icon时,不能调整图片大小,最小好像是为32*32,所以采用了此函数调整图片大小。modifystyle函数的目的是使图片在控件中居中显示。











        
MFC之picture控件滚动条的实现 直接上主要代码啦 阅读详情

相关推荐

picture控件显示图片

可在VC++上使用picture控件类显示各种格式的图片,如BMP格式,JPG格式等

STM_SETIMAGE 消息或CStatic::SetBitmap(HBITMAP hBitmap)导致的GDI资源泄露

STM_SETIMAGE或CStatic::SetBitmap(HBITMAP hBitmap)返回的是先前的资源句柄,同时深拷贝一份当前的(参数传入的)资源句柄。 解决: win32 HBITMAP hOldBmp = (HBITMAP)::SendMessage(m_hWnd, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)hBitmap); if( NULL...

iMatt的专栏 761

PySide6多线程避坑大全:信号槽崩溃、内存泄漏,这些雷我都帮你踩过了

本文深入探讨了PySide6多线程开发中的常见问题与解决方案,包括信号槽崩溃、内存泄漏等典型陷阱。通过实战案例和优化策略,帮助开发者避免UI线程操作错误、有效管理资源生命周期,并提升跨线程通信的可靠性。特别针对PySide6多线程特性,提供了线程安全日志、死锁检测等实用调试技巧。

weixin_32288959的博客 396

VC在Picture控件下贴图

首先把ImageStatic.h和ImageStatic.cpp导入工程 再给对话框添加Picture控件和Group Box控件,分别添加变量m_pic和m_Frame; 注意::要m_pic类改为ImageStatic,m_Frame改为CStatic; 然后 把ShowJpgGif()拷到主程序中, /*      函数功能:显示JPG和GIF图片      参数说明:   p

无为小青年6的专栏 1092

ASF-YOLO:一种基于注意尺度序列融合的细胞实例分割YOLO模型

随着样本制备技术和显微成像技术的快速发展,细胞图像的定量处理和分析在医学、细胞生物学等领域发挥着重要作用。基于卷积神经网络(CNN),可以通过神经网络训练学习不同细胞图像的特征信息,具有很强的泛化性能。两阶段的R-CNN系列[1,2,3]及其一阶段变体[4,5]是实例分割任务的经典CNN基础框架。在最近的研究中,You Only Look Once(YOLO)系列[6,7,8,9]已经成为实时实例分割中速度最快、最准确的模型之一。

m0_47867638的博客 9804

浅谈MOS管的发热原因和解决办法

解读一下开关管发热原因,解决方案和开关损耗测试。

qq_45508321的博客 1万+

MFC中Picture控件的使用

Picture Control 图片控件 Slider Control 滑块控件 Progress Control 进度条控件 示例 第一步,在VS2019新建一个MFC项目; 第二步,打开资源视图,双击打开窗口,在工具栏中选择Picture Control控件,拖放到窗口上; 第三步,修改Picture Control控件的类型为Bitmap 第五步,点击资源文件,右键添加->添加资源,选择Bitmap,导入帧图(一组连续的bmp图片) 第六步,设置Picture控件属性中的图像为第一张帧

sanqiuai的博客 4917

AI智能体在化学中的伦理问题:7个案例,架构师如何应对?

AI在化学中的应用早已不是新鲜事:药物发现中用AI预测分子活性(比如AlphaFold预测蛋白质结构)、化工生产中用AI优化合成路线(降低成本30%+)、材料研发中用AI设计新型电池材料(缩短研发周期5年)……但随着AI从“辅助工具”升级为“自主决策智能体”(比如能自动调整反应条件的“化学机器人”),伦理风险开始从“潜在隐患”变成“真实事故”。AI在化学中会踩哪些伦理“坑”?(用案例具象化)这些“坑”的底层逻辑是什么?(从技术到价值观的链条)架构师能做什么?

AI 算法实战派 1363

mfc入门基础(十三)Picture Control控件

mfc学习

Littlehero_121的博客 2861

雨雾天YOLOv8检测拉胯?暗通道去雾+上下文注意力双优化,mAP从58%飙到79%,暴雨也能看清车牌

室外交通监控:高速、省道的雨雾天检测,重点解决小车、货车漏检;车载ADAS系统:雨天行车时的前方车辆、行人识别,需实时性(<40ms);隧道出入口:明暗交界+雾天的复杂场景,暗通道能平衡亮度。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1380

FlexSim:FlexSim软件介绍与安装

在开始安装FlexSim之前,首先需要从FlexSim官方网站下载安装包。FlexSim提供不同版本的软件,包括教育版、专业版等,确保选择适合您需求的版本。下载页面通常会列出系统要求,包括操作系统、处理器、内存和硬盘空间,确保您的计算机满足这些要求。访问FlexSim官方网站。导航至下载页面。选择适合您需求的FlexSim版本。点击下载按钮,开始下载安装包。在开始构建模型之前,首先需要明确模型的目标。模型目标是指导模型设计和分析的核心,它定义了你希望通过模型解决的问题或探索的系统行为。

kkchenjj的博客 5806

MFC 控件贴图方法汇总

在MFC的button控件上动态贴图: 1、在资源管理器中添加一个button控件,该控件的ID为IDC_BUTTON1。 2、在button的属性中,将其中的Owner Draw设置为TRUE。(设置为用户自绘控件)。 3、在该对话框的代码中的头文件中添加CBitmapButton 类对象 m_BitmapButton。 4、在窗口的初始化函数中,为该类的对象添加图片,m

keep thinking的专栏 6436

基于ESP32的智能健康监测系统开发

本文介绍了如何基于ESP32开发智能健康监测系统,从硬件选型、系统架构到软件实现的每一个环节。通过ESP32的Wi-Fi功能、传感器模块和云平台的结合,我们实现了实时健康数据监测、远程查看、报警等功能。系统的低功耗特性使得其适用于长期健康监测,能够为用户提供更便捷的健康管理方案。随着技术的不断发展,未来智能健康监测系统将进一步发展。例如,增加更多的传感器,提升数据分析能力,甚至通过人工智能算法来预测用户的健康趋势,为用户提供个性化的健康建议。

2201_76125393的博客 1105

VC 贴图方法总结

(一)非动态载入图片.方法1.先从最简单的开始,用picture 控件来实现.步骤:先在资源里Import一张图片,ID为IDB_BITMAP2然后在对话框上添加一个picture控件,右键点击打开属性,将type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框,拉开就会看到所有已经载入好的图片,选择你要的图片.运行程序即可看到.方法2.通过背景图同样如上,先载入一张图片,ID为IDB

liyonghust的专栏 9751

基于Python的MOOC课程评价爬取与分析系统设计与实现

本文详细介绍了如何使用Python最新技术栈构建一个高效的MOOC课程评价爬取与分析系统。系统采用Scrapy框架结合Selenium实现动态页面抓取,利用PyMySQL进行数据存储,并通过Pandas和Matplotlib实现数据可视化分析。文章从爬虫原理、技术选型、系统设计到代码实现进行全面讲解,为教育工作者改进教学质量提供数据支持。关键词:Python爬虫、MOOC评价分析、Scrapy框架、数据可视化、教学改进。

2201_76125261的博客 1103

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

OpenCasCade在一个窗体中的两个picture控件中 分别显示

经常使用的方式是直接在一个窗口或者一个picture控件中显示OCC的绘制图元,如果要想在一个窗口中显示多个picture控件,并且每个绘制控件互不影响,该如何实现。 通过简单地测试,结合OCC官方参考资料,得出以下方法: 在OCC环境初始化的时候 V3d_Viewer 类的对象初始化个数可以初始化多个,每个绑定一个picture控件即可,至于其它鼠标操作,注意区分各个显示控件位置即可区分...

积累点滴,保持自我 1075

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

对话框贴图方法

(一)非动态载入图片. 方法1.先从最简单的开始,用picture 控件来实现.步骤:先在资源里Import一张图片,ID为IDB_BITMAP2然后在对话框上添加一个picture控件,右键点击打开属性,将type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框,拉开就会看到所有已经载入好的图片,选择你要的图片.运行程序即可看到. 方法2.通过

Rachel Zhang的专栏 3003

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

MFC-图片控件picture control

一、建立项目,插入对话框,插入pictrue control控件。二、更改ID三、在需要的地方加入功能代码 CRect rect; m_pic.GetClientRect(&amp;rect); CImage img1,img2; img1.Load("res\\绿色按钮.png"); img2.Load("res\\灰色按钮.png"); CDC*pDC=m_...

yuan2424的博客 645

MFC对话框 picture控件添加位图,位图拉伸,适应picture

1.事先准备好位图。一定要位图。位图。 2.在对话框中添加picture控件,设置type为bitmap,将其ID改为IDC_STATIC1(不改不行)。然后为picture添加控制变量PT1。 3.在.cpp中找到onpaint()函数加入如下代码。 CDC dcMemory1; CBitmap wtj_bitmap1; BITMAP bmInfo1; CDC *pDC=PT1.G

。橙子(Chengs)的博客 3527

vs中picture控件与halcon关联

1、在xxxxxDlg.h头文件中找到DECLARE_MESSAGE_MAP(),在此后面定义三个成员变量public: Hobject m_Image; //图像 HTuple m_hWindowHandle; //显示图形窗口句柄 Hobject m_objDisp; //用于显示图形的对象2、在xxxxxDlg的初始化函数OnInitDialog()后面添加如下//picture控...

guo18638804495的博客 1154

MFC让Picture Control响应鼠标操作的方法

类的名称为CMyStatic,当然也可以取其他名称。

weixin_44676636的博客 411

VC Picture Control 图片点击事件

VC Picture Control 图片点击事件

dghggij的博客 1229

(一)MFC给背景框进行贴图操作

背景框贴图

qq_44830863的博客 196

CImage 往Picture Control贴图 图像显示不正常

在使用CImage 往vc控件 picture Control 上贴图的时候图像显示不太正常如图:   已知原始图片的宽高为640*640  而我上面picture Control  控件宽高小于原始图像宽高。 从网上找到原因是因为: 图像被缩小显示了。DRAW默认的压缩算法显示后就是这样! 在 CImage::Draw 前面加这2句就能正常显示图片了 //设置缩放模式 half...

weixin_33828101的博客 557

VC背景贴图

(一)非动态载入图片. 方法1.先从最简单的开始,用picture 控件来实现.步骤:先在资源里Import一张图片,ID为IDB_BITMAP2然后在对话框上添加一个picture控件,右键点击打开属性,将type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框,拉开就会看到所有已经载入好的图片,选择你要的图片.运行程序即可看到. 方法2.通过

xiaocai0807的专栏 688
上一篇: Opengl 基础知识汇总 方便查找
下一篇: Formview单文档或对话框项目接受不到按键消息的解决办法
longxiaoshi
博客等级 码龄15年 59粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值