Windows — отладка C ++ LoadImage () и пропуск точек останова

Я пытаюсь выяснить, почему я не могу загрузить изображение с ресурса.

  • Изображения работают, когда lpszName является именем файла, а при смене ресурса — нет.

  • Изображения создаются одинаково (можно поменять, та же проблема)

  • Изображения находятся внутри файлов Resource и 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"

0

Решение

Проблема, на которую ответил Кристофер Оиклз, заключалась в том, что LR_LOADFROMFILE не нужен.

Может быть полезным для других:

  • Чтобы загрузить изображение из имени файла (с помощью примера LoadImage ()):
LoadImage(
NULL,                           // NULL for load image via filename
L("directory\\filename.bmp"),   // String to filename
IMAGE_BITMAP                    // Flag for loading bitmap
0,                              // 0 Should use the images actual width
0,                              // 0 Should use the images actual height
LR_LOADFROMFILE                 // Flag for loading from file
);
  • Чтобы загрузить изображение из ресурса (например, с помощью LoadImage ()):
LoadImage(
hInstance,                      // hInstance to the file containing the resource
MAKEINTRESOURCE(IDB_RESOURCE),  // Resource definition
IMAGE_BITMAP                    // Flag for loading bitmap
0,                              // 0 Should use the images actual width
0,                              // 0 Should use the images actual height
LR_CREATEDIBSECTION             // Do not use LR_LOADFROMFILE if it is a resource
);

Resourcefile.h

#define IDB_RESOURCE 101                         // Resource ID, and number

Resourcescript.rc

#include "Resourcefile.h"IDB_RESOURCE BITMAP "directory\\filename.bmp"    // Resource ID, type, and filename

Спасибо.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]