这是我在formView中写的函数,用来显示JPG文件,
编译没错误,但运行到 
CDC   *pDC = (CDC*)GetDlgItem(IDC_PICTURE)->GetWindowDC();   
HDC   hDC_Temp = pDC->GetSafeHdc();  出现问题, 什么错误,怎么修改呢?void CPicFormView::DrawPicJPG(TCHAR *path )
{
CDC   *pDC = (CDC*)GetDlgItem(IDC_PICTURE)->GetWindowDC();   
HDC   hDC_Temp = pDC->GetSafeHdc();    IPicture   *pPic;   
IStream   *pStm;       
BOOL bResult;       
HANDLE   hFile   =   NULL;   
DWORD   dwFileSize,   dwByteRead;    //打开硬盘中的图形文件     
hFile = CreateFile(L"d:\\test.jpg", GENERIC_READ,  FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);   
if(hFile !=INVALID_HANDLE_VALUE)   
{     
dwFileSize = GetFileSize(hFile,   NULL);   //获取文件字节数     
if(dwFileSize == 0xFFFFFFFF)
AfxMessageBox(L"adf");
}     
else   
{     
//AfxMessageBox("error");  
}      //分配全局存储空间     
HGLOBAL  hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);   
LPVOID   pvData = NULL;    if (hGlobal == NULL)   
AfxMessageBox( L"error");   if((pvData = GlobalLock(hGlobal)) == NULL) //锁定分配内存块     
AfxMessageBox(L"error");   ReadFile(hFile, pvData, dwFileSize, &dwByteRead, NULL); //把文件读入内存缓冲区   
GlobalUnlock(hGlobal);   
CreateStreamOnHGlobal(hGlobal,TRUE, &pStm);    //装入图形文件     
bResult=OleLoadPicture(pStm, dwFileSize,TRUE, IID_IPicture, (LPVOID*)&pPic);    if(FAILED(bResult))   
AfxMessageBox(L"error");;    OLE_XSIZE_HIMETRIC   hmWidth; // 图片的真实宽度     
OLE_YSIZE_HIMETRIC   hmHeight; // 图片的真实高度     
pPic->get_Width( &hmWidth);   
pPic->get_Height( &hmHeight); 
int nScrWidth = hmWidth; //将图形输出到屏幕上(有点像BitBlt)   
bResult = pPic->Render(hDC_Temp, 
0, 
0,   
500 /*nScrWidth*/,   //Horizontal dimension of the destination rectangle.
500 /*nScrHeight*/,   
0, //Horizontal offset in the source picture from which to start copying. 
hmHeight,   
hmWidth,   
-hmHeight,   
NULL);  
//  这个功能显示一张大图画中的一部分。   
//  hdc  
//  x,y是hdc上的横纵坐标起点,cx,cy是终点,也就是说,画在hdc上的是一个矩形,xy是左上角坐标,cxcy是右下角坐标。   
//  xsrc,ysrc,cxsrc,cysrc也是矩形的左上和右下角坐标,是说明这张大图中要显示到hdc上的部分。     
// 从src这个图中取出xsrc,ysrc,cxsrc,cysrc这部分,贴在x,y,cx,cy这块区域上面
if (bResult == S_OK)
{
AfxMessageBox( L"ok"); 
}
pPic->Release();   
pStm->Release();    CloseHandle(hFile); //关闭打开的文件      if (!SUCCEEDED(bResult))   
{     
AfxMessageBox(L"ok");   
}   
//  else     
//  {     
//  AfxMessageBox("asd");;   
//  }}

解决方案 »

  1.   

     另外问个问题,  工程为切分窗口  我在listView中得到文件名 字符串, 怎么传给 formView? 有什么好方法我在Formview中定义 extern CPicListView * g_ListView2 = NULL; 用ListView2  指向listView的 文件名字符串这样为什么会有问题
      

  2.   

    一个文档对应多个视图:
    数据都放在文档中
    在视图中显示文档,如果在一个视图中改变了文档中数据,就应该调用UpdateAllViews更新所有视图。