MFC怎么加载路径中的png图像

MFC怎么加载路径中的png图像,第1张

首先,在Resource.h里面定义ID:

例如:

#define IDB_BG                 131

然后在rc文件里面添加代码:

IDB_BG                  RCPNG                   "res//背景.png"

其中,RCPNG为自定义资源类型的名称

然后需要CImage这个ATL类,以及以下这个方法:

//////////////////////////////////////////////////////////////////////////

/// 从资源文件中加载图片

/// @param [in] pImage 图片指针

/// @param [in] nResID 资源号

/// @param [in] lpTyp 资源类型

//////////////////////////////////////////////////////////////////////////

static bool LoadImageFromResource(IN CImage* pImage,

                           IN UINT nResID, 

                           IN LPCSTR 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

}

补充:微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

方法一:通过qtcreator新建一个文件filename.qrc,

1、将图片添加到filename.qrc文件中:选择Add Prefix得到/new/prefix1,简单点改为/,再选Add Files,将文件添加进去,如images/photo.png

或者用文本编辑filename.qrc文件,改为

images/photo.png

2、将filename.qrc添加到工程中,在*.pro中添加:

RESOURCES += filename.qrc

3、在代码中添加

setWindowIcon(QIcon(":/images/photo.png"))//为窗口标题添加图片,注意要路径要添加 ": "

方法二:创建rc文件

1 在工程目录里创建文件 logo.rc,里面添加一行

IDI_ICON1 ICON DISCARDABLE "logo.ico"

2 将logo.ico文件放到工程目录里,与logo.rc同一目录

3 在*.pro文件里添加一行

RC_FILE = logo.rc

4 在main.cpp文件的构造函数里添加一行

setWindowIcon(QIcon("./logo.ico"))//窗口标题设置图片,同时也为应用程序设置图标

我不知道你说的图标是指哪一方面,是生成的exe可执行文件的图标,还是在执行过程中,窗口的图标,两个我都说一下:

1.生成的exe可执行文件的图标

找一个ico文件,假设在.pro所在当前目录下为main.ico

写一个.rc文件,比如为main.rc内容如下:

IDI_ICON1 ICONDISCARDABLE "main.ico"

然后在.pro文件中加入:

win32:RC_FILE = main.rc

然后再编译,就能看到可执行程序加上了图标了。

2.在程序中添加图标,比如窗口的左上方的图标,就是WindowIcon

setWindowIcon(QIcon(QPixmap(":/images/icon.png")))

这里的图标就是存放在images文件夹下的图标文件,在用这句话之前必须要写.qrc文件,就是XML格式的资源文件,举例如下:

<!DOCTYPE RCC><RCC version="1.0">

<qresource>

<file>images/icon.png</file>

</qresource>

</RCC>

先解释这么多


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11464275.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存