Я пытаюсь выяснить, почему я не могу загрузить изображение с ресурса.C++ Debugging LoadImage() и пропуски точек останова
Изображения работают, когда lpszName - это имя файла, при замене на ресурс у них нет.
Изображения создаются таким же образом (можно поменять местами, то же проблема)
Изображения расположены в файлах ресурсов и Resource.rc.
Код:
LRESULT CALLBACK WndProc(HWND hWinMain, UINT message, WPARAM wParam, LPARAM lParam)
{
DWORD
lastError;
static HDC
hdcFromResource,
hdcFromFilename;
HBITMAP
hFromResource,
hFromResourcePrevious,
hFromFilename,
hFromFilenamePrevious;
HDC
hdc;
PAINTSTRUCT ps;
switch (message)
{
case WM_CREATE:
hdc = GetDC(hWinMain);
hdcFromFilename = CreateCompatibleDC(hdc);
hdcFromResource = CreateCompatibleDC(hdc);
ReleaseDC(hWinMain, hdc);
hFromFilename = (HBITMAP)LoadImageW(NULL, (L"filename.bmp"), IMAGE_BITMAP, 100, 100, LR_LOADFROMFILE);
if (!hFromFilename)
{
// ERROR HANDELING
}
hFromFilenamePrevious = (HBITMAP)SelectObject(hdcFromFilename, hFromFilename);
DeleteObject(hFromFilename);
DeleteObject(hFromFilenamePrevious);
hFromResource = (HBITMAP)LoadImageW(NULL, MAKEINTRESOURCEW(IDB_RESOURCE), IMAGE_BITMAP, 100, 100, LR_CREATEDIBSECTION | LR_LOADFROMFILE);
lastError = GetLastError();
lastError;
hFromResourcePrevious = (HBITMAP)SelectObject(hdcFromResource, hFromResource);
DeleteObject(hFromResource);
DeleteObject(hFromResourcePrevious);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWinMain, &ps);
BitBlt(hdc, 0, 0, 100, 100, hdcFromFilename, 0, 0, SRCCOPY);
BitBlt(hdc, 100, 100, 100, 100, hdcFromResource, 0, 0, SRCCOPY);
EndPaint(hWinMain, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hWinMain, message, wParam, lParam);
}
if(!hFromFilename)
никогда не срабатывает, загружается ли изображение или нет.Ни один из контрольных точек после неудачных перерывов нагрузки изображения (контрольные точки через WM_CREATE, другие точки останова в других функций не работает в нормальном режиме)
Я не уверен, как легко читать GetLastError без прерывания.
Resource.h #define IDB_RESOURCE 101
Resource.rc #define IDB_RESOURCE BITMAP DISCARDABLE "resource.bmp"
'LoadImageW (NULL, MAKEINTRESOURCEW (IDB_RESOURCE), IMAGE_BITMAP, 100, 100, LR_CREATEDIBSECTION | LR_LOADFROMFILE);' 'LR_LOADFROMFILE' для автономных файлов изображений, а не внедренных ресурсов, так что это должно быть удалено. hInst не должен быть NULL для ваших собственных ресурсов - если эти ресурсы находятся в вашем exe, получите hInst, вызвав 'GetModuleHandle (NULL)' –
@HansPassant IDB_RESOURCE является «resource.bmp», нет идентификатора ресурса для «filename.bmp ». –