Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632

Загрузка изображения в окно

10.04.2012, 07:26. Показов 2870. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В программе нужно вывести изображение с раширением .bmp в окно,указываю путь к файлу в функции LoadImage,но он его то ли не так воспринимает,то ли вообще не видит
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
LRESULT CALLBACK DCDemoWndProc(HWND hWnd,UINT Message,
                            UINT wParam,UINT 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,L"C:\\Russian.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);
            return 0;
    }
    return DefWindowProc(hWnd,Message,wParam,lParam);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.04.2012, 07:26
Ответы с готовыми решениями:

Загрузка изображения в окно
Написал программу-пример из книги,которая загружает изображение в окно,при компиляции ошибок не возникает,запускается .ехе файл,но окно не...

Загрузка изображения в окно программы
подскажите, пожалуйста, нужно чтобы изображение формата .bmp, выбранное через меню программы файл->открыть, отображалось в окне. ...

Загрузка изображения в Image с сохранении соотношения сторон изображения
загрузка изображения в Image(с фиксированным размером) при этом изображение должно сохранить соотношение сторон и полностью уместится в...

8
8 / 8 / 5
Регистрация: 10.04.2012
Сообщений: 34
10.04.2012, 14:41
Цитата Сообщение от alexey31415 Посмотреть сообщение
В программе нужно вывести изображение с раширением .bmp в окно,указываю путь к файлу в функции LoadImage,но он его то ли не так воспринимает,то ли вообще не видит
C++
1
2
3
4
5
            hBitmap = LoadImage(NULL,L"C:\\Russian.BMP",//только здесь ошибка,остальное всё правильно
                                IMAGE_BITMAP,0,0,
                                LR_LOADFROMFILE);
            
}
в чём конкретно заключается ошибка? с первого взгляда код правильный (не считая того, что загружать каждый раз в WM_PAINT это кхм.. не правильно, с таким подходом можно, рано или поздно, нарваться на утечку памяти, не считая тормоза при отрисовке)

если проблема именно с загрузкой файла (формат не поддерживается) можно проверить, руководствуясь MSDN:

If the function succeeds, the return value is the handle of the newly loaded image.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
if(hBitmap == NULL)
{
    DWORD error = GetLastError();
    LPVOID msgBuf;
    
    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
                         FORMAT_MESSAGE_FROM_SYSTEM |
                         FORMAT_MESSAGE_IGNORE_INSERTS,
                        0,
                        error, 
                        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                        (LPTSTR)&msgBuf,
                        0,
                        0);
 
    MessageBox(hWnd, (LPCTSTR)msgBuf, _T("Error"), MB_OK | MB_ICONERROR);
 
    LocalFree(msgBuf);
}
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
10.04.2012, 16:05  [ТС]
появляется следующая ошибка

1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "long __stdcall DCDemoWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DCDemoWndProc@@YGJPAUHWND__@@IIJ@Z) в функции _WinMain@16
0
8 / 8 / 5
Регистрация: 10.04.2012
Сообщений: 34
10.04.2012, 19:40
Цитата Сообщение от alexey31415 Посмотреть сообщение
появляется следующая ошибка

1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "long __stdcall DCDemoWndProc(struct HWND__ *,unsigned int,)" (?DCDemoWndProc@@YGJPAUHWND__@@IIJ@Z) в функции _WinMain@16
сомтрите: LNK2019, читаем MSDN (теперь даже на русском!) - http://msdn.microsoft.com/ru-r... kze2z.aspx

смотрим какой символ не может найти линковщик: long __stdcall DCDemoWndProc(struct HWND__ *,unsigned int,unsigned int,long). вам не кажется, что это оконная процедура? а мне вот кажется. судя по коду, который вы привели - она у вас реализована, значит косяк, скорее всего, с параметрами. смотрим:
C++
1
LRESULT CALLBACK DCDemoWndProc(HWND hWnd,UINT Message, UINT wParam,UINT lParam)
на сколько помню это winapi вуду возвращаемый тип прально, первый параметр - хэндл окна - прально, сообщение вроде верно, а вот два парама вызывают сомнение (помнится WPARAM и LPARAM было в моё то время), тем более, что судя по ошибке линковщика unsigned int,long и если из UINT получить unsigned int не проблема то вот знаковый long из без знакового UINT - явно тот ещё геморрой.

итого было
C++
1
LRESULT CALLBACK DCDemoWndProc(HWND hWnd,UINT Message, UINT wParam, UINT lParam)
должно быть
C++
1
LRESULT CALLBACK DCDemoWndProc(HWND hWnd,UINT Message, WPARAM wParam, LPARAM lParam)
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
11.04.2012, 07:44  [ТС]
Цитата Сообщение от IPtv Посмотреть сообщение
смотрим какой символ не может найти линковщик: long __stdcall DCDemoWndProc(struct HWND__ *,unsigned int,unsigned int,long). вам не кажется, что это оконная процедура? а мне вот кажется. судя по коду, который вы привели - она у вас реализована, значит косяк, скорее всего, с параметрами.
я это понимаю,просто,так как только начал учить WinAPI,то не знаю на что исправить,а гугл толкового ничего не предложил

Добавлено через 8 минут
Цитата Сообщение от IPtv Посмотреть сообщение
(не считая того, что загружать каждый раз в WM_PAINT это кхм.. не правильно, с таким подходом можно, рано или поздно, нарваться на утечку памяти, не считая тормоза при отрисовке)
я просто написал пример из книги,там автор тоже самое говорил,что это лишь для наглядности пример

