vc怎样在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);

 DisplayPic(pathname,m_hWnd,rect.Width(), rect.Height());
 CDialog::OnPaint();

 }
}

 

垃圾代码一大堆,着急先凑合着用

欢迎改进

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值