画图

#define   HIMETRIC_INCH 2540   
LPPICTURE   gpPicture;  
void CCDMADlg::ShowPicture(CDC *pDC, CString m_strBRoute, int x, int y, int width, int height)
  {   
  HANDLE   hFile =CreateFile(m_strBRoute,   GENERIC_READ,   0,   NULL,   OPEN_EXISTING,   0,   NULL);   
  _ASSERTE(INVALID_HANDLE_VALUE != hFile);   
    
  //   取得文件大小   
  DWORD   dwFileSize   =   GetFileSize(hFile,   NULL);   
  _ASSERTE(-1   !=   dwFileSize);   
  LPVOID   pvData   =   NULL;   
  //根据文件大小分配内存   
  HGLOBAL   hGlobal   =   GlobalAlloc(GMEM_MOVEABLE,   dwFileSize);   
  _ASSERTE(NULL   !=   hGlobal);   
  pvData   =   GlobalLock(hGlobal);   
  _ASSERTE(NULL   !=   pvData);   
  DWORD   dwBytesRead   =   0;   
  //读取文件并存入全局内存   
  BOOL   bRead   =   ReadFile(hFile,   pvData,   dwFileSize,   &dwBytesRead,   NULL);   
  _ASSERTE(FALSE   !=   bRead);   
  GlobalUnlock(hGlobal);   
  CloseHandle(hFile);   
  LPSTREAM   pstm   =   NULL;   
  //   通过全局内存创建   IStream*   的指针   
  HRESULT   hr   =   CreateStreamOnHGlobal(hGlobal,   TRUE,   &pstm);   
  _ASSERTE(SUCCEEDED(hr)   &&   pstm);   
  //通过图形文件创建IPicture   对象   
  if   (gpPicture)   
  gpPicture->Release();   
  hr   =   OleLoadPicture(pstm,   dwFileSize,   FALSE,   IID_IPicture,   (LPVOID   *)&gpPicture);   
  _ASSERTE(SUCCEEDED(hr)   &&   gpPicture);   
  pstm->Release();   
  HDC   hdc;   
  hdc=pDC->GetSafeHdc();   
  if   (gpPicture)   
  {   
  //   取得图片的宽和高   
  long   hmWidth;   
  long   hmHeight;   
  gpPicture->get_Width(&hmWidth);   
  gpPicture->get_Height(&hmHeight);   
  //宽高转换为象素   
  int   nWidth =   MulDiv(hmWidth,   GetDeviceCaps(hdc,   LOGPIXELSX),   HIMETRIC_INCH);   
  int   nHeight =   MulDiv(hmHeight,   GetDeviceCaps(hdc,   LOGPIXELSY),   HIMETRIC_INCH);   
  RECT   rc;   
  GetClientRect(&rc);/*取得客户区*/   
  gpPicture->Render(hdc,   x,y,   (int)height*hmWidth/hmHeight,height,   0,   hmHeight,   hmWidth,   -hmHeight,   &rc);   
  /*显示图片*/   
  }   
    
  } 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值