zoukankan      html  css  js  c++  java
  • 使用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
    知识共享,欢迎转载。
  • 相关阅读:
    小程序生命周期
    async/await实现图片的串行、并行加载
    移动应用区别
    小程序组件
    secureCRT
    LInux
    java实现八大排序算法
    求出所有排列 去重全排列 回溯算法
    二分法基本思想
    异常
  • 原文地址:https://www.cnblogs.com/lgh1992314/p/6616371.html
Copyright © 2011-2022 走看看