这是我在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");;
// }}
编译没错误,但运行到
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");;
// }}
数据都放在文档中
在视图中显示文档,如果在一个视图中改变了文档中数据,就应该调用UpdateAllViews更新所有视图。