COM原理
+ -

COM 使用OleLoadPicture加载在MFC对话框中显示JPG图像

2022-02-23 27 0

在C盘放一张名为aa.jpg,使用MFC运行程序,点击按钮1在对话框中显示JPG图像
加载显示JPG图像

源代码如下:

void CTTDlg::OnBnClickedButton1()
{
    CDC* pDC = GetDC();

    CoInitialize(NULL);  //COM 初始化
    HRESULT hr;
    CFile file;
    file.Open(L"c:\\aa.jpg", CFile::modeRead | CFile::shareDenyNone);    //读入文件内容
    DWORD dwSize = file.GetLength();
    HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, dwSize);
    LPVOID lpBuf = GlobalLock(hMem);
    file.Read(lpBuf, dwSize);
    file.Close();
    GlobalUnlock(hMem);
    IStream* pStream = NULL;
    IPicture* pPicture = NULL;

    //由HGLOBAL得到 IStream,参数 TRUE表示释放IStream的同时,释放内存
    hr = CreateStreamOnHGlobal(hMem, TRUE, &pStream);
    ASSERT(SUCCEEDED(hr));
    hr = OleLoadPicture(pStream, dwSize, TRUE, IID_IPicture, (LPVOID*)&pPicture);
    ASSERT(hr == S_OK);
    long nWidth, nHeight;            //宽高,MM_HIMETRIC 模式,单位是0.01毫米
    pPicture->get_Width(&nWidth);    //宽
    pPicture->get_Height(&nHeight);    //高

    //=========原大显示=========
    CSize sz(nWidth, nHeight);
    pDC->HIMETRICtoDP(&sz);        //转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
    pPicture->Render(pDC->m_hDC, 0, 0, sz.cx, sz.cy, 0, nHeight, nWidth, -nHeight, NULL);

    //======按窗口尺寸显示======
    //CRect rect;    GetClientRect(&rect);
    //pPicture->Render(pDC->m_hDC,0,0,rect.Width(),rect.Height(),0,nHeight,nWidth,-nHeight,NULL);
    if (pPicture)pPicture->Release();    //释放 IPicture 指针
    if (pStream)pStream->Release();    //释放 IStream 指针,同时释放了 hMem

    CoUninitialize();
}

0 篇笔记 写笔记

COM 使用OleLoadPicture加载在MFC对话框中显示JPG图像
在C盘放一张名为aa.jpg,使用MFC运行程序,点击按钮1在对话框中显示JPG图像源代码如下:void CTTDlg::OnBnClickedButton1(){ CDC* pDC = GetDC(); CoInitialize(NULL); //COM 初始化 ......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!