2016-03-04 4 views
0

Я пытаюсь выяснить, почему я не могу загрузить изображение с ресурса.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"

+2

'LoadImageW (NULL, MAKEINTRESOURCEW (IDB_RESOURCE), IMAGE_BITMAP, 100, 100, LR_CREATEDIBSECTION | LR_LOADFROMFILE);' 'LR_LOADFROMFILE' для автономных файлов изображений, а не внедренных ресурсов, так что это должно быть удалено. hInst не должен быть NULL для ваших собственных ресурсов - если эти ресурсы находятся в вашем exe, получите hInst, вызвав 'GetModuleHandle (NULL)' –

+0

@HansPassant IDB_RESOURCE является «resource.bmp», нет идентификатора ресурса для «filename.bmp ». –

ответ

0

Проблема, как ответил Кристофер Oicles, что 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

Спасибо.

 Смежные вопросы

  • Нет связанных вопросов^_^