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

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

10.04.2012, 07:26. Показов 2809. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru