picture control中显示jpg,jif,bmp格式图象

char *lpImageFile; //图像文件名
HWND hWnd ; //要显视对象句柄
int nScrWidth ; //显示宽度
int nScrHeight ; //显示高度
CString pathname;//打开文件的路径名
//以下代码用于打开文件

void CTestssDlg::OnOK()
{
// TODO: Add extra validation here
static char BASED_CODE szFilter[] = "JPG Files (*.jpg)|*.jpg|JPG Files (*.BMP)|*.bmp|JIF Files (*.bmp)|*.jif|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE,"BMP",NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
if(dlg.DoModal() != IDOK)
return;
pathname = dlg.GetPathName();
MessageBox(pathname);

HWND m_hWnd;
GetDlgItem(IDC_STATIC_VIEW,&m_hWnd);

CWnd *pWnd = GetDlgItem(IDC_STATIC_VIEW);
CDC *pDC = pWnd->GetDC();
CRect rect;
pWnd->GetWindowRect(rect);
DisplayPic(pathname,m_hWnd,rect.Width(), rect.Height());

}

以下函数用于显示图象

HRESULT CTestssDlg::DisplayPic(CString lpImageFile, HWND hWnd, int nScrWidth, int nScrHeight)
{
HDC 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);
hFile=CreateFile(lpImageFile,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)
{
AfxMessageBox("图形文件分配出错.");
return E_FAIL;
}

if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块
{
AfxMessageBox("内存块锁定出问题");
return E_FAIL;
}

ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区

GlobalUnlock(hGlobal);

if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStm) != S_OK)
{
AfxMessageBox("流初始化失败");
return E_FAIL;
}

//装入图形文件
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);

if(FAILED(bResult))
{
AfxMessageBox("图形文件装载出错.");
return E_FAIL;
}

OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度
OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);

//将图形输出到屏幕上
bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight,
0,hmHeight,hmWidth,-hmHeight,NULL);

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

pPic->Release();
// Free memory.
GlobalFree(hGlobal);

if (SUCCEEDED(bResult))
{
return S_OK;
}
else
{
AfxMessageBox("图形文件装载出错.");
return E_FAIL;
}
}
并在窗口的onpaint函数中填入如下代码

void CTestssDlg::OnPaint()
{
if (IsIconic())
{
...

}
else
{
HWND m_hWnd;
GetDlgItem(IDC_STATIC_VIEW,&m_hWnd);

CWnd *pWnd = GetDlgItem(IDC_STATIC_VIEW);
CDC *pDC = pWnd->GetDC();
CRect rect;
pWnd->GetWindowRect(rect);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值