| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1257 人关注过本帖
标题:请问有人做过MFC吗?有个问题
只看楼主 加入收藏
奥丁
Rank: 1
等 级:新手上路
帖 子:327
专家分:0
注 册:2006-10-18
结帖率:100%
收藏
 问题点数:0 回复次数:4 
请问有人做过MFC吗?有个问题
我想在一个dialog上显示一张JPG图片,怎么弄
搜索更多相关主题的帖子: MFC dialog JPG 
2008-06-24 19:52
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
通过OLE实现,具体代码给你参考一下

CFileDialog fd(TRUE);
    fd.m_ofn.lpstrFilter="jpg文件.bmp文件\0*.jpg;*.bmp\0\0";
    
    if ( fd.DoModal() != IDOK )
    {
        return;
    }
    CString m_Path="";
    m_Path=fd.GetPathName();
    
    IStream *pStm;
    CFileStatus fstatus;
    CFile file;
    LONG cb;
    HGLOBAL hGlobal;
    if (file.Open(m_Path,CFile::modeRead) &&
        file.GetStatus(m_Path,fstatus) && ((cb = fstatus.m_size) != -1))
    {
         hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
        LPVOID pvData = NULL;
        if (hGlobal != NULL)
        {
            if ((pvData = GlobalLock(hGlobal)) != NULL)
                {
                    file.ReadHuge(pvData, cb);
                    GlobalUnlock(hGlobal);    
                    CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
                
                }
        }
    }

    CDC * pDC=GetDC();
    IPicture *pPic;
    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
    {
        OLE_XSIZE_HIMETRIC hmWidth;
        OLE_YSIZE_HIMETRIC hmHeight;
        pPic->get_Width(&hmWidth);
        pPic->get_Height(&hmHeight);
        double fX,fY;
    
        fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->GetDeviceCaps(HORZSIZE)*100.0);
        fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->GetDeviceCaps(VERTSIZE)*100.0);
        CString str;
        str.Format("%f,%f",(double)fX,(double)fY);
    //        MessageBox(str);
/*        if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
        {    AfxMessageBox("渲染图像失败!"); }*/
        if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
        {    AfxMessageBox("渲染图像失败!"); }
        pPic->Release();
    }
    else
    {AfxMessageBox("从流中装载图像失败!");
    }
    ReleaseDC(pDC);
    GlobalFree(hGlobal);

这里还有另外一种方法,就是将JPG转换成HBITMAP句丙后操纵
HBITMAP JpgToBmp(LPCTSTR szFile, HBITMAP hRet)
{
    LPPICTURE gpPicture;
    HANDLE   hFile = ::CreateFile(szFile,   GENERIC_READ,0,NULL,
        OPEN_EXISTING, 0,NULL);
    if(INVALID_HANDLE_VALUE   ==   hFile)
        return   false;
    DWORD dwFileSize = ::GetFileSize(hFile,NULL);
    ASSERT(-1!=dwFileSize);
    LPVOID pvData = NULL;
    HGLOBAL hGlobal = ::GlobalAlloc(GMEM_MOVEABLE,   dwFileSize);
    ASSERT(NULL!=hGlobal);
    pvData = ::GlobalLock(hGlobal);
    ASSERT(NULL!=pvData);
    DWORD dwBytesRead = 0;
    BOOL  bRead  =  ::ReadFile(hFile,pvData,dwFileSize,&dwBytesRead,NULL);
    ASSERT(FALSE!= bRead);
    ::GlobalUnlock(hGlobal);
    ::CloseHandle(hFile);
    LPSTREAM pstm =  NULL;
    HRESULT hr = ::CreateStreamOnHGlobal(hGlobal,TRUE,&pstm);
    ASSERT(SUCCEEDED(hr)&&pstm);
    hr=::OleLoadPicture(pstm,dwFileSize,FALSE,IID_IPicture,
        (LPVOID*)&gpPicture);
    ASSERT(SUCCEEDED(hr)&&gpPicture);
    pstm->Release();
    OLE_HANDLE picHandle;
    gpPicture->get_Handle(&picHandle);
    HDC hdc =  ::CreateCompatibleDC(NULL);
    ASSERT(hdc);
    ::SelectObject(hdc,(HGDIOBJ)picHandle);
    hRet = (HBITMAP)::GetCurrentObject(hdc,OBJ_BITMAP);
    DeleteDC(hdc);
    return   hRet;
}
用法
HBITMAP hbitmap;
hbitmap = JpgToBmp("你的jpg文件路径",hbitmap);
返回一个HBITMAP句柄

2008-06-25 00:02
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
关键在IPicture接口。这个是COM接口吧?

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-06-25 20:35
jamieking
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-11-3
收藏
得分:0 
如果你想以图片做背景,有个简单的办法:
先将图片加入资源,然后在对话框中添加一个图像控件,再该控件属性的Type中选择Bitmap,Image中选择你加入的图片的ID

2008-06-25 22:07
奥丁
Rank: 1
等 级:新手上路
帖 子:327
专家分:0
注 册:2006-10-18
收藏
得分:0 
对了 我这个是在windowsmobile上 也就是MFC智能应用程序项目 以上代码可以适用吗
2008-06-26 03:44
快速回复:请问有人做过MFC吗?有个问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016085 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved