文档章节

MFC 在对话框显示图片的多种方法

吃一堑消化不良
 吃一堑消化不良
发布于 2016/02/16 18:59
字数 587
阅读 701
收藏 2
点赞 1
评论 0

(一) 非动态载入图片

方法1.先从最简单的开始,用picture 控件来实现. 

步骤: 

先在资源里Import一张图片,ID为IDB_BITMAP2 

然后在对话框上添加一个picture控件,右键点击打开属性, 

将type下拉框选择BITMAP,紧跟着下面就出现一个Image下拉框, 

拉开就会看到所有已经载入好的图片, 

选择你要的图片.运行程序即可看到.


方法2.通过背景图 

同样如上,先载入一张图片,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; 
}


(二) 动态载入图片. 

方法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 
}

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


方法4 通过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;
}


© 著作权归作者所有

共有 人打赏支持
吃一堑消化不良
粉丝 27
博文 187
码字总数 112458
作品 0
浦东
程序员
VS2010/MFC编程入门教程之目录和总结(鸡啄米)

鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够。以此教程的知识为基础,学习VS2010/MFC较为深入的内容已非难事...

weixin_40647819 ⋅ 05/23 ⋅ 0

MFC开发IM-自绘按钮控件,给按钮设置背景图片

MFC 基础知识:对话框背景添加图片和按钮Button添加图片 很长时间没有接触MFC相关的知识了,我大概是在大二时候学习的MFC相关知识及图像处理,现在由于要帮个朋友完成个基于C++的程序,所以又...

golddaniu ⋅ 05/10 ⋅ 0

libuidk(MFC贴图界面库)v7.5最新免费版下载

libuidk是一款专业的MFC贴图界面库,可以使用MFC界面制作超酷界面,采用所见即所得的编辑方式,支持皮肤和代码分离,可以大大提高产品开发速度,增加图形用户界面的亲和力。对MFC设计师来说十...

qq_39928239 ⋅ 05/11 ⋅ 0

大神有话说之c++,还在迷茫的朋友可以来看一下

C++ 是一种中级语言,它是由 Bjarne Stroustrup 于 1979 年在贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,是一种面向对象的程序设计语言。C++ 可运行于多种平台上,如 Window...

悟空_b201 ⋅ 05/30 ⋅ 0

Windows Socket套接字:MFC套接字编程

网络名词解释 同步:指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式 异步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式; 阻塞:指调用某函数时,...

LoSingSang ⋅ 04/25 ⋅ 0

Android NDK开发的一点尝试

写在前面 笔者是一个“原始”的C++开发者,对Java编程虽说不上抵触但也没有C++那么顺手。而且,作为一个游戏引擎,不管是在什么地方,效率总是第一位的,尤其是在移动平台这样资源吃紧的环境...

闪电的蓝熊猫 ⋅ 04/06 ⋅ 0

MFC功能扩展控件BCGSuite for MFC发布v27.1|附下载

BCGSuite for MFC是一款Visual Studio 2008/2010/2012/2013 的MFC功能扩展控件。虽然Visual Studio 2008中包含的新版MFC是基于BCGControlBar Pro技术的,但某些典型的控件如网格、日历、编辑...

Miss_Hello_World ⋅ 04/26 ⋅ 0

C语言编程学习,你的第一个Windows程序!

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/23 ⋅ 0

C语言编程学习数据类型——基本类型

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/25 ⋅ 0

c语言编程软件有哪些 Win7下用哪种C语言编译器

C语言是一门历史很长的编程语言,其编译器和开发工具也多种多样,其开发工具包括编译器,现举几个开发工具供大家选择,当然也要根据自己的操作系统来选择适合自己的开发工具 好多刚开始接触c...

mini92 ⋅ 04/20 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

1.01-StringUtils的使用

import org.apache.commons.lang.StringUtils; 一、StringUtils 常用的方法: 1. 判断某一字符串是否为空 , 为空的标准是 str==null 或 str.length()==0 StringUtils.isEmpty(null) ==>tr......

静以修身2025 ⋅ 18分钟前 ⋅ 0

几道Spring 面试题

1、BeanFactory 接口和 ApplicationContext 接口有什么区别? ApplicationContext 接口继承BeanFactory接口 Spring核心工厂是BeanFactory BeanFactory采取延迟加载,第一次getBean时才会初始...

职业搬砖20年 ⋅ 20分钟前 ⋅ 0

包饺子

http://storage.slide.news.sina.com.cn/slidenews/77_ori/2018_24/74766_826131_625489.gif

霜叶情 ⋅ 21分钟前 ⋅ 0

兑吧:从自建HBase迁移到阿里云HBase实战经验

摘要: 业务介绍 兑吧集团包含兑吧网络和推啊网络,兑吧网络是一家致力于帮助互联网企业提升运营效率的用户运营服务平台,提供积分商城和媒体运营服务。推啊网络是一家互动式广告平台,经过多...

猫耳m ⋅ 32分钟前 ⋅ 0

xml解析

方法一: String s_xml1 = "<xml>" + "<head>lalalalal</head>" + "<body>1234</body>" + "</xml>"; try { DocumentBuilderFactory documentBuilderFactory......

GithubXD ⋅ 33分钟前 ⋅ 0

reuse stream

Although Java streams were designed to be operated only once, programmers still ask how to reuse a stream. From a simple web search, we can find many posts with this same issue ......

idoz ⋅ 34分钟前 ⋅ 0

兑吧:从自建HBase迁移到阿里云HBase实战经验

摘要: 业务介绍 兑吧集团包含兑吧网络和推啊网络,兑吧网络是一家致力于帮助互联网企业提升运营效率的用户运营服务平台,提供积分商城和媒体运营服务。推啊网络是一家互动式广告平台,经过多...

阿里云云栖社区 ⋅ 36分钟前 ⋅ 0

从世界杯看国内运动体育社交新能量

2018年世界杯已正式拉开帷幕,一场全世界球迷的狂欢也正式开始。 世界杯影响力:30亿+球迷的狂欢+社交话题 世界杯这个超级IP和对社交网络的引爆让更多的人目光聚焦到国内运动体育社交这个层...

ThinkSNS账号 ⋅ 36分钟前 ⋅ 0

不固定值替换

<?php$arr = 20;$data = str_replace(array(10,20,30,40),array("blue","red","green","yellow"),$arr);print_r($data);...

nsns ⋅ 38分钟前 ⋅ 0

Job for nginx.service failed 错误解决方案

今天刚在centos7上安装了nginx-1.2.11,/etc/init.d/nginx start启动时,出现 Job for nginx.service failed because the control process exited with error code. See "systemctl status n......

河图再现 ⋅ 39分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部