Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
#1

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

10.04.2012, 07:26. Просмотров 1210. Ответов 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);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2012, 07:26     Загрузка изображения в окно
Посмотрите здесь:

Qt загрузка изображения - C++
Кто-нибудь может привести пример программы (желательно файл), где можно будет загружать изображение и изменять его яркость. Я читал...

Загрузка изображения. - C++
Дайте, пожалуйста, полностью рабочий код загрузки и отображения на экране картинки формата bmp в c++ через Bitmap. Очень нужно для курсовой...

Загрузка изображения из файла (VS2005) - C++
Здравствуйте. Не подскажите какие библиотеки использовать для загрузки изображения из файла. Gdiplus не подходит. Работаю под visual studio...

Добавление изображения в окно, ограничивание размеров окна - C++
Доброго времени суток. Для реализации программы нужно добавить картинку(простейшие форматы png etc) в диалоговое окно, можете, пожалуйста,...

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

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

Загрузка изображения из БД - C# MVC
Пытаюсь открыть картинку из базы ms sql, а вместо него получаю квадратик нужного размера с ID объекта. public FileContentResult...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
10.04.2012, 14:41     Загрузка изображения в окно #2
Цитата Сообщение от 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);
}
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
10.04.2012, 16:05  [ТС]     Загрузка изображения в окно #3
появляется следующая ошибка

1>1.obj : error LNK2019: ссылка на неразрешенный внешний символ "long __stdcall DCDemoWndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?DCDemoWndProc@@YGJPAUHWND__@@IIJ@Z) в функции _WinMain@16
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
10.04.2012, 19:40     Загрузка изображения в окно #4
Цитата Сообщение от 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-ru/library/799kze2z.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)
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
11.04.2012, 07:44  [ТС]     Загрузка изображения в окно #5
Цитата Сообщение от 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;
    }
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
11.04.2012, 17:49     Загрузка изображения в окно #6
Цитата Сообщение от 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);
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
11.04.2012, 20:11  [ТС]     Загрузка изображения в окно #7
Цитата Сообщение от IPtv Посмотреть сообщение
ну какбэ winapi не сильно популярная тема на сегодня
ну ведь приложения на винду пишутся именно так или я не прав?
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
11.04.2012, 23:51     Загрузка изображения в окно #8
Цитата Сообщение от alexey31415 Посмотреть сообщение
ну ведь приложения на винду пишутся именно так или я не прав?
и да и нет. с одной стороны, даже, в недрах .net тот самый winapi, а с другой - на чистом winapi ничего серьёзного не пишут года так с 1992, когда появились MFC, OWL (а потом VLC) ну а потом и куча других библиотек, упрощающих жизнь (наверное половина программистов, начинающих с winapi, пытается и таки создаёт что-то своё на эту тему).
имхо, знать winapi весьма полезно, но для программирования лучше пользоваться любой удобной библиотекой - так быстрее и меньше ошибок (а часто просто глупых описок, вот у вас, казалось бы простейшая программа - а фиг работает; помнится первый свой каркасный пример, только что "hello world" рисовавший, сутки мучил).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2012, 08:34     Загрузка изображения в окно
Еще ссылки по теме:

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

Загрузка изображения - PHP
Здравствуйте. Подскажите, как выполнить следующую задачу (или дайте ссылку с описанием): В БД есть строковое поле image, которая хранит...

Загрузка изображения - Программирование Android
Привет всем, народ помогите пожалуйста, нужно загрузить изображения из произвольного место на устройстве, как это можно сделать? может кто...

QT загрузка изображения - C++ Qt
Добрый вечер! Есть код который загружает сначала ссылку на изображения в поле, а потом по ссылке открывает изображение. Как...

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


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

Или воспользуйтесь поиском по форуму:
alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
12.04.2012, 08:34  [ТС]     Загрузка изображения в окно #9
MFC сейчас вроде самая популярная
Yandex
Объявления
12.04.2012, 08:34     Загрузка изображения в окно
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru