【发布时间】:2022-01-11 20:10:09
【问题描述】:
我正在尝试在 Win32 应用程序中加载位图,但由于某些奇怪的原因,位图无法加载。这是我目前所拥有的:
HANDLE hImg = LoadImageW(
NULL,
L"img.bmp",
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE
);
if (hImg == NULL) {
std::cout << GetLastError();
}
使用-Wall -municode 在 GCC 8.1.0 上编译。
没有任何内容输出到控制台,因此没有错误。但是,图像永远不会出现。这些问题似乎解决了类似的问题,但我查看了它们并找不到解决方案:
- I cannot load image from folder using win32
- Win32 application. HBITMAP LoadImage fails to load anything
问题可能出在哪里?
完整代码:
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <iostream>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow) {
const wchar_t CLASS_NAME[] = L"Window Class";
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(
0,
CLASS_NAME,
L"My Application",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL,
NULL,
hInstance,
NULL
);
if (hwnd == NULL) {
return 0;
}
ShowWindow(hwnd, nCmdShow);
HANDLE hImg = LoadImageW(
NULL,
L"img.bmp",
IMAGE_BITMAP,
0,
0,
LR_LOADFROMFILE
);
if (hImg == NULL) {
std::cout << GetLastError();
}
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT: {
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
EndPaint(hwnd, &ps);
break;
}
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
【问题讨论】:
-
你希望这段代码做什么?
-
加载位图。
-
你在某处有一些查看代码吗?也许错误在于您如何查看它
-
它不应该显示图像。
-
你希望代码能做什么对我来说完全是个谜。显然它成功地加载了图像,但是你决定不对那个图像做任何事情,并得出完全人为的结论。曾经有一段时间,提问者需要证明对问题领域的熟悉程度,以防止提出对任何人都无用的问题。