我想從資源影像中設定背景墻紙。我找到并嘗試了這段代碼,但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);
資源檔案
#include "resource.h"
IDI_ICON1 ICON "chrome.ico"
IDB_PNG1 PNG "C:\\Users\\Asus\\Pictures\\jano.png"
資源.h
#define IDI_ICON1 101
#define IDB_PNG1 102
uj5u.com熱心網友回復:
您的代碼中有兩個錯誤:
您將
IDB_PNG1資源創建為 typePNG,但您要求FindResource()查找型別為的資源BITMAP。型別需要匹配,所以在呼叫中RT_BITMAP替換為. 或者,在檔案中使用代替,然后在呼叫.TEXT("PNG")FindResource()RCDATAPNG.rcRT_RCDATART_BITMAP"PNG"FindResource()您將錯誤的句柄傳遞給
LockResource(). 您傳入的hResInfo是由 回傳的FindResource(),但您需要傳入的hRes是由 回傳的LoadResource()。
uj5u.com熱心網友回復:
RCDATA 資源存盤整數或字串,資料由LoadResource回傳。
使用陳述句:IDR_PNG1 RCDATA {"pngwing.png"},
LoadResource回傳pngwing.png而LockResource檢索指向記憶體中指定資源的指標。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/474443.html
