从资源图像文件设置壁纸
Set wallpaper from resource image file
我想从资源图片设置背景墙纸。我找到并尝试了这段代码,但 FindResource()
找不到任何东西。有人可以帮我吗?
HINSTANCE hInstance = GetModuleHandle(NULL);
std::cout << hInstance << std::endl;
HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(IDB_PNG1), RT_BITMAP);
std::cout << hResInfo<< std::endl;
HGLOBAL hRes = LoadResource(hInstance, hResInfo);
std::cout << hRes << std::endl;
LPVOID memRes = LockResource(hResInfo);
DWORD sizeRes = SizeofResource(hInstance, hResInfo);
std::cout << memRes<< std::endl;
std::cout << sizeRes<< std::endl;
HANDLE hFile = CreateFile("C:\Users\Asus\Desktop\test.png", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwWritten = 0;
WriteFile(hFile, memRes, sizeRes, &dwWritten, NULL);
CloseHandle(hFile);
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) "C:\Users\Asus\Desktop\test.png", SPIF_UPDATEINIFILE);
resource file
#include "resource.h"
IDI_ICON1 ICON "chrome.ico"
IDB_PNG1 PNG "C:\Users\Asus\Pictures\jano.png"
resource.h
#define IDI_ICON1 101
#define IDB_PNG1 102
RCDATA resource存储整数或字符串,数据由LoadResource返回。
用语句:IDR_PNG1 RCDATA {"pngwing.png"}
,
LoadResource returns pngwing.png 而 LockResource 检索指向指定 内存中的资源。
你的代码有两个错误:
您正在创建类型为 PNG
的 IDB_PNG1
资源,但您要求 FindResource()
查找类型为 BITMAP
的资源.类型需要匹配,因此在对 FindResource()
的调用中将 RT_BITMAP
替换为 TEXT("PNG")
。或者,在 .rc
文件中使用 RCDATA
而不是 PNG
,然后在对 FindResource()
.
您将错误的句柄传递给 LockResource()
。您正在传递由 FindResource()
返回的 hResInfo
,但您需要传递由 LoadResource()
.
返回的 hRes
我想从资源图片设置背景墙纸。我找到并尝试了这段代码,但 FindResource()
找不到任何东西。有人可以帮我吗?
HINSTANCE hInstance = GetModuleHandle(NULL);
std::cout << hInstance << std::endl;
HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(IDB_PNG1), RT_BITMAP);
std::cout << hResInfo<< std::endl;
HGLOBAL hRes = LoadResource(hInstance, hResInfo);
std::cout << hRes << std::endl;
LPVOID memRes = LockResource(hResInfo);
DWORD sizeRes = SizeofResource(hInstance, hResInfo);
std::cout << memRes<< std::endl;
std::cout << sizeRes<< std::endl;
HANDLE hFile = CreateFile("C:\Users\Asus\Desktop\test.png", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
DWORD dwWritten = 0;
WriteFile(hFile, memRes, sizeRes, &dwWritten, NULL);
CloseHandle(hFile);
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (PVOID) "C:\Users\Asus\Desktop\test.png", SPIF_UPDATEINIFILE);
resource file
#include "resource.h"
IDI_ICON1 ICON "chrome.ico"
IDB_PNG1 PNG "C:\Users\Asus\Pictures\jano.png"
resource.h
#define IDI_ICON1 101
#define IDB_PNG1 102
RCDATA resource存储整数或字符串,数据由LoadResource返回。
用语句:IDR_PNG1 RCDATA {"pngwing.png"}
,
LoadResource returns pngwing.png 而 LockResource 检索指向指定 内存中的资源。
你的代码有两个错误:
您正在创建类型为
PNG
的IDB_PNG1
资源,但您要求FindResource()
查找类型为BITMAP
的资源.类型需要匹配,因此在对FindResource()
的调用中将RT_BITMAP
替换为TEXT("PNG")
。或者,在.rc
文件中使用RCDATA
而不是PNG
,然后在对FindResource()
.您将错误的句柄传递给
返回的LockResource()
。您正在传递由FindResource()
返回的hResInfo
,但您需要传递由LoadResource()
.hRes