上一节讲的是滚动条控件,本节主要讲一种简单实用的控件,图片控件Picture Control。我们可以在界面某个位置放入图片控件,显示图片以美化界面。

  图片控件简介

  图片控件和前面讲到的静态文本框都是静态文本控件,因此两者的使用方法有很多相同之处,所属类都是CStatic类,有关成员函数已在前面介绍,这里就不重复了。

  图片控件静态和动态加载图片

  下面为大家演示如何为图片控件静态和动态加载位图图片。

  1、图片控件静态加载图片

  (1)创建一个基于对话框的MFC工程,名称设置为"MFCPictureControlDemo"。

  (2)准备一张Bitmap图片,名称设为“view.bmp”,放到工程的res文件夹中,res文件夹路径...\MFCPictureControlDemo\MFCPictureControlDemo\res。

  (3)在Resource View中的"MFCPictureControlDemo.rc*"节点上点右键,选择“Add Resource...”,弹出"Add Resource"对话框:

  然后在左侧的"Resource Type"中选择“Bitmap”,点按钮“Import”,显示一个文件对话框,我们选择res文件夹中的view.bmp图片文件,导入成功后会在Resource View的MFCPictureControlDemo.rc*节点下出现一个新的子节点"Bitmap",而在“Bitmap”节点下可以看到刚添加的位图资源IDB_BITMAP1,这里的默认ID就不修改了。

  (4)在自动生成的对话框模板IDD_MFCPICTURECONTROLDEMO_DIALOG中,删除“TODO:Place dialog controls here.”静态文本控件、“确定”按钮和“取消”按钮。添加一个Picture Control控件,在图片控件的属性页中有一个Type属性,Type属性下拉列表中有8中类型,下面分别介绍下:

  Frame:显示一个无填充的矩形框,边框颜色可以通过Color属性的下拉列表设定

  Etched Horz:显示一条横分割线

  Etched Vert:显示一条竖分割线

  Rectangle:显示一个填充的矩形框,矩形颜色可通过Color属性的下拉列表设定

  Icon:显示一个图标(Icon),图标通过Image下拉列表来设置图标资源ID

  Bitmap:显示一个位图(Bitmap),位图通过Iamge下拉列表来设置位图资源ID

  Enhanced Metafile:显示一个加强的元数据文件(Metafile)

  Owner Draw:自绘

  因为我们要加载的是位图图片,所以Type属性选择Bitmap。

  (5)在图片控件的Image属性的下拉列表中选择(3)中导入的位图IDB_BITMAP1。

  (6)编译运行程序,弹出结果对话框,如下图所示:

  2、图片控件动态加载图片

  以上讲的是静态加载图片的方法,下面接着讲动态加载图片的方法。程序依然沿用上面的工程。步骤如下:

  (1)将上面添加的图片控件的Image属性IDB_BITMAP1清空,Type属性不变。

  (2)修改图片控件的ID为IDC_PIC_STATIC,然后为其添加CStatic类型空间变量m_pictureControl。(若不修改ID则无法为其添加控件变量)

  (3)在对话框下方添加一按钮控件,Caption属性改为“加载图片”,ID设为IDC_LOAD_PIC_BUTTON。

  (4)为按钮IDC_LOAD_PIC_BUTTON添加点击消息的处理函数CMFCPictureControlDemo::OnBnClickedLoadPicButton(),然后修改此函数的函数实现如下:

C++代码:

void CMFCPictureControlDemoDlg::OnBnClickedLoadPicButton()
{
// TODO: 在此添加控件通知处理程序代码
CBitmap bitmap; // CBitmap对象,用于加载位图
HBITMAP hBmp; // 保存CBitmap加载的位图的句柄 bitmap.LoadBitmapW(IDB_BITMAP1); // 将位图IDB_BITMAP1加载到bitmap
hBmp = (HBITMAP)bitmap.GetSafeHandle(); // 获取bitmap加载位图的句柄
m_pictureControl.SetBitmap(hBmp); // 设置图片空间m_pictureControl的位图为IDB_BITMAP1
}

  (5)编译运行程序,弹出结果对话框,点击按钮“加载图片”,结果如下:

  图片控件Picture Control的内容就讲到这里了。

MFC编程入门之二十七(常用控件:图片控件PictureControl)的更多相关文章

  1. VS2010/MFC编程入门之二十七(常用控件:图片控件Picture Control)

    上一节中鸡啄米讲的是滚动条控件,本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示图片以美化界面. 图片控件简介 图片控件和前面讲到的静态文 ...

  2. VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)

    VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 http://www.jizhuomi.com/software/141.html   上一讲中讲了VS20 ...

  3. VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

    前面一节中,鸡啄米讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用.      列表视图控件简介 列表视图控件List Control同样比较常见, ...

  4. MFC编程入门之二十八(常用控件:列表视图控件List Control上)

    前面一节中,讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用. 列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符 ...

  5. VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)

    上一节VS2010/MFC编程入门教程中鸡啄米讲了按钮控件Button.Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件 ...

  6. VS2010/MFC编程入门之三十一(常用控件:树形控件Tree Control 下)

    前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建.CTreeCtrl类的主要成员函数和应用实例. 树形控件的创建 MFC为树形控件提 ...

  7. MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

    本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的侠义的 ...

  8. MFC编程入门之二十(常用控件:静态文本框)

    上一节讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组合框.图片控 ...

  9. VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

    言归正传,鸡啄米上一节中讲了编辑框的用法,本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box ...

随机推荐

  1. Windows Phone 九、SQLite数据库

    使用SQLite数据库 安装 SQLite for Windows Phone 8.1 插件新建 Windows Phone 8.1 项目添加 SQLite for Windows Phone 8.1 ...

  2. activiti当前任务高亮(解决乱码问题)

    package com.xinwei; import java.io.File; import java.io.InputStream; import java.util.ArrayList; imp ...

  3. WPF 札记

    今天在工程中发现了一个非常消耗CPU资源的过程---一个创建Popup并根据绑定的Collection填充ListBox的过程. 通过VS的性能诊断,最终确定的耗时过程锁定在了Popup.isOpen ...

  4. EditPlus 3.6 中文版已经发布(2013年12月17日)

    新版的EditPlus 3.6修复了多项问题,并新增了函数列表面板.按F2.Ctrl+F2等快捷键可弹出输入提示窗格. 我已同步汉化最新版,请点击右上角的连接下载.

  5. BeanUtils.copyProperties()方法和PropertyUtils.copyProperties()的区别

    首先两者来源于同一个包: import org.apache.commons.beanutils.BeanUtils; import org.apache.commons.beanutils.Prop ...

  6. python查找空格和中文

    前言 图片或者文件夹下,命名不规范,有中文或者有空格.这个脚本批处理查找,并输出到 txt中方便修改,也可以扩展为 直接脚本删除空格等.目前只用在Windows上,mac没有测试,不知道能不能行,有需 ...

  7. IE8 jquery解析xml的兼容问题

    正常情况下可以这么写: jQuery(node).find(xpath.replace("//", ""))[0]; 但是在IE8下得到的是undefined应 ...

  8. Java集合面试题

    1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合的广泛使用,Java1 ...

  9. ANGULAR JS WATCH监听使用(详)

    ANGULAR 监听使用: 当angular数据模型发生变化时,我们需要如果需要根据他的变化触发其他的事件. $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. ...

  10. Hibernate之全面认识

    Hibernate体系架构 Hibernate通过配置文件管理底层的JDBC连接,将用户从原始的JDBC释放出来,使得用户无需再关注底层的JDBC操作,而是以面向对象的方式进行持久化操作.这种全面的解 ...