void CMyBMPView::OnDraw(CDC* pDC)
{
CMyBMPDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
/*
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
// CBitmap Bitmap;
HBITMAP hBitmap = (HBITMAP) LoadImage(NULL, pDoc->m_PicPath,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
CBitmap Bitmap;
Bitmap.Attach(hBitmap);
// Bitmap.LoadBitmap(IDB_MYBITMAP);
CBitmap *pOldBitmap = MemDC.SelectObject(&Bitmap);
BITMAP bm;
Bitmap.GetObject(sizeof(BITMAP),&bm);
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(pOldBitmap);
*/
::CoInitialize(NULL); // COM 初始化
HRESULT hr;
CFile file;
file.Open( pDoc->m_PicPath, CFile::modeRead | CFile::shareDenyNone ); // 讀入文件內容
DWORD dwSize = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
file.ReadHuge( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem );
IStream * pStream = NULL;
IPicture * pPicture = NULL;
// 由 HGLOBAL 得到 IStream,參數 TRUE 表示釋放 IStream 的同時,釋放內存
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT ( SUCCEEDED(hr) );
hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
ASSERT(hr==S_OK);
long nWidth,nHeight; // 寬高,MM_HIMETRIC 模式,單位是0.01毫米
pPicture->get_Width( &nWidth ); // 寬
pPicture->get_Height( &nHeight ); // 高
////////原大顯示//////
CSize sz( nWidth, nHeight );
pDC->HIMETRICtoDP( &sz ); // 轉換 MM_HIMETRIC 模式單位爲 MM_TEXT 像素單位
pPicture->Render(pDC->m_hDC,0,0,sz.cx,sz.cy,
0,nHeight,nWidth,-nHeight,NULL);
////////按窗口尺寸顯示////////
// CRect rect; GetClientRect(&rect);
// pPicture->Render(pDC->m_hDC,0,0,rect.Width(),rect.Height(),
// 0,nHeight,nWidth,-nHeight,NULL);
if ( pPicture ) pPicture->Release();// 釋放 IPicture 指針
if ( pStream ) pStream->Release(); // 釋放 IStream 指針,同時釋放了 hMem
::CoUninitialize();
}