2015-06-19 2 views
-1

У меня есть окно с использованием Win32, и в обработчике сообщений у меня есть случай для WM_PAINT, так что в окне рисуется растровое изображение. Однако при запуске растровое изображение не нарисовано, есть ли что-то, что мне не хватает? Мне нужно вручную отправить сообщение WM_PAINT?Растровое изображение не окрашивается в Win32 C++

Вот код, у меня есть: http://pastebin.com/bi48LB0U

и это WM_PAINT случай:

case WM_PAINT: 
    hDC = BeginPaint(hwnd, &ps); 
    bmp = LoadBitmap(hInst, L"C:\\example.bmp"); 
    memDCExercising = CreateCompatibleDC(hDC); 
    SelectObject(memDCExercising, bmp); 
    BitBlt(hDC, 100, 100, 500, 500, memDCExercising, 0, 0, SRCCOPY); 
    DeleteDC(memDCExercising); 
    DeleteObject(bmp); 
    EndPaint(hwnd, &ps); 
    break; 
+1

'assert (bmp! = NULL);' –

+2

Doomed to fail, LoadBitmap() принимает идентификатор ресурса, а не имя пути. Вам нужно LoadImage(). И да, всегда проверяйте возвращаемые значения winapi, assert() как минимум. –

+0

Как я могу сделать идентификатор ресурса из моего имени файла? – Pottsiex5

ответ

1

Ваш растровый не показывает, потому что ваш вызов LoadBitmap возвращается NULL, из-за инвалидом lpBitmapName аргумент. Из документации для LoadBitmap:

lpBitmapName [в]: указатель на строку с нулевым символом, который содержит имя растрового ресурса должен быть загружен. В качестве альтернативы этот параметр может состоять из идентификатора ресурса в слове младшего разряда и ноль в слове высокого порядка. Для создания этого значения можно использовать макрос MAKEINTRESOURCE.

Другими словами: LoadBitmap можно загружать только растровые изображения из Resources типа RT_BITMAP (или предварительно определенных растровых изображений, предоставляемых системой). Если вам нужно загрузить растровое изображение с диска, используйте вместо этого LoadImage.

Если вам нужно загрузить данные изображения, отличные от файлов с обычным растровым изображением, рассмотрите возможность использования Windows Imaging Component.