生活随笔
收集整理的這篇文章主要介紹了
                                
VC6中使用内存DC加载并显示JPG图片的注意事项
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            From:  http://blog.csdn.net/boythl/article/details/3137446
 
 
今天在VC6中顯示JPG圖片,采用了內(nèi)存DC緩存的方法刷新,但死活刷不出來,查了一下午才明白(沒辦法,很少用GDI,我小菜一個:( ):使用IPicture::Render函數(shù)向DC上貼圖時,若DC是一個內(nèi)存DC,一定要先SelectObject一個CBitmap,內(nèi)存DC沒有Bitmap是畫不出來的!?? 
 
? 另外,IPicture是COM庫,需要注意初始化COM,
 
??CMYApp::InitInstance() 里使用 CoInitialize(NULL);
 
? CMYApp::ExitInstance() 里使用 CoUninitialize();
 
?
 
?? 下面貼出顯示JPG圖片到DC的函數(shù),來自網(wǎng)上,自己整理了下,據(jù)說還可顯示GIF圖片的第一禎圖片,我未用到。
 
 bool?ShowJPG(CDC*?pDC,CString?strPath,?int?x,?int?y,?bool?OriginalSize){????????IStream?*pStm;?????CFileStatus?fstatus;????CFile?file;????LONG?cb;?????????????if?(file.Open(strPath,?CFile::modeRead)?&&?????????file.GetStatus(strPath,fstatus)?&????????((cb?=?fstatus.m_size)?!=?-1))?????????{????????????????HGLOBAL?hGlobal?=?GlobalAlloc(GMEM_MOVEABLE,?cb);????????????????LPVOID?pvData?=?NULL;?????????????????if?(hGlobal?!=?NULL)????????????????{????????????????????????pvData?=?GlobalLock(hGlobal);????????????????????????if?(pvData?!=?NULL)???????????????????????{???????????????????????????????file.ReadHuge(pvData,?cb);??????????????????????GlobalUnlock(hGlobal);???????????????????????????CreateStreamOnHGlobal(hGlobal,?TRUE,?&pStm);?????????????????}?????????????}?????}????????else???????{???????????????return?false;??????}????????????????IPicture?*pPic;????????????????if(SUCCEEDED(OleLoadPicture(pStm,?fstatus.m_size,?TRUE,IID_IPicture,?(LPVOID*)&pPic)))???????{????????????if?(OriginalSize)?????????{????????????long?nWidth?=?0,?nHeight?=?0;?????????????pPic->get_Width(?&nWidth?);?????????????pPic->get_Height(?&nHeight?);?????????????????????????CSize?sz(?nWidth,?nHeight?);?????????????pDC->HIMETRICtoDP(?&sz?);?????????????pPic->Render(pDC->m_hDC,?0,?0,?sz.cx,?sz.cy,?????????????????0,?nHeight,?nWidth,?-nHeight,?NULL);?????????}???????????else????????{????????????OLE_XSIZE_HIMETRIC?hmWidth;??????????????????OLE_YSIZE_HIMETRIC?hmHeight;????????????????pPic->get_Width(&hmWidth);????????????pPic->get_Height(&hmHeight);???????????????????????????????????????double?fX,fY;????????????fX?=?(double)pDC->GetDeviceCaps(HORZRES)??*?(double)hmWidth?/????????????????((double)pDC->GetDeviceCaps(HORZSIZE)?*?100.0);?????????????fY?=?(double)pDC->GetDeviceCaps(VERTRES)??*?(double)hmHeight?/????????????????((double)pDC->GetDeviceCaps(VERTSIZE)?*?100.0);??????????????????????????????????????????????????if(FAILED(pPic->Render(*pDC,x,y,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))?????????????????????{????????????????pPic->Release();??????????????????return?false;????????????????????}????????}???????????????????????if?(?pStm?)?pStm->Release();?????????if?(?pPic?)?pPic->Release();?????}???????else????????{??????????????return?false;???????}????????????return?true;} 
 ?? 感謝vane小弟的幫助!及一個blog:
http://topameng.spaces.live.com/blog/cns!f962d4854a8233d!248.entry =================================== 
非注明轉(zhuǎn)載的文章和blog在未特殊聲明情況下一般為本人原創(chuàng)或整理,
 原創(chuàng)文章版權(quán)歸沙漠孤狐(lonefox)所有;轉(zhuǎn)載文章版權(quán)歸原作者所有;
 
http://blog.csdn.net/boythl
 
歡迎轉(zhuǎn)載,但請注明出處,保留作者和版權(quán)信息。
 
===================================
 
                            總結(jié)
                            
                                以上是生活随笔為你收集整理的VC6中使用内存DC加载并显示JPG图片的注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。