文档章节

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

吃一堑消化不良
 吃一堑消化不良
发布于 2016/02/16 18:59
字数 587
阅读 721
收藏 2

(一) 非动态载入图片

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


© 著作权归作者所有

共有 人打赏支持
吃一堑消化不良
粉丝 28
博文 187
码字总数 112458
作品 0
浦东
程序员
MFC开发IM-自绘按钮控件,给按钮设置背景图片

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

golddaniu
05/10
0
0
VS2010/MFC编程入门教程之目录和总结(鸡啄米)

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

weixin_40647819
05/23
0
0
CSDN回帖得分大全(近两年)

√ vs2005调用dll的时候Initialize()函数返回错误 [VC/MFC 基础类] √ 为什么我创建登陆框之后,然后获取登陆框的数据时候总是出现非法操作! [VC/MFC 界面] √ CFileFind::FindFile 支持通配...

junwong
2012/03/09
0
0
在 Visual C++ 中 建 立 MFC 扩 展 DLL

有经验的Windows编程人员都逐渐放弃了WindowsSDK,而转向能为Windows内置的低级机制提供高级抽象的开发环境。这种转移的一个主要受益者是VisualC++,它依靠MFC库来提供WindowsAPI的面向对象的...

晨曦之光
2012/03/09
0
0
VS2010 / MFC + OpenCV 2.4.1打开图片

Windows 7 x64,VS2010 / MFC + OpenCV 2.4.1打开图片显示到Picture控件中。 OpenCV 2.2、OpenCV 2.3同样适用。 工具/原料 WinXP / Win7 x86 / x64 OpenCV 2.2 / 2.3 / 2.4 Visual Studio 20......

LMcallme
2013/04/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Zookeeper总结

Zookeeper的部分概念 什么是zookeeeper? Zookeeper是一个分布式服务的协调中心 zookeeper节点的角色类型? Leader(领导者)、Follower(跟随者)、Observer(观察者) Leader 负责更新系统...

DemonsI
26分钟前
1
0
Redis学习笔记

常用命令 从Docker进入Redis的命令 sudo docker exec -it redis /bin/bash

OSC_fly
26分钟前
0
0
SqlServer查询某个日期的数据

select * from View_ZJMONITORINGCORROSION where ENTERDATE > CONVERT(datetime,DATEADD(day,1,'2017/12/28 14:53:07'))...

笑丶笑
28分钟前
0
0
常用编码规范

Standard characters https://ascii.cl/

yeahlife
29分钟前
0
0
flannel实战

docker swarm mode的出现是个里程碑,官方原生的编排调度看起来都成雏形了,但是swarm mode和容器外部系统的对接、网络性能始终不尽人意,swarm mode下各种开源周边不能使用,感觉swarm mod...

China_OS
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部