OleLoadPicture 函數實際上建立了一個IPicture類型的COM介面對象,然後我們可以通過這個COM介面來操作圖片(實際上你也可以用API OleCreatePictureIndirect來載入圖片,不過相比而言OleLoadPicture函數簡化了基於流的IPicture對象的創 建),下面是範例程式碼:(註:由於只是用來樣本,代碼中省去了出錯情況的處理)
void Cinfo::DisplayImage(HDC hDC, LPCTSTR szImagePath){HANDLE hFile=CreateFile(szImagePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); //從指定的路徑szImagePath中讀取檔案控制代碼if(hFile==INVALID_HANDLE_VALUE){MessageBox(Path);return ;}DWORD dwFileSize=GetFileSize(hFile, NULL); //獲得圖片檔案的大小,用來分配全域記憶體HGLOBAL hImageMemory=GlobalAlloc(GMEM_MOVEABLE, dwFileSize); //給圖片分配全域記憶體void *pImageMemory=GlobalLock(hImageMemory); //鎖定記憶體DWORD dwReadedSize; //儲存實際讀取的檔案大小ReadFile(hFile, pImageMemory, dwFileSize, &dwReadedSize, NULL); //讀取圖片到全域記憶體當中GlobalUnlock(hImageMemory); //解鎖記憶體CloseHandle(hFile); //關閉檔案控制代碼IStream *pIStream;//建立一個IStream介面指標,用來儲存圖片流IPicture *pIPicture;//建立一個IPicture介面指標,表示圖片對象CreateStreamOnHGlobal(hImageMemory, false, &pIStream); //用全域記憶體初使化IStream介面指標OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture獲得IPicture介面指標//得到IPicture COM介面對象後,你就可以進行獲得圖片資訊、顯示圖片等操作OLE_XSIZE_HIMETRIC hmWidth;OLE_YSIZE_HIMETRIC hmHeight;pIPicture->get_Width(&hmWidth); //用介面方法獲得圖片的寬和高pIPicture->get_Height(&hmHeight);pIPicture->Render(hDC,cx/2-120,10,300,316,0,hmHeight,hmWidth,-hmHeight,NULL); //在指定的DC上繪出圖片GlobalFree(hImageMemory); //釋放全域記憶體pIStream->Release(); //釋放pIStreampIPicture->Release(); //釋放pIPicture}