承接上篇,介绍了三种方法,本篇将介绍动态载入图片的另一种方法:

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

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

如果读者有兴趣可以向我索要以上方法的全部例程.

信箱: zhucde@jxfw.com

应广大朋友的建议,特将所有例程打包,放在以下地址供下载:

http://www.7forever.com/c3d/study/pictest.rar

其中,直接绘制的程序为对话框自适应图片大小,不是文章中Static自适应大小

在对话框显示图片的多种方法(下)相关推荐

  1. 在对话框显示图片的多种方法(上)

    我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基 ...

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

    我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基 ...

  3. 前端页面显示图片的多种方法小结

    对我使用过的前端显示图片的方法进行小总结,作为以后参考的依据. 说在前面的话:关于这几种实现方式,有可能原理是一样的,而且肯定有更优的实现方式.因为时间关系我没有进行深入研究,如果哪里写的不对,请多多 ...

  4. PowerShell隐藏不显示窗口的多种方法

    转载 https://www.jb51.net/article/68186.htm 隐藏不显示窗口的多种方法这篇文章主要介绍了PowerShell隐藏不显示窗口的多种方法,本文讲解了启动PowerSh ...

  5. 苹果手机不显示图片的解决方法

    苹果手机不显示图片的解决方法 给图片设置下大小就有了.. 查看原文:http://newmiracle.cn/?p=508

  6. python图显示在新的窗口_python在新的图片窗口显示图片(图像)的方法

    python在新的图片窗口显示图片(图像)的方法 使用python画图,发现生成的图片在console里.不仅感觉很别扭,很多功能也没法实现(比如希望在一幅图里画两条曲线). 想像matlab一样单独 ...

  7. 文本文档写html图片显示不出来,word文档几种不显示图片的解决方法

    word文档几种不显示图片的解决方法 我们在Word文档添加图片的时候,常常会遇到图片显示不出来的情况,那么这个时候应该怎么办呢?下面就来和小编一起看看word文档几种不显示图片的解决方法吧. 1.可 ...

  8. android显示图片部分区域,Android编程实现只显示图片一部分的方法

    本文实例讲述了Android编程实现只显示图片一部分的方法.分享给大家供大家参考,具体如下: 在Android应用程序中加载一张图片,然后把它显示出来这是一件非常容易的事情,那怎么才能显示一张图片的一 ...

  9. php图片横排,Discuz板块横排显示图片的实现方法_php技巧

    Discuz板块横排显示图片的实现方法_php技巧 到你目前在使用的模板中寻找 discuz.htm 找到这一段代码: onMouseOver="this.className='altbg1 ...

最新文章

  1. 抗生素抗性基因研究进展PPT分享
  2. python处理表格数据-python通过xrld库读取表格数据
  3. Sqlserver中查询存储过程是否包含某些文本
  4. postgresql数据库增删改:使用pgadmin以及SQL语句来实现
  5. 1.5 引入解释性变量
  6. BASH Shell 简易进度条小函数
  7. Visual Studio 2008单元测试实践一
  8. LeetCode 543二叉树的直径-简单
  9. 【C++ Primer】 神秘的 sizeof(union) 、sizeof(struct) 和内存对齐技术
  10. 分布式系统设计理念为何这么难学?
  11. 20180602_Eclipse配置Maven的本地仓库和阿里云镜像
  12. 管理感悟:掌握写文档的技能
  13. memcached在项目中的应用
  14. 计算机无法安装ae,Windows10系统AE软件无法安装如何处理
  15. 识别圆的强化RANSAC算法
  16. 分析对象竞是我自己?我在 9 月上班划水 1510 分钟!
  17. 延迟队列DelayQueue原理
  18. 目前全网最详细的树莓派 Pico入门指南!
  19. QQ空间热修复原理深入解析
  20. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

热门文章

  1. 几款常见的视频格式转换器 1
  2. offset()方法理解
  3. SAP 批次管理(Batch management)配置介绍
  4. 二维码生成器如何批量制作圆点外观二维码
  5. 包子笔记 - 赢冲输缩
  6. 微信公众平台开发[12]-开发模式-接口-天气
  7. Unity 关卡编辑器(自动捕捉功能)
  8. MTD层次、MTD设备驱动接口、Nor Flash/Nand Flash驱动
  9. 翻译土耳其语言去哪里比较好
  10. 基于Unix 风格的 Redox OS 0.7.0 发布