您的位置:首页 > 其它

使用PictureControl显示BMP图片

2014-12-04 16:34 405 查看
CBitmap bitmap;

bitmap.LoadBitmap(IDB_CTYPE_REPAIR);

//HBITMAP hBitmapRet =bitmap.Detach();

((CStatic*)GetDlgItem(IDC_CTYPE))->SetBitmap(static_cast< HBITMAP >( bitmap.Detach() ) ) ;

下面是关于怎样使用Picture Control显示BMP图片:

  查找了一下SetBitmap是这样定义的:

  // uBmpResource:图片ID; uCtrlResource: Picture控件ID

  void SetBitmap(UINT uBmpResource, UINT uCtrlResource)

  {

  HBITMAP hBitmap;

  CStatic *pStatic = (CStatic *)GetDlgItem(uCtrlResource);

  hBitmap = (HBITMAP)LoadImage(

  AfxGetInstanceHandle(),

  MAKEINTRESOURCE(uBmpResource),

  IMAGE_BITMAP,

  0,

  0,

  LR_LOADMAP3DCOLORS);

  pStatic->ModifyStyle(0xF, SS_BITMAP);

  pStatic->SetBitmap(hBitmap);

  }

  根据定义,在对话框初始的时候写入下面的代码(结果成功正常显示):

  BOOL CLoginDog::OnInitDialog()

  {

  CDialog::OnInitDialog();

  //添加登陆窗口中的图片

  HBITMAP hBitmap;

  //关联图片ID

  hBitmap =(HBITMAP)LoadImage(AfxGetInstanceHandle(),

  MAKEINTRESOURCE(IDB_BITMAP_LOGIN_PIC),

  IMAGE_BITMAP,0,0,

  LR_LOADMAP3DCOLORS);

  //获得指向静态控件的指针

  CStatic *pStatic=(CStatic *)GetDlgItem(IDC_STATIC_PIC);//控件ID

  //设置静态控件的样式,使其可以使用位图,并试位标显示使居中

  pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);

  //设置静态控件显示位图

  pStatic->SetBitmap(hBitmap);

  return TRUE;

  } 来源:考试大-计算机二级考试

////////////////////////////////////////////////////////////////////////////

这两天在做一个图像压缩处理程序的界面,其中用到了动态加载位图。之前只做过静态位图的加载,做动态位图加载也花了点时间。下面我就把静态和动态加载的方法都跟大家分享一下,同时也便于自己查阅,如果大家有更好的办法也记得共享一下哦!

静态加载位图:

1.添加控件:添加Text控件做为显示位图的控件,添加“显示位图”按钮控件;

2.插入位图资源,设置ID为IDB_BITMAP1;

3.用classwizard为按钮控件添加响应函数,并添加代码如下:

void CStaticImageDlg::OnShowbitmap()

{

// TODO: Add your control notification handler code here

//获得指向静态控件的指针

CStatic *pStatic=(CStatic *)GetDlgItem(IDC_STATICIMAGE2);

//获得位图句柄

HBITMAP hBitmap=::LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP1));

//设置静态控件的样式,使其可以使用位图,并试位标显示使居中

pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE);

//设置静态控件显示位图

pStatic->SetBitmap(hBitmap);

}

然后就可以编译运行了。

动态加载位图

动态加载位图也就是说可以通过点击按钮来选择文件中你所想要打开显示的位图,而不是事先导入的。

1.首先也是添加显示位图的控件,不过这次添加的是picture控件,然后添加“显示位图”按钮;

2.为“显示位图”按钮添加响应函数:

void CLoadMapDlg::OnLoadmap()

{

// TODO: Add your control notification handler code here

OnPaint();

CString m_strfile;

CRect r;

GetClientRect(&r); //获得控件客户窗口大小

CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,

_T("Layer Files (*.DEM;*.TIFF;*.BMP;*.JPG)|*.DEM;*.TIFF;*.BMP;*.JPG;)||"),NULL);

if(dlg.DoModal ())

{

m_strfile=dlg.GetPathName ();

}

HBITMAP hbitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),m_strfile,IMAGE_BITMAP,r.Width()/2,

r.Height()/2,LR_LOADFROMFILE);

CStatic* pPic=(CStatic*)GetDlgItem(IDC_PICTURE);

ASSERT(pPic);

pPic->SetBitmap(hbitmap);

Invalidate();

}

3.最重要的一点是插入的picture控件的TYPE要选中“BitMap”,而不是Frame,否则将出现编译通过,而位图无法显示的情况!

在解决静态和动态加载图片的过程中我更加体会到做事情多思考,多动手,多像GOOGLE请教的道理。以前我总是照着书上的例子敲代码,结果发现真正要做出一个东西的时候,却一行代码都写不出来。那时候才后悔当初练习的时候为什么不看懂才敲。俺要做的是程序员不是打字员。虽然我们必须从书本上的范例开始学习,但是在每学完一个例子以后我们应该把从中学到的东西结合自己以前学的东西来做出一个属于自己的东西来,这样我们才真正进步了哦!

//////////////////////////////////////////////////////////////////////

查看文章

VC动态加载bmp位图资源2010-10-31 14:56SDK和MFC插入资源时,都要求是BMP格式的位图资源。但位图资源不是显示动态图片。好了不废话。下面介绍两种VC动态加载bmp位图资源:

1、加载BMP文件路径的位图资源

利用到了一个API函数LoadImage(),具体用法可以查询MSDN

添加一个静态文本控件IDC_Static,添加成员变量m_Image,添加入以下代码:

this->m_Image.ModifyStyle(0,SS_BITMAP | SS_CENTERIMAGE); //该静态控件设置为是用来显示位图的,

HBITMAP hBmp = (HBITMAP)::LoadImage(0, "2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //bmp文件路径直接读取该bmp图象的句柄,并转换为HBITMAP类型

this->m_Image.SetBitmap(hBmp); // 将bmp文件显示到静态文本框中

2、动态加载资源里的位图bmp

用到了API函数LoadBitmap()

添加位图资源 ID为IDB_BITMAP1和一个静态文本控件IDC_Static,并为其添加成员变量m_Image,

添加入以下代码:

this->m_Image.ModifyStyle(0,SS_BITMAP | SS_CENTERIMAGE); //将该静态控件设置为是用来显示位图的

HBITMAP hBitmap=::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));

//从工程资源处获得IDB_BITMAP1的位图句柄,并将其赋值给hBitmap变量

this->m_Image.SetBitmap(hBitmap); // 将bmp文件显示到静态文本框中

VC++6.0编译通过

本文来源:eagle200901
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: