Picture控件的加载图像的使用总结

2023-11-19

(一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID)
(二) 动态载入图片(即只需要在程序中指定图片的路径即可载入)

为方便说明,我们已经建好一个基于对话框的工程,名为Ttest,对话框类为CTestDlg

(一)vc picture控件非动态载入图片.

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

方法2.vc picture控件.通过背景图同样如上,先载入一张图片,ID为IDB_BITMAP2

TestDlg.h中
CBrush m_brBk;//在public中定义

TestDlg.cpp中
在初始化函数OnInitDialog()中加入:

BOOL CTestDlg::OnInitDialog()
{
   CDialog::OnInitDialog();
   CBitmap bmp;
   bmp.LoadBitmap(IDB_BITMAP2);
   m_brBk.CreatePatternBrush(&bmp);
   bmp.DeleteObject();
   return TRUE;   // return TRUE   unless you set the focus to a control
}
在打开类向导,找到WM_CTLCOLOR消息,重载得对应函数OnCtlColor(),添加如下:
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
   HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
   if (pWnd == this)
{
   return m_brBk;
}
   return hbr;
}

(二)vc picture控件动态载入图片.

方法3. 图像控件(本例用KoDak 图像编辑控件)
1.首先应该保证系统中有这个控件。注意,它不能单独使用,必须和其他几个控件(特别是Imgcmn.dll)一同使用。如果没有,从别的机器上copy过来即可。这几个文件是Imgadmin.ocx,Imgcmn.dll,Imgedit.ocx,Imgscan.ocx,Imgshl.dll,Imgthumb.ocx,Imgutil.dll,把它们copy到windows\system目录下,然后用regsvr32.exe将它们分别注册。
2.打开工程,进入资源管理器,在对话框上单击右键,单击Insert Activex control… 选择Kodak图象编辑控件,大小任意。
3.在对话框上选中该控件,为其添加变量:m_ctrlPicture。。
4.在BOOL CTestDlg::OnInitDialog()添加如下:

BOOL CTestDlg::OnInitDialog()
{
      CDialog::OnInitDialog();
      m_ctrlPicture.SetImage("aa.jpg");   //保证图像在工程目录下,也可以写绝对路径
      m_ctrlPicture.Display();
      return TRUE;   // return TRUE unless you set the focus to a control
                     // EXCEPTION: OCX Property Pages should return FALSE
}

编译运行就OK了,此种方法的好处就是可能针对多种图像格式.

方法4. vc picture控件通过CBitmap,HBITMAP,直接用OnPaint()绘制
首先在CTestDlg类中声明一个变量:   
     CBitmap   m_bmp;
然后我们在对话框中加入一个picture 标签,名为IDC_STATIC1,然后:

BOOL CDisplayPic::OnInitDialog()
{
     CDialog::OnInitDialog();
     if( m_bmp.m_hObject != NULL )//判断
         m_bmp.DeleteObject();
     //载入图片
     HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
         "c:\\aaa.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
     if( hbmp == NULL )
         return FALSE;
     //该断程序用来取得加载的BMP的信息//
     m_bmp.Attach( hbmp );
     DIBSECTION ds;
     BITMAPINFOHEADER &bminfo = ds.dsBmih;
     m_bmp.GetObject( sizeof(ds), &ds );
     int cx=bminfo.biWidth;   //得到图像宽度
     int cy=bminfo.biHeight; //得到图像高度
     /// 
     //得到了图像的宽度和高度后,我们就可以对图像大小进行适应,
     //即调整控件的大小,让它正好显示一张图片
     
     CRect rect;
     GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect);
     ScreenToClient(&rect);
     GetDlgItem(IDC_STATIC1)->MoveWindow(rect.left,rect.top,cx,cy,true);//调整大小
     return TRUE;   // return TRUE unless you set the focus to a control
                    // EXCEPTION: OCX Property Pages should return FALSE
}

图片加载成功了,标签大小也适应了,下面就是绘制绘制图像了,打开类向导,重载WM_PAINT消息

void CDisplayPic::OnPaint()
{
//以下三种情况任选一种会是不同效果(只能一种存在)///
     //CPaintDC dc(this);       //若用此句,得到的是对话框的DC,图片将被绘制在对话框上.
     CPaintDC dc(GetDlgItem(IDC_STATIC1)); //用此句,得到picture控件的DC,图像将被绘制在控件上 
     //CDC dc;
     //dc.m_hDC=::GetDC(NULL);   //若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上
///
     CRect rcclient;
     GetDlgItem(IDC_STATIC1)->GetClientRect(&rcclient);
     CDC memdc;
     memdc.CreateCompatibleDC(&dc);
     CBitmap bitmap;
     bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
     memdc.SelectObject( &bitmap );
     CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0);
     CDC maskdc;
     maskdc.CreateCompatibleDC(&dc);
     CBitmap maskbitmap;
     maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
     maskdc.SelectObject( &maskbitmap );
     maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,
         rcclient.left, rcclient.top, SRCCOPY);
     CBrush brush;
     brush.CreatePatternBrush(&m_bmp);
     dc.FillRect(rcclient, &brush); 
     dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
              &memdc, rcclient.left, rcclient.top,SRCPAINT);
     brush.DeleteObject();
     // Do not call CDialog::OnPaint() for painting messages
}

以上四种方法唯有KoDak可以支持多种图像,其它的只支持BMP

转载于:https://www.cnblogs.com/rogee/archive/2011/01/01/1923661.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Picture控件的加载图像的使用总结 的相关文章

  • 怎么解决“无法打开包括文件:“graphics.h”: No such file or directory”的问题

    在接手同伴的中国象棋项目时 导入项目后 发现VS一直提示 无法打开包括文件 graphics h No such file or directory 在查阅资料后发现是缺少easyx文件 接下来 就介绍一下手动配置一下easyx文件 eas
  • 特殊类型动归--区间动归与环形动归

    区间动归 某类有序事件中前若干个事件的子答案 不能再支撑状态转移 我们需要去寻找 从某个元素起到另一个元素结束所包含所有的 连续 元素的子答案 作为状态 可以想象 在这个描述下 每个状态会对应于原题序列上的一个区间 区间具有良好的性质 短的
  • 深度学习(1):BP神经网络实现银行客户流失预测

    目的 针对银行客户行为和统计数据实现客户流失预测任务 一 数据准备 1 数据集 select data csv 作为训练样本 数据预处理方式 归一化 数值化 CreditScore 信用分数 EB 存贷款情况 EstimatedSalary
  • centos 建立回收站

    linux下的回收站在每一个当前用户目录 local share Trash中 也可以给linux添加一个回收站 mkdir tmp trash tmp 建立一个回收站目录 vi bin trash 编辑一个文件 mv tmp trash
  • python之浅拷贝、深拷贝

    什么是浅拷贝 深拷贝 理论来自python基础教程 在 Python 中 对象赋值实际上是对象的引用 当创建一个对象 然后把它赋给另一个变量的时候 Python 并没有拷贝这个对象 而只是拷贝了这个对象的引用 我们称之为浅拷贝 在 Pyth
  • 腾讯云 Finops Crane 开发者集训营 - 云原生如何助力企业搞定成本优化

    引言 随着docker的技术普及 越来越多的企业加入了云计算发展进程 云原生产业发展迅猛 云原生建设投入比例明显 面对大规模的集群投入 部署 维护等问题也逐渐产生 越来越多的企业对云原生不断提出更高要求 同时云原生技术简化运维的效能提 升开
  • .Net WebAPI 高速下载文件接口实现

    接触WebAPI一年多了 感觉是个承上启下 开创未来的技术 老一辈程序员写接口就像写方法一样 不需要了解太多网页的知识 却可以在浏览器中访问这些接口 由于是基于HTTP协议 因此不管是PC 手机还是嵌入式均可顺利访问 对于当下软件多终端的设
  • Spark 【分区与并行度】

    RDD 并行度和分区 SparkConf setMaster local 我们在创建 SparkContext 对象时通常会指定 SparkConf 参数 它包含了我们运行时的配置信息 如果我们的 setMaster 中的参数是 local
  • 服务器维护中轩辕,轩辕服务器为什么老是-轩辕服务器为什么 – 手机爱问

    网三轩辕为什么上不去了啊 网三轩 朋友 我先问下 有以下的情况吗 第一 你的号上去后 选线的时候是不是请重从连接 要是的话这是卡号了 第二 你上号的时候 写账号和密码 就提事说 从请从新登陆 这不是卡号 这也是卡线了 这是你卡线的时候总来回
  • xray扫描器的使用 (长亭科技公司创造)

    简介 xray是一款可以使用HTTP HTTPS代理进行被动扫描的安全工具 支持功能如下 独立的 URL 扫描 基于 HTTP 的被动代理扫描 同时支持HTTPS SQL注入检测模块 命令注入检测模块 任意重定向检测模块 路径遍历模块 Xr
  • c# Newtonsoft.Json 常用方法总结

    1 实体类的 Json 序列化和反序列化 我们以如下的 Person 类举例 其中包含了常用的数据类型 public class Person public int ID get set public string Name get set
  • Kubernetes之kubectl命令详解及常用示例

    文章目录 一 kubectl语法 二 子命令详解 1 command 2 type 3 flags 4 kubectl的输出格式 三 kubectl常用命令 1 查看类命令 2 操作类命令 3 其他操作 一 kubectl语法 kubect
  • 容器与云的碰撞——一次对MinIO的测试

    事先声明 本次测试过程完全处于本地或授权环境 仅供学习与参考 不存在未授权测试过程 本文提到的漏洞 MinIO未授权SSRF漏洞 CVE 2021 21287 已经修复 也请读者勿使用该漏洞进行未授权测试 否则作者不承担任何责任 随着工作和
  • OAuth2.0-授权码模式

    解决问题 OAuth2 0授权码模式主要解决了信任问题 一个第三方网站需要访问我们Github上的数据 例如用户头像 那Github为什么要信任该网站 该对网站信任到什么程度 如果彻底信任该网站 那么将Github的用户名和密码直接交给该网
  • 计算机网路基础 - 一些基本概念与网络结构

    1 基本概念 计算机网络 通信技术 计算机技术 是两项技术紧密结合的产物 通信系统的基础模型 计算机网络 是指将地理位置不同 具有独立功能的多台计算机及其外部设备 通过通信线路连接 在网络操作系统 网络管理软件及网络通信协议的管理和协调下
  • 【mysql批量插入或更新方法实现】

    自定义批量插入或更新 1 创建接口 替代baseMapper public interface RootMapper
  • CentOS搭建vsftp

    VSFTPD Very Secure FTP Daemon 是一个在 CentOS 中常用的 FTP 服务器软件 它是一个轻量级 安全且高性能的 FTP 服务器 基于 RFC 959 协议 并实现了大多数 FTP 协议的功能 VSFTPD
  • ObjectARX学习

    VS2010 VS2012 VS2013 VS2015 VS2017各版本产品激活秘钥 ObjectARX简介 ObjectARX解压包内各文件代表什么 VS ObjectARX SDK AutoCAD对应关系 1 VS2010 VS201
  • Flutter websocket 实现消息推送

    没什么可说的 直接上代码吧 Flutter 中的消息管理工具 class MessageUtils static WebSocket webSocket static num id 0 static void connect Future
  • NGINX实现TCP加密代理

    NGINX实现TCP加密代理 NGINX实现TCP代理 源码安装NGINX 修改配置文件 重启NGINX 测试 实现转发MySql Redis 矿池ssl 以及各种TCP转发 NGINX实现TCP代理 源码安装NGINX NGINX官网源码

