Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не отображается картинка 
:(
    Опции темы
Hagrael
  Дата 30.7.2011, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Здравствуйте. Все делаю, как в книге, однако картинка не отображается. Она точно находится в нужном каталоге.
Код

#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, UINT, LONG);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszCmdParam, int nCmdShow) {

    HWND hWnd;
    MSG Msg;
    WNDCLASS WndClass;

    char szClassName[] = "CodeBlocksWindowsApp";

    WndClass.style = CS_HREDRAW | CS_VREDRAW;
    WndClass.lpfnWndProc = WndProc;
    WndClass.cbClsExtra = 0;
    WndClass.cbWndExtra = 0;
    WndClass.hInstance = hInstance;
    WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    WndClass.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    WndClass.lpszMenuName = NULL;
    WndClass.lpszClassName = szClassName;

    if (!RegisterClass (&WndClass)) {
     MessageBox (NULL, "Cannot register class.", "Error", MB_OK);
        return 0;
    }

    hWnd = CreateWindow (szClassName, "Program No 1",
                        WS_OVERLAPPEDWINDOW,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        CW_USEDEFAULT, CW_USEDEFAULT,
                        NULL, NULL, hInstance, NULL);

    if (!hWnd) {
        MessageBox (NULL, "Cannot create window.", "Error", MB_OK);
        return 0;
    }

    ShowWindow (hWnd, nCmdShow);
    UpdateWindow(hWnd);

    while (GetMessage (&Msg, NULL, 0, 0)) {

        TranslateMessage(&Msg);
        DispatchMessage(&Msg);

    }

    return Msg.wParam;

}

LRESULT CALLBACK WndProc (HWND hWnd, UINT message, UINT wParam, LONG lParam) {

    HDC hDC, hCompatibleDC;
    PAINTSTRUCT PaintStruct;
    HANDLE hBitmap, hOldBitmap;
    RECT Rect;
    BITMAP Bitmap;

    switch (message) {

        case WM_PAINT:
            hDC = BeginPaint (hWnd, &PaintStruct);
            hBitmap = LoadImage (NULL, "MSDOGS.BMP", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
            GetObject (hBitmap, sizeof(BITMAP), &Bitmap);
            hCompatibleDC = CreateCompatibleDC (hDC);
            hOldBitmap = SelectObject (hCompatibleDC, hBitmap);
            GetClientRect (hWnd, &Rect);
            StretchBlt (hDC, 0, 0, Rect.right, Rect.bottom,
                        hCompatibleDC, 0, 0, Bitmap.bmWidth,
                        Bitmap.bmHeight, SRCCOPY);
            SelectObject (hCompatibleDC, hOldBitmap);
            DeleteObject (hBitmap);
            DeleteDC (hCompatibleDC);
            EndPaint (hWnd, &PaintStruct);
            return 0;

        case WM_DESTROY:
            PostQuitMessage(0);
            break;

        default:
            return DefWindowProc(hWnd, message, wParam, lParam);

    }

    return 0;

}



Заранее благодарен.
PM MAIL   Вверх
alexvs11
Дата 30.7.2011, 14:17 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



в WM_PAINT ни единой проверки возвращаемого значения, добавьте - может ясно станет
PM MAIL   Вверх
xvr
Дата 31.7.2011, 09:53 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Hagrael @  30.7.2011,  08:12 Найти цитируемый пост)
Она точно находится в нужном каталоге.

А 'нужный' - это какой? Например, в VS, когда вы запускаете программу, то текущий каталог (откуда у вас грузится MSDOGS.BMP) это каталог, где лежит файл проекта, а не каталог, где лежит исполняемый файл.

PM MAIL   Вверх
Hagrael
Дата 1.8.2011, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



xvr, в Code::Blocks то же самое.

alexvs11, я не знаю пока-что как проверить, где происходит ошибка. Но буду пытаться.

Если кто-нибудь может, пожалуйста, проверьте работоспособность кода у себя на компьютере smile 

Это сообщение отредактировал(а) Hagrael - 1.8.2011, 12:47
PM MAIL   Вверх
Hagrael
Дата 1.8.2011, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Выяснил - ошибка возникает при вызове функции LoadImage, она возвращает 0. Какие ошибки могут быть?

Добавлено @ 13:07
Файл точно находится в нужном каталоге:
Код

if (std::fopen("MSDOGS.BMP", "r")!=0) {
    DrawText(hDC, "Hello, world!", -1, &Rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}

Код высвечивает надпись.

Это сообщение отредактировал(а) Hagrael - 1.8.2011, 13:08
PM MAIL   Вверх
baldina
Дата 1.8.2011, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



- файл таки не лежит в нужном каталоге
- недостаточно прав на доступ к файлу
- файл не является правильным bmp

но тут гадать не надо, используй GetLastError()
PM MAIL   Вверх
Hagrael
Дата 1.8.2011, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Когда я пишу
Код

DWORD err = GetLastError();

в case WM_PAINT, то получаю такую ошибку:
Код

\Code Blocks\Win32 - 2\main.cpp||In function 'LRESULT WndProc(HWND__*, UINT, UINT, LONG)':|
\Code Blocks\Win32 - 2\main.cpp|87|error: jump to case label|
\Code Blocks\Win32 - 2\main.cpp|74|error:   crosses initialization of 'DWORD err'|
\Code Blocks\Win32 - 2\main.cpp|91|error: jump to case label|
\Code Blocks\Win32 - 2\main.cpp|74|error:   crosses initialization of 'DWORD err'|
\Code Blocks\Win32 - 2\main.cpp|74|warning: unused variable 'err'|
||=== Build finished: 4 errors, 1 warnings ===|


Это сообщение отредактировал(а) Hagrael - 1.8.2011, 13:28
PM MAIL   Вверх
asmdzen
Дата 1.8.2011, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



Цитата(Hagrael @  1.8.2011,  13:27 Найти цитируемый пост)
DWORD err

пропиши вне switch'а
PM MAIL   Вверх
Hagrael
Дата 1.8.2011, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 26.6.2011

Репутация: нет
Всего: нет



Выводится 0.
Код

hBitmap = LoadImage (NULL, "MSDOGS.BMP", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

DWORD err = GetLastError();
std::cout << err;

PM MAIL   Вверх
baldina
Дата 1.8.2011, 14:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 15
Всего: 101



Цитата(Hagrael @  1.8.2011,  13:42 Найти цитируемый пост)
Выводится 0.

тогда есть подозрение, что в файле не вполне корректный bmp. 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0789 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.