图像显示

在这里我主要参考了一下这个网页的介绍,介绍的很不错。

http://www.programfan.com/article/showarticle.asp?id=2453

在此对此作者表示感谢。

但我在实际应用过程中,遇到以下这个问题,我在fileopen中能够正确显示出来,但是画面更新后显示的图片就不再存在,因此我想到在OnPaint()函数中实现(我的时一个对话框工程,没有OnDraw函数),这里还有个问题是给该类增加了很多成员函数,因为如果用局部变量的话,在每次更新的时候可能会出问题。

并且我是在某个子窗口中显示图片。

我的步骤如下:1)在FileOpen函数中只是获得了文件名,并且更新

if(dlgFile.DoModal()==IDOK)

m_FileName=dlgFile.GetFileName(); 

Invalidate();

2)在OnPaint()函数中

先判断m_fileName 是否为空,如果非空,才做以下步骤

  if(!m_FileName.IsEmpty())
  {

。。。。。。
 }

在拷代码之前,我先把用到的成员变量拷上,

 CWnd* m_pWnd;
 CString m_FileName;
 CRect m_ClientRect;
 CRect m_ZhiFangTu;
 CMenu* m_Menu;
 BITMAP bmMetric;

下面是实现代码

   CPaintDC dc1(GetDlgItem(IDC_STATIC_KEY));  //定义某子窗口的设备上下文
  CDC memDC;              // 定义内存变量DC,存放图片
  CBitmap bm,*pbm;
//  BITMAP bmMetric;
//  CRect m_ZhiFangTu;

  m_pWnd=GetDlgItem(IDC_STATIC_KEY);
  m_pWnd->GetClientRect(&m_ClientRect);
  m_pWnd->ClientToScreen(&m_ClientRect);
  ScreenToClient(&m_ClientRect);
//  ClientToScreen(&m_ClientRect);
  

  hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
        m_FileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);

  bm.Attach(hbmp);
  bm.GetBitmap(&bmMetric);
  memDC.CreateCompatibleDC(&dc1);
  pbm=memDC.SelectObject(&bm);
/*  dc.StretchBlt(0,0,100,100,
   &memDC,0,0,100,100,SRCCOPY);
*/

//  CString out;
//  out.Format("rect.left = %d,rect.top = %d ",rect.left,rect.top);
//  out.Format("right =%d bottom =%d ,bmWidth=%d,bmHeight=%d,left = %d,top = %d",m_ClientRect.right,m_ClientRect.bottom,bmMetric.bmWidth,bmMetric.bmHeight,
//    m_ClientRect.left,m_ClientRect.top);
//  MessageBox(out);
  
  dc1.StretchBlt(0,0,m_ClientRect.Width(),m_ClientRect.Height(),
   &memDC,0,0,bmMetric.bmWidth,bmMetric.bmHeight,SRCCOPY);

// 到此为止,即可以在需要显示图片的空间内显示图片了,

 

//在一个SingleDocument中显示图片,需要在OnDraw函数中写代码

如下代码有一定的错误

 HBITMAP hbitmap=(HBITMAP)LoadImage(NULL,"test.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
    //if( hbitmap == NULL )
  // MessageBox("加载位图失败!");
//  bitmap.Detach();
 bitmap.Attach(hbitmap);
 bitmap.GetObject(sizeof(bmInfo),&bmInfo);
 CDC dcComp;

 dcComp.CreateCompatibleDC(pDC);
 dcComp.SelectObject(&bitmap);
 pDC->BitBlt(0,0,bmInfo.bmWidth,bmInfo.bmHeight,&dcComp,0,0,SRCCOPY);

bitmap.Detach();
// 注意:bitmap 在Attach前后都要检查是否已经关联了图像,如果已经关联,则需要取消。并且在所有图片显示完成后需要释放开辟的资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值