0 / 0 / 0
Регистрация: 27.04.2023
Сообщений: 5
1

Вставка изображения в окно 2

26.09.2023, 12:11. Показов 1117. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
LoadImage не загружает изображение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
HDC hdc, hCompatibleDC;
    PAINTSTRUCT ps;
    RECT rect;
    BITMAP bmp;         //HBITMAP bmp;
    HANDLE hBitmap, hOldBitmap;
 
    switch (message)
    {
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            
            hBitmap = LoadImage(NULL, L"Crysis.bmp",IMAGE_BITMAP, 0,0,LR_LOADFROMFILE);
 
             if(!hBitmap)  // the load failed (couldn't find file?  Invalid file?)
             MessageBox(0, L"Ошибка", L"Ошибка", MB_ICONINFORMATION|MB_OK);
Выходить MessageBox: Ошибка.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2023, 12:11
Ответы с готовыми решениями:

Вставка изображения в окно
Подскажите, пожалуйста, как вставлять изображения в окошко на WINAPI, подробно, если можно

Visual C++ - Вставка jpeg изображения в диалоговое окно для обработки MFC
https://www.cyberforum.ru/visual-cpp/thread1334023.html

Вставка в чужое окно
Вот есть у меня какая-то открытая прога, каким чудом можно в неё (конечно же при условии что в ней...

Вставка текста в окно на Java + OpenGL
Здравствуйте. Хотелось бы узнать, какие есть варианты вставки текста в окно на Java + OpenGL. На...

Вставка jpeg изображения в диалоговое окно для обработки MFC
Доброго времени суток!!! Начинаю осваивать MFC. Есть приложение, состоящее из одного диалогового...

10
237 / 89 / 24
Регистрация: 07.01.2023
Сообщений: 354
26.09.2023, 14:41 2
а что GetLastError интересного рассказывает?
0
0 / 0 / 0
Регистрация: 27.04.2023
Сообщений: 5
26.09.2023, 17:09  [ТС] 3
Про GetLastError пока не знаю. Но в отладчике (Watch) показывает 0.
0
120 / 84 / 44
Регистрация: 24.06.2023
Сообщений: 258
26.09.2023, 17:20 4
Цитата Сообщение от abcbaman Посмотреть сообщение
hBitmap = LoadImage(NULL, L"Crysis.bmp",IMAGE_BITMAP, 0,0,LR_LOADFROMFILE)
на hInst заменить?
0
0 / 0 / 0
Регистрация: 27.04.2023
Сообщений: 5
26.09.2023, 18:02  [ТС] 5
Функцией GetLastError воспользоваться не смогу -- не умею.
Но вставил DWORD dw = GetLastError();
В отладчике показывает dw 3435973836 unsigned long
0
Brainsbreaker
897 / 373 / 53
Регистрация: 01.02.2011
Сообщений: 1,604
26.09.2023, 20:51 6
В данном случае у тебя есть два варианта:

1 - при работе из-под отладчика поместить изображение в каталог с исходником
2 - при работе самостоятельного приложения изображение должно быть, как минимум рядом с ним
0
2350 / 810 / 309
Регистрация: 10.02.2018
Сообщений: 1,903
27.09.2023, 08:15 7
Цитата Сообщение от abcbaman Посмотреть сообщение
Функцией GetLastError воспользоваться не смогу -- не умею.
Но вставил DWORD dw = GetLastError();
В отладчике показывает dw 3435973836 unsigned long
Да тут ничего сложного: получили код - посмотрели, что означает (Debug system error codes).
В вашем конкретном случае код ничего не означает, вернее это не код ошибки. Скорее всего вы остановились отладчиком на процитированной вами строчке, но не выполнили её. В релизе переменная будет заполнена произвольным мусором, в отладчике волшебным числом (см. подраздел "Debug values"). Если перевести число 3435973836 из десятеричной системы в шестнадцатеричную, то как раз получается CCCCCCCC.
0
0 / 0 / 0
Регистрация: 27.04.2023
Сообщений: 5
27.09.2023, 13:02  [ТС] 8
Да я изображение везде рассовал, где можно было ... Не работает...

Добавлено через 1 час 11 минут
Нашел интернете как смотреть GetLastError через переменную $ERR. Показывает 2.
ERROR_FILE_NOT_FOUND 2 (0x2) The system cannot find the file specified.

Добавлено через 21 минуту
Т.е. проблема в L"Crysis.bmp" ?... Указатель на символьную строку с нулем в конце. А у меня что?

Добавлено через 15 минут
Пробовал разные варианты пути к файлу изображения.
0
0 / 0 / 0
Регистрация: 27.04.2023
Сообщений: 5
28.09.2023, 11:03  [ТС] 9
Лазил по интернету. Тыкал, мыкал. Файл размещал в разные места, Слэши разные пробовал. Сработало
C++
1
L"Z://Crysis.bmp"
!!!
Всем спасибо за внимание.
А что имеем? Абсолютный путь и двойной слэш... Может кто сталкивался с таким?...

Добавлено через 9 минут
C++
1
 L"Z://My Docs//Visual Studio 2012//Projects//3//3//BMP//Win32Project1//Debug//Crysis.bmp"
, почему-то не работает...

Добавлено через 3 минуты
Может кто-нибудь прокоментировать?

Добавлено через 31 минуту
C++
1
hBitmap = LoadImage(NULL, L"Crysis.bmp",IMAGE_BITMAP, 0,0,LR_LOADFROMFILE);
Заработало. Вообще начало работать (На диске Z) когда я файл еще раз открыл в Paint-е и заново сохранил.
Заработало. Замененный файл скопировал в папку с exe-шником. Тоже сработало...
Файл изображения видимо первый раз был некорректно сохранен что ли?...
0
103 / 90 / 18
Регистрация: 30.06.2020
Сообщений: 815
29.09.2023, 20:55 10
abcbaman, в визуалке путь хитрый по умолчанию стоит. По нормальному всё должно быть в одном месте, а в визуалке по умолчанию вывернуто. Или переставляется там где-то в настройках или вот рядом с мейном проекта. Не в папке, где экзешники собираются и не рядом с .sln, а внутри папки исходников проекта. Почему так - не знаю. Как раз может туда вы и забыли положить картинку в начале и пошли через абсолютный путь. Потом надо будет уже нормально держать рядом с экзешником
0
374 / 252 / 59
Регистрация: 09.03.2016
Сообщений: 2,263
30.09.2023, 02:46 11
Это адрес файла лежащего вместе с экзешником. Не будет непоняток.

C++
1
2
3
4
 static wchar_t restart[512] = { '\0' };
     GetModuleFileName(GetModuleHandle(NULL), restart, 512);
*(wcsrchr(restart, L'\\') + 1) = '\0'; // ====== ноль вместо последнего слеша отрезать экзешник  (wchar_t)
         wcscat(restart, L"FolderFor.txt");
============
Вот перетащение файла на значёк экзешника (можно проще. это я лихуя дал)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int _tmain(int argc, _TCHAR* argv[]){
 
char in_filename[260]; // <------- Под имя исходного файла char
if (argc == 2){// Если перетащил на экзешник файл то
 
        //------------------------------------
        char *szTo = new char[wcslen(argv[1]) + 1]; //----------------Грузить  (перетаскиванием)
        szTo[wcslen(argv[1])] = '\0';
        WideCharToMultiByte(CP_ACP, 0, argv[1], -1, szTo, wcslen(argv[1]), NULL, NULL);
        memcpy(in_filename, szTo, strlen(szTo));
        in_filename[strlen(szTo)] = '\0';
        delete[] szTo;
    }
Добавлено через 1 минуту
Не надо писать ни каких путей. Путаться.

Добавлено через 7 минут
Если писать просто так L"Crysis.bmp"
То надо запускать экзешник двумя щелчками мыши. Иначе не найдёт.

Добавлено через 31 минуту
Ещё способ...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void Set_Dialog(){
//================================ это работает хоть в char...  хоть во wchar_t
    //  http://www.cplusplus.com/forum/windows/169960/
//http://vsokovikov.narod.ru/New_MSDN_API/Com_dlg_lib/str_openfilename.htm
   OPENFILENAME ofn;
                  //char szFile[260]; <--- Глобально
    ZeroMemory(&ofn, sizeof(ofn));
    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = 0; //window.getSystemHandle();
    ofn.lpstrFile = (LPTSTR)safe::szFile;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = sizeof(safe::szFile);
    //ofn.lpstrFilter = (LPCTSTR)"Pictures\0*.jpg\0Any File\0*.*\0";
ofn.lpstrFilter =(LPCTSTR)"JPEG files(*.jpg)\0*.jpg\0PNG files(0*.png)\0*.png\0All files(*.*)\0*.*\0\0";
    ofn.nFilterIndex = 1;
    ofn.lpstrFileTitle = NULL;
    ofn.nMaxFileTitle = 0;
    ofn.lpstrInitialDir = NULL;
    ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
        // Display the Open dialog box.
//if (GetOpenFileNameW ((LPOPENFILENAMEW )&ofn) != true) // для wchar_t
    if (!GetOpenFileNameA((LPOPENFILENAMEA)&ofn))
    { safe::ex_it=true; } }
0
30.09.2023, 02:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.09.2023, 02:46
Помогаю со студенческими работами здесь

Вставка изображения
Смысл в том что ..... Есть 10 картинок с названием 0,1,2,3 и тд.... при нажатие определенной кнопки...

Вставка изображения
Как можно прикрепить изображение с заданием в сообщение можете объяснить?

StringGird вставка изображения
Вообщем есть вот такой код void __fastcall TForm1::FormCreate(TObject *Sender) {...

Вставка изображения в listbox
как сделать так чтоб в рядом со строкой текста в листбоксе поместить иображение и при нажатии на...

Вставка изображения в RxRichEdit
Здравствуйте! В поисках способа вставки текста и изображения в один компонент наткнулся на...

Вставка текста в чужое окно
У меня есть чужая программа в которой имеется пустое поле для ввода в котором есть описание...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru