VC++ 6.0 MFC Picture Control Usage

来源:互联网 发布:被狙击的学园 知乎 编辑:程序博客网 时间:2024/05/19 17:51

1、添加一个Picture 控件

属性 -->类型-->位图

为了对控件有区别,要把Picture的ID改下,我这里改为ID_PICTURE

2、添加Picture的控制变量

右键 -->建立类向导-->Member Variables

选中IDC_PICTURE,单击Add Variable...,确定

3、添加一个HBITMAP变量

HBITMAP m_bitmap;
m_bitmap = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)); //导入位图
m_picture.SetBitmap(m_bitmap);//显示m_bitmap

这种方法太不灵活了,你也可以自己加载自己喜欢的图片!

CString m_strfile; /***你在文件选择对话框中选中的文件名***/ 
CRect r; 
GetClientRect(&r); 
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, 
  "Bmp files(*.bmp)|*.bmp|",NULL); 
if(dlg.DoModal ()) 

  m_strfile=dlg.GetPathName (); 

m_bitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(), 
  m_strfile, 
  IMAGE_BITMAP, 
  r.Width()/2, // 原图的1/2
  r.Height()/2, //原图的1/2
 
LR_LOADFROMFILE);    
m_picture.SetBitmap(m_bitmap);


为了提高程序的灵活性,我想让他不仅加载bmp图片,我还想让他加载jpeg,png等图片,并且按照一定的比例缩放,下面使用CImage类进行处理

要把在头文件上加上

#include "atlimage.h"

CRect rect;m_picture.GetClientRect(&rect);//获取Picture Control的属性CDC *pDC = m_picture.GetDC();CImage image;image.Load(m_strfile);//加载图片CImage t_image;t_image.Create(rect.Width(),rect.Height(),32);//创建缩放后图片的存储区/* 求缩放比例 */float width = rect.Width()/(float)image.GetWidth() ,  height = rect.Height()/(float)image.GetHeight();float result = width < height ? width : height;if (m_bitmap) DeleteObject(m_bitmap);//清除Picture Control 缓存 image.Draw(t_image.GetDC(),0,0,       image.GetWidth()*result,   image.GetHeight()*result); //按照Picture控件的大小,(不按比例)缩放原始图片 t_image.ReleaseDC();m_bitmap = t_image.Detach();HBITMAP OldBitmap = m_picture.SetBitmap(m_bitmap); if (OldBitmap) DeleteObject(OldBitmap); 

注:VC++6.0做这个很不方便,今天搞了一下午都没有搞好,后来试用VS2010,反正就想说一句,先进的东西就是好!!!

原创粉丝点击