打开JPG格式的程序出了点有关问题,望高手指正

打开JPG格式的程序出了点问题,望高手指正?
希望在一个对话框中打开JPG格式的图片,可是打开后图片只是闪烁了一下,就没有影子了。。。。。   代码如下:

void   CEndTuDlg::OnButtonOpen()  
{
//   TODO:   Add   your   control   notification   handler   code   here
CString   m_sPath;
CFileDialog   dlg(TRUE, "jpg ", "*.jpg ",  
OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,  
"JPEG文件(*.jpg)|*.jpg|GIF文件(*.gif)|*.gif|| ",NULL);  
if(dlg.DoModal()==IDOK)  
{  
m_sPath=dlg.GetPathName();
Invalidate();  
}  
this-> ShowPic(m_sPath,m_hWnd,250,250);
}

HRESULT   CEndTuDlg::ShowPic(CString   lpstrFile,   HWND   hWnd,   int   nScrWidth,   int   nScrHeight)
//   lpstrFile:文件名(最好是包含路径在内)  
//   hWnd  
//   nScrWidth:输出图片的宽度  
//   nScrHeight:输出图片的高度  
//   nScrWidth、nScrHeight是输出图片的实际大小,换而言之是指缩放后的尺寸  
{
HDC   hDC_Temp;
hDC_Temp=::GetDC(hWnd);  
IPicture   *pPic;  
IStream   *pStm;  
BOOL   bResult;  
HANDLE   hFile=NULL;  
DWORD   dwFileSize,dwByteRead;  
//打开硬盘中的图形文件  
hFile=CreateFile(lpstrFile,GENERIC_READ,  
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  
if   (hFile!=INVALID_HANDLE_VALUE)  
{  
dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数  
if   (dwFileSize==0xFFFFFFFF)   return   E_FAIL;  
}  
else  
{  
return   E_FAIL;  
}  
//分配全局存储空间  
HGLOBAL   hGlobal   =   GlobalAlloc(GMEM_MOVEABLE,   dwFileSize);  
LPVOID   pvData   =   NULL;  
if   (hGlobal   ==   NULL)   return   E_FAIL;  
if   ((pvData   =   GlobalLock(hGlobal))   ==   NULL)//锁定分配内存块  
return   E_FAIL;  
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区  
GlobalUnlock(hGlobal);  
CreateStreamOnHGlobal(hGlobal,   TRUE,   &pStm);  
//装入图形文件  
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);  
if(FAILED(bResult))   return   E_FAIL;  
OLE_XSIZE_HIMETRIC   hmWidth;//图片的真实宽度  
OLE_YSIZE_HIMETRIC   hmHeight;//图片的真实高度  
pPic-> get_Width(&hmWidth);  
pPic-> get_Height(&hmHeight);  
//将图形输出到屏幕上(有点像BitBlt)  
bResult=pPic-> Render(hDC_Temp,0,0,nScrWidth,nScrHeight,  
0,hmHeight,hmWidth,-hmHeight,NULL);  
pPic-> Release();  

CloseHandle(hFile);//关闭打开的文件  

if   (SUCCEEDED(bResult))  
{  
return   S_OK;  
}  
else  
{  
return   E_FAIL;  
}  
}


------解决方案--------------------
放到OnPaint()。当然如果你不调用Invalidate(),图片也可以显示稍微长一点时间。
------解决方案--------------------
在OnPaint()中进行画图显示,打开图片的时候对数据进行保存,然后可以调用Invalidate()或者InvalidateRect()函数
------解决方案--------------------
你的问题是,在OnDraw中,不进行该图片绘制,当然成了一闪就没得效果。
你要把图片显示和图片保存区分开来。
建议如下:
1.在OPEN函数中保存图片数据到IPicture *pPic;(把它作为成员变量)。
2.在OPEN函数末尾调用Invalidate()或者FORWARD_WM_PAINT(hwnd, WM_PAINT),来进行刷屏。
3.在OnDraw中(即WM_PAINT消息的响应函数),调用pPic-> Render(hDC_Temp,0,0,nScrWidth,nScrHeight,0,hmHeight,hmWidth,-hmHeight,NULL)。