а теперь ещё более дивные чудеса,программа компилируется,запускается .exe файл,но окно не появляется,в том числе и всплывающее окно,которое должно появиться,если какие-то проблемы,в моём случае какой-то один из двух MessageBox
C++
1
2
3
4
5
6
7
8
9
10
11
if(!RegisterClass(&WndClass))
    {
        MessageBox(NULL,L"Cannot register class",L"Error",MB_OK);
        return 0;
    }
 
if(!hWnd)
    {
        MessageBox(NULL,L"Cannot create window",L"Error",MB_OK);
        return 0;
    }
0
8 / 8 / 5
Регистрация: 10.04.2012
Сообщений: 34
11.04.2012, 17:49
Цитата Сообщение от alexey31415 Посмотреть сообщение
я это понимаю,просто,так как только начал учить WinAPI,то не знаю на что исправить,а гугл толкового ничего не предложил
ну какбэ winapi не сильно популярная тема на сегодня (и msdn ваше всё). так что тут или книжка у вас слегка врёт (кстати а что за она?), либо вы не правильно переписали пример. в первом случае всё будет весело - искать чужие ошибки не зная предметной области, хыхы, ну зато знания будут лучше, если победите все ошибки в итоге.

Цитата Сообщение от alexey31415 Посмотреть сообщение
я просто написал пример из книги,там автор тоже самое говорил,что это лишь для наглядности пример
так не вопрос, форум для начинающих, все учатся. это проф занудство вылезло без обид.

Цитата Сообщение от alexey31415 Посмотреть сообщение
а теперь ещё более дивные чудеса,программа компилируется,запускается .exe файл,но окно не появляется,в том числе и всплывающее окно,которое должно появиться,если какие-то проблемы,в моём случае какой-то один из двух MessageBox
C++
1
2
3
4
5
6
7
8
9
10
11
if(!RegisterClass(&WndClass))
    {
        MessageBox(NULL,L"Cannot register class",L"Error",MB_OK);
        return 0;
    }
 
if(!hWnd)
    {
        MessageBox(NULL,L"Cannot create window",L"Error",MB_OK);
        return 0;
    }
попробуйте создать стандартный проект win32 и сравнить код созданный им со своим.
если окно не появляется и не срабатывают проверки на ошибки - скорее всего окно тупо свёрнуто.
попробуйте пошагово пройтись (F10) по коду, посмотреть что в переменных лежит, что возвращают функции (вкладки autos/locals/watch).
если совсем уж замучаетесь - скиньте проект, посмотрим что там (только ncb pdb и прочие obj файлы не забудьте удалить) не так.

Добавлено через 3 минуты
Цитата Сообщение от alexey31415 Посмотреть сообщение
а теперь ещё более дивные чудеса,программа компилируется,запускается .exe файл,но окно не появляется
это, кстати, стандартное поведение winapi - если где-то, что-то накосячено, никаких угрожающих сообщений и падений всего что можно - просто ничего не происходит а ошибку можно вытянуть через
C++
1
DWORD GetLastError(void);
1
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
11.04.2012, 20:11  [ТС]
Цитата Сообщение от IPtv Посмотреть сообщение
ну какбэ winapi не сильно популярная тема на сегодня
ну ведь приложения на винду пишутся именно так или я не прав?
0
8 / 8 / 5
Регистрация: 10.04.2012
Сообщений: 34
11.04.2012, 23:51
Цитата Сообщение от alexey31415 Посмотреть сообщение
ну ведь приложения на винду пишутся именно так или я не прав?
и да и нет. с одной стороны, даже, в недрах .net тот самый winapi, а с другой - на чистом winapi ничего серьёзного не пишут года так с 1992, когда появились MFC, OWL (а потом VLC) ну а потом и куча других библиотек, упрощающих жизнь (наверное половина программистов, начинающих с winapi, пытается и таки создаёт что-то своё на эту тему).
имхо, знать winapi весьма полезно, но для программирования лучше пользоваться любой удобной библиотекой - так быстрее и меньше ошибок (а часто просто глупых описок, вот у вас, казалось бы простейшая программа - а фиг работает; помнится первый свой каркасный пример, только что "hello world" рисовавший, сутки мучил).
0
 Аватар для alexey31415
60 / 60 / 7
Регистрация: 16.05.2010
Сообщений: 632
12.04.2012, 08:34  [ТС]
MFC сейчас вроде самая популярная
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.04.2012, 08:34
Помогаю со студенческими работами здесь

Загрузка картинок с сжатием и конвертированием изображения + массовая загрузка
Приветствую форумчане Я можно сказать что новичок в PHP но сайты пишу уже давно, и столкнулся с тем что мне нужно огромный архив на...

Загрузка изображения (только изображения)
Нужно обычная форма через которую надо загружать изображение в папку load Вот что я пока что написал : <!DOCTYPE HTML PUBLIC...

загрузка изображения
<?PHP include ("blocks/bd.php"); $nomer = $_POST; $nlf = $_POST; $zag = $_REQUEST; ...

Загрузка изображения
Пытаюсь загрузить изображение во флеш Нашёл код ... var symbol_logo:Class; ... Работает, но если я делаю это в функции, в...

Загрузка изображения в Qt
Здравствуйте! Подскажите, пожалуйста, нужно загружать изображение в Qt, а затем анализировать нажатие мыши на него. Слышал про способ с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru