• 使用CStatic显示图片(bmp、ico、png)


    一、显示bmp及ico

    //h文件

    CStatic m_static;


    //cpp文件

    CBitmap bitmap;
    bitmap.LoadBitmapW(IDB_BITMAP); //加载位图
    BITMAP bmp;
    bitmap.GetBitmap(&bmp); //获取位图参数
    CRect rect(10,10,10+bmp.bmWidth,10+bmp.bmHeight); //显示区域
    m_static.Create(L"",WS_CHILD | SS_BITMAP | SS_CENTERIMAGE,rect,this,12345); //创建static


    //关联控件和位图,其中 IDB_BITMAP 是加载的位图资源ID号
    m_static.SetBitmap(::LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP)));

    m_static.ShowWindow(true);

    显示ICO和BMP是一个道理,函数改成LoadIcon 、SetIcon等就行了

    二、路径动态加载方式显示PNG

    //h文件

    #include "atlimage.h"

    CStatic m_static;


    //cpp文件

    CImage image;
    image.Load(_T("res/node.png")); //以相对路径加载PNG图片
    HBITMAP hBmp = image.Detach();


    CRect rect(50,50,50+image.GetWidth(),50+image.GetHeight());
    m_static.Create(L"", SS_BITMAP | SS_CENTERIMAGE,rect,this,12346);
    m_static.SetBitmap(hBmp);
    m_static.ShowWindow(true);


    三、静态加载资源方式显示PNG

    //h文件

    #include "atlimage.h"

    CStatic m_static;


    //cpp文件

    CImage image;
    LoadImageFromIDResource(&image,IDB_PNG,_T("PNG")); //自定义函数加载资源
    HBITMAP hBmp = image.Detach();


    CRect rect(50,50,50+image.GetWidth(),50+image.GetHeight());
    m_static.Create(L"", SS_BITMAP | SS_CENTERIMAGE,rect,this,12346);
    m_static.SetBitmap(hBmp);
    m_static.ShowWindow(true);

    其中LoadImageFromIDResource实现函数如下:

    BOOL LoadImageFromIDResource(CImage *pImage, UINT nResID,LPCTSTR lpTyp)
    {
    if ( pImage == NULL)
    return false;
    pImage->Destroy();
    // 查找资源
    HRSRC hRsrc = ::FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(nResID), lpTyp);
    if (hRsrc == NULL)
    return false;
    // 加载资源
    HGLOBAL hImgData = ::LoadResource(AfxGetResourceHandle(), hRsrc);
    if (hImgData == NULL)
    {
    ::FreeResource(hImgData);
    return false;
    }
    // 锁定内存中的指定资源
    LPVOID lpVoid = ::LockResource(hImgData);
    LPSTREAM pStream = NULL;
    DWORD dwSize = ::SizeofResource(AfxGetResourceHandle(), hRsrc);
    HGLOBAL hNew = ::GlobalAlloc(GHND, dwSize);
    LPBYTE lpByte = (LPBYTE)::GlobalLock(hNew);
    ::memcpy(lpByte, lpVoid, dwSize);
    // 解除内存中的指定资源
    ::GlobalUnlock(hNew);
    // 从指定内存创建流对象
    HRESULT ht = ::CreateStreamOnHGlobal(hNew, TRUE, &pStream);
    if ( ht != S_OK )
    {
    GlobalFree(hNew);
    }
    else
    {
    // 加载图片
    pImage->Load(pStream);
    GlobalFree(hNew);
    }
    // 释放资源
    ::FreeResource(hImgData);
    return true;
    }

    Keep it simple!
    作者:N3verL4nd
    知识共享,欢迎转载。
  • 相关阅读:
    【转】虚函数什么情况下会内联
    构造函数不能为虚函数的原因
    《python编程》第四章——文件和目录工具
    《python编程》第三章笔记——脚本运行上下文
    《python编程》第二章笔记
    《Python编程》第一章笔记
    报错:IndentationError:unindent does not match any outer indentation level
    报错:SyntaxError: Non-ASCII character 'xe7' in file:
    1-2、make_db_file.py
    1-1.initdata.py
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/6616371.html
Copyright © 2020-2023  润新知