Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.04.2023, 04:05   #1
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию Поместить значок/иконку в рабочую область диалогового окна.

Здравствуйте! Хочу попробовать поместить некий значок в рабочую область диалогового окна, но что-то не выходит. Пробовал так:
Код:
			
case WM_PAINT:
{
	PAINTSTRUCT ps;
	HDC hdc = BeginPaint(hDlg, &ps);
       hBitmap = (HBITMAP)LoadImage(0, TEXT("E:\\P\\CreateTemplate1\\CreateTemplate1\\heart48.png"), 
                                                        IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
	hMemDC = CreateCompatibleDC(hdc);
	hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
	BITMAP bm;
	GetObject(hBitmap, sizeof(BITMAP), &bm);
	BitBlt(hdc, 2, 2, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0, SRCCOPY);
	SelectObject(hMemDC, hOldBitmap);
	DeleteDC(hMemDC);

	EndPaint(hDlg, &ps);
	return TRUE;
}
Но битмап не создаётся и ничего не выводиться. Хочу получить результат как в MessageBox(), когда выставляется флаг MB_ICONWARNING... А какие варианты расположения файла в рабочей области окна могут быть LoadIcon, LoadBitmap... не сработают?
apofioz вне форума Ответить с цитированием
Старый 14.04.2023, 10:35   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

а файлы расширением *.PNG - они прозрачность имеют? и вообще поддерживаются WinAPI?
---------------
может, попробуй не из папки файл тащить, а вшить в ресурс *.RES и уж потом из ресурса вытаскивать иконку нужную. как говорится, всё своё ношу с собой: я бы не стал из какой-то папки файл подгружать - мало ли, может, к ней доступ ограничен будет и файл не подхватит.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.

Последний раз редактировалось NetSpace; 14.04.2023 в 10:38.
NetSpace вне форума Ответить с цитированием
Старый 14.04.2023, 12:06   #3
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

WinAPI LoadImage поддерживает для загрузки только BMP и ICO файлы. Для работы с PNG читайте вот это
macomics вне форума Ответить с цитированием
Старый 14.04.2023, 23:31   #4
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от NetSpace Посмотреть сообщение
а файлы расширением *.PNG - они прозрачность имеют? и вообще поддерживаются WinAPI?
Я уже его пере конвертировал из *.PNG в .*bmp и вот какой результат:
hBitmap = (HBITMAP)LoadImage(NULL, TEXT("E:\\P\\CreateTemplate1\\Creat eTemplate1\\System_Icon_48.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
Возвращает нуль, а GetLastErrot() возвращает тоже нуль.

Если так:
hBitmap = (HBITMAP)LoadImage(NULL, MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
Возвращает нуль вместо дескриптора, а GetLastError() говорит ошибка 2. "Не удается найти указанный файл. "
Да, при попытке создать ресурс из файла .*bmp выскакивает ошибка "Cannot load file. Unknown bitmap format", а следом, после нажатия Ок "Cannot open file", хотя в Resource view ссылка на этот ресурс присутствует, но, если попытаться его открыть, то "Cannot load file. Unknown bitmap format".



Цитата:
Сообщение от macomics Посмотреть сообщение
Для работы с PNG читайте вот это
Я этим не пользуюсь.
apofioz вне форума Ответить с цитированием
Старый 15.04.2023, 00:08   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
Я уже его пере конвертировал из *.PNG в .*bmp и вот какой результат:
hBitmap = (HBITMAP)LoadImage(NULL, TEXT("E:\\P\\CreateTemplate1\\Creat eTemplate1\\System_Icon_48.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
Возвращает нуль, а GetLastErrot() возвращает тоже нуль.

Если так:
hBitmap = (HBITMAP)LoadImage(NULL, MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
Возвращает нуль вместо дескриптора, а GetLastError() говорит ошибка 2. "Не удается найти указанный файл. "
Да, при попытке создать ресурс из файла .*bmp выскакивает ошибка "Cannot load file. Unknown bitmap format", а следом, после нажатия Ок "Cannot open file", хотя в Resource view ссылка на этот ресурс присутствует, но, если попытаться его открыть, то "Cannot load file. Unknown bitmap format".
Возможно вы сохранили слои из PNG в BMP или сохранили изображение в 32-BPP вместо 24-BPP. В любом случае попробуйте сохранить BMP открыв PNG используя MS Paint.
macomics вне форума Ответить с цитированием
Старый 15.04.2023, 00:38   #6
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
В любом случае попробуйте сохранить BMP открыв PNG используя MS Paint.
Я пробовал другую иконку она была изначально в .*bmp формате её свойства: глубина цвета 8, частота кадров 1... Но результат тот же, хотя при создании bitmap-а ошибки не появляются.
apofioz вне форума Ответить с цитированием
Старый 15.04.2023, 05:31   #7
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Может тогда поделитесь своими не загружаемыми bmp, чтобы можно было повторить вашу ошибку. А ещё лучше и свою программу (откомпилированную, чтобы можно было увидеть в чем ошибка в отладчике).
macomics вне форума Ответить с цитированием
Старый 15.04.2023, 05:43   #8
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Может тогда поделитесь своими не загружаемыми bmp, чтобы можно было повторить вашу ошибку. А ещё лучше и свою программу (откомпилированную, чтобы можно было увидеть в чем ошибка в отладчике).
Вот в первом архиве файлы, во втором архиве часть программы.
Вложения
Тип файла: rar CreateTemplate1.rar (4.8 Кб, 1 просмотров)
Тип файла: rar CreateTemplate2.rar (2.27 Мб, 1 просмотров)
apofioz вне форума Ответить с цитированием
Старый 15.04.2023, 06:12   #9
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Допустим я начинаю изучать system-icon-48.bmp
Можете посмотреть на hexdump этой bitmap в приложенном файле (для файла system-icon-48.bmp имя соответствующего txt файла - sys.txt; stop 2.ico = stop.txt; user.bmp = user.txt)
Как минимум в этой bitmap (system-icon-48.bmp) видно следующее
Код:
00000000  42 4d 8a 1b 00 00 00 00  00 00 8a 00 00 00 7c 00  |BM............|.|
00000010  00 00 30 00 00 00 30 00  00 00 01 00 18 00 00 00  |..0...0.........|
00000020  00 00 00 1b 00 00 00 00  00 00 00 00 00 00 00 00  |................|
00000030  00 00 00 00 00 00 00 00  ff 00 00 ff 00 00 ff 00  |................|
00000040  00 00 00 00 00 ff 42 47  52 73 80 c2 f5 28 60 b8  |......BGRs...(`.|
00000050  1e 15 20 85 eb 01 40 33  33 13 80 66 66 26 40 66  |.. ...@33..ff&@f|
00000060  66 06 a0 99 99 09 3c 0a  d7 03 24 5c 8f 32 00 00  |f.....<...$\.2..|
00000070  00 00 00 00 00 00 00 00  00 00 04 00 00 00 00 00  |................|
00000080  00 00 00 00 00 00 00 00  00 00 ff ff ff ff ff ff  |................|
00000090  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|
По смещению 0 начинается заголовок файла. Он предельно простой: BM = 2 байта; за ним 4 байта = размер файла в байтах (все точно как и должно быть); далее 4 байта равных 0 (тоже все в порядке) и наконец 4 байта начала данных пикселей.
После заголовка файла начинается собственно сам заголовок bmp. И вот тут у меня нету информации про заголовок размером 0x0000007C байт. Но в целом данные в начальных заголовках (BITMAPCOREHEADER или BITMAPINFOHEADER или BITMAPV4HEADER или BITMAPV5HEADER) в целом в порядке, но даже самый длинный из всех этих заголовков имеет размер 100 байт, а тут размер заголовка 124 байта. При этом указано 24 бита на пиксель, а значит палитры быть не может. Но и другой информации тоже.

Итого: дело в bmp - ищите другую программу для работы с bmp. Редактор ресурсов не понимает этот заголовок.
Вложения
Тип файла: txt sys.txt (26.7 Кб, 1 просмотров)
Тип файла: txt user.txt (10.2 Кб, 0 просмотров)
Тип файла: txt stop.txt (14.5 Кб, 0 просмотров)
macomics вне форума Ответить с цитированием
Старый 15.04.2023, 07:27   #10
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Итого: дело в bmp - ищите другую программу для работы с bmp. Редактор ресурсов не понимает этот заголовок.
В каком смысле искать другую программу, что бы что..... чтобы редактировать или что? какие то странные заморочки, почему формат .*png не подходит, если требуется файл строго заданного размера(или заголовка), то как тогда что-то серьёзное включать, например, 3D-картинки(имеется ввиду на чистом API). Уж очень много головной боли для простой операции вставки файла.
apofioz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Свойства диалогового окна RAFA91 Win Api 1 08.04.2016 12:12
Цвет диалогового окна Dima300 Visual C++ 1 10.06.2014 09:01
Размер диалогового окна Samir_ Win Api 0 15.03.2012 11:30
Как поместить иконку в ToolButton Angel86rus Общие вопросы Delphi 3 12.06.2010 17:00
КАК поместить ИКОНКУ программы в правый нижний угол панели(там где пуск)??? micaell Общие вопросы Delphi 5 21.02.2007 19:58