随机推荐

  • 数据挖掘(全书的知识点都包括了)

    数据挖掘 第一章 1 什么是数据挖掘 数据挖掘是从数据中 发现其有用的信息 从而帮助我们做出决策 广义角度 数据挖掘是从大量的 不完全的 有噪声的 模糊的 随机的实际应用数据中 提取隐含在其中的 人们事先不知道的 但又是潜在有用的信息和知识
  • Android图片加载内存优化

    Android图片加载内存优化 利用BitmapFactory Options实现图片内存优化 通过设置options inPreferredConfig控制内存占用 通过设置采样率options inSampleSize来减少图片内存占用
  • 使用R语言构建泊松回归模型

    使用R语言构建泊松回归模型 泊松回归是一种广泛应用于计数数据分析的回归模型 它是基于泊松分布的概率模型 用于描述事件在一定时间或空间范围内发生的次数 在本文中 我们将学习如何使用R语言构建泊松回归模型 并提供相应的源代码示例 1 数据准备
  • 详细前后端分离实现facebook第三方登录的全过程(国内一般都是用Android和ios,并且资料稀少)

    实现facebook第三方登录全过程 需求 官方文档与校验工具 详细步骤 1 注册一个facebook的账号 2 登录https developers facebook com 3 点击我的应用 4 创建一个属于自己的应用 5 选择类型和详
  • 免费使用中国知网/查看外文文献—浙江图书馆

    参考https www zhihu com question 20188973 answer 296971317 目录标题 注册 知网 外文文献 注册 支付宝搜索 浙江图书馆 关注并进入浙江图书馆生活号 点击 服务大厅 点击 新用户注册 设
  • 【HBZ分享】数仓里面的概念-宽表-维度表-事实表概念讲解

    数仓概念 1 度量值 可被统计的 比如 次数 销量 营销额 订单表中的下单金额等可以统计的值叫度量值 2 维度表 1 对事实描述的信息 每一张表都对应现实世界中的一个对象或概念 比如 用户 商品 日期 地区维度 2 比如要分析商品的销售情况
  • 2023Mid Journey第一部AI中英双语图文描述关键词辞典.pdf(附下载链接)

    省时查报告 专业 及时 全面的行研报告库 省时查方案 专业 及时 全面的营销策划方案库 免费下载 2023年8月份全网热门报告合集 ChatGPT提词示例 让你的ChatGPT聪明100倍 超百页干货资料 AI应用的难点 痛点与未来 202
  • Kali Linux 通过gnome-tweaks调整原生主题的字体字号

    首先我们需要确认是否安装了 gnome tweaks 因为默认kali Linux使用的是gnome桌面程序 大部分情况下是默认就有的 你只需要确认下是否安装 使用命令行确认 whereis gnome tweaks 出现下图所示就表示有
  • Sidetree - 去中心化身份管理协议

    身份 Identity 管理是区块链应用的核心元素 在一个不可信 匿名的分布计算生态中 要实现去中心化身份管理并不是一件容易的事情 Sidetree是一个基于现有区块链平台的第二层 L2s 协议 专门用于去中心化身份管理 微软最新开源的IO
  • 史上最全Android性能优化方案解析

    Android中的性能优分为以下几个方面 布局优化 网络优化 安装包优化 内存优化 卡顿优化 启动优化 一 布局优化 布局优化的本质就是减少View的层级 常见的布局优化方案如下 在LinearLayout和RelativeLayout都可
  • IP数据报的发送和转发过程

    IP数据报的发送和转发过程 源主机如何知道目的主机是否与自己在同一网络中 同一个网络中的主机可以直接通信 这属于直接交付 不同网络中的主机不能直接通信 需要路由器的中转 这属于间接交付 现假设主机C给主机F发送ip数据报 主机C将自己的IP
  • Spring Boot整合Spring Security并设置自定义登录页面

    准备工作 创建一个Spring Boot项目 注意选择Spring Boot的版本 选择3 0以下的版本 选择如下依赖 等待项目创建成功 项目创建成功之后 添加Mybatis plus的依赖
  • matlab中使用save保存文件, 文件名中有变量

    K 3 filenm K num2str K p num2str K mat save filenm
  • C#中 的泛型

    一 泛型类 1 定义一个泛型类 这个类中某些字段的类型是不确定的 这些类型可以在类构造的时候确定下来 类似于模板 class TestA
  • Ztree组件 支持全选 和反选不影响父级

    ztree ztree v3 3 5 46 main js import ztree ztree v3 js jquery ztree core js import ztree ztree v3 css zTreeStyle zTreeSt
  • Flutter开发之——动画-Lottie

    一 概述 Lottie是Aribnb开源的面向Android iOS等的高性能动画库 Flutter原生库不支持Lottie 但是可以通过第三方插件实现Lottie的动画效果 二 导入lottie flutter插件 2 1 插件地址 Lo
  • unity局域网开关机步骤二-c#-tcp

    using System using System Collections Generic using System Linq using System Text using System Net Sockets using System
  • Python基础知识(四):一文看懂列表、元组和字符串操作

    序列 序列是具有索引和切片能力的集合 列表 元组和字符串具有通过索引访问某个具体的值 或通过切片返回一段切片的能力 列表 元组 字符串都属于序列 1 列表 列表 List 是Python中非常重要的内置数据类型 列表由一系列元素组成 所有的
  • 设计模式——简单工厂模式

    简单工厂模式定义为 简单工厂模式又称为静态工厂方法模型 它属于类创建型模式 在简单工厂模式中 可以根据参数的不同返回不同类的实例 简单工厂专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 简单工厂模式结构图 简单工厂模
  • Picture控件的加载图像的使用总结

    一 非动态显示图片 即图片先通过资源管理器载入 有一个固定ID 二 动态载入图片 即只需要在程序中指定图片的路径即可载入 为方便说明 我们已经建好一个基于对话框的工程 名为Ttest 对话框类为CTestDlg 一 vc picture控件