对话框不用控件显示jpg图片

本文详细介绍了在C/C++应用中如何通过自定义函数`ShowPicture`实现图片的显示,包括文件操作、内存分配、全局内存管理、图片格式加载、设备上下文交互等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行对话框没有出现图片,我是否需要在对话框上添加控件吗,光凭以下代码就能显示12.jpg图片吗,以下代码应该放哪呢,当然是放在OnPaint()函数里了
CDC* pDC;   
pDC=GetDC();   
ShowPicture(pDC,"c:\\12.jpg",0,0,200,100);  


C/C++ code
 
 #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);    
   /*显示图片*/    
   }    
      
   }  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值