Иконки в контекстном меню

Автор Тема: Иконки в контекстном меню  (Прочитано 17727 раз)

0 Пользователей и 4 Гостей просматривают эту тему.

Оффлайн Sergey_KАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Имеется defined.cuix и defined.dll
Из DLL подгружаются в CUIX иконки RCDATA

Пробовал загружать RCDATA и BITMAP через LoadBitmap, LoadImage, LoadResource
HBITMAP грузится, SetMenuItemBitmaps возвращает 1, но иконка не отображается...  :(
файл икон: ICO/BMP 16x16x32bpp

Как назначить иконы из ресурсной DLL контекстному меню?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Иконки в контекстном меню
« Ответ #1 : 21-02-2020, 17:25:17 »
В RCDATA если мне не изменяет память иконки в формате PNG. А зачем их тебе вручную грузить? Не пойму.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Sergey_KАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Иконки в контекстном меню
« Ответ #2 : 21-02-2020, 17:31:35 »
У меня в RCDATA формат ICO. Работает.
В RCDATA вообще можно засунуть всё что угодно.

Мне нужно добавить иконы в ObjectContextMenu. По умолчанию их там нет

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Иконки в контекстном меню
« Ответ #3 : 21-02-2020, 17:33:47 »
Sergey_K,
LoadIcon() ?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Sergey_KАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Иконки в контекстном меню
« Ответ #4 : 21-02-2020, 17:38:16 »
LoadIcon() ?
SetMenuItemBitmaps работает с битмапами. К тому же LoadIcon не грузит RCDATA

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Иконки в контекстном меню
« Ответ #5 : 21-02-2020, 17:41:57 »
SetMenuItemBitmaps работает с битмапами.
Ну это как раз не проблема преобразовать HICON в HBITMAP:
Код - C++ [Выбрать]
  1. static void GetBitmapFromIcon()
  2. {
  3.   HICON hIcon = LoadIcon(_hdllInstance, MAKEINTRESOURCE(IDI_COMMANDICON));
  4.   ICONINFO info; GetIconInfo(hIcon, &info);
  5.   BITMAP bmp;  GetObject(info.hbmColor, sizeof(bmp), &bmp);
  6.   hBitmap = (HBITMAP)CopyImage(info.hbmColor, IMAGE_BITMAP, 0, 0, 0);
  7. }
К тому же LoadIcon не грузит RCDATA
Точно?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Sergey_KАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Иконки в контекстном меню
« Ответ #6 : 21-02-2020, 17:52:27 »
Точно?
Точно. Во всяком случае у меня )
RCDATA грузится только через LoadResource

Даже если прямо грузить битмап через LoadBitmap, всё равно битмап не отображается

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Иконки в контекстном меню
« Ответ #7 : 21-02-2020, 17:59:38 »
RCDATA грузится только через LoadResource
Ну а если дальше:
Код - C++ [Выбрать]
  1. HGLOBAL hGlobal = ::LoadResource(hModule, hRes);
  2. HICON hIcon = HICON(::LockResource(hGlobal));
  3. ICONINFO info; GetIconInfo(hIcon, &info);
  4. BITMAP bmp;  GetObject(info.hbmColor, sizeof(bmp), &bmp);
  5. HBITMAP hBitmap = (HBITMAP)CopyImage(info.hbmColor, IMAGE_BITMAP, 0, 0, 0);

?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Sergey_KАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Иконки в контекстном меню
« Ответ #8 : 21-02-2020, 18:04:00 »
Дальше создаётся битмап и устанавливается на пункт меню. SetMenuItemBitmaps возвращает TRUE, что означает - иконка успешно назначена
Только нам не шашечки нужны, а ехать )

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Иконки в контекстном меню
« Ответ #9 : 21-02-2020, 18:12:00 »
Я правильно понял, что defuned.dll - чисто ресурсная dll?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Sergey_KАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Иконки в контекстном меню
« Ответ #10 : 21-02-2020, 18:22:22 »
чисто ресурсная dll?
Да, ресурсы RCDATA для CUIX  + 1 BITMAP

Битмап успешно грузится в диалог, а вот в контекстное меню ничего и никак...

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Re: Иконки в контекстном меню
« Ответ #11 : 21-02-2020, 18:39:59 »
У меня были проблемы (VS2012, если не ошибаюсь), когда я собирал:
а) режим не Release x86
б) ресурсы разного типа (bmp / png / ico).
Ну, понятно, ничего кроме ресурсов я туда не кидал - в С++ я понимаю чуть меньше чем ничего.

А в обычное выпадающее меню ресурс подсасывается? Может, проблема вообще в том, что команду надо внутри _.cui повторно импортировать в конт.меню?
На какой-то из версий ресурс даже в обычное меню не подхватывался, т.к. я сдуру поменял нормальное описание команды и то, что было в меню. Может, и здесь нечто подобное вылезло?
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Sergey_KАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 114
  • Карма: 2
Re: Иконки в контекстном меню
« Ответ #12 : 21-02-2020, 19:07:04 »
VS2015, SDK 2018, Platform 8.1 Режим сборки Release 86. В экранном меню иконки подгружаются.
Контекстное меню создаётся при инициализации, когда CUI уже загружен. Связи между ними нет.
Были проблемы с экранным меню, когда в resource.h прописались ID RCDATA  -перестали отображаться иконки. Убрал - появились.
получается, что RCDATA для cuix не должна прописываться в resource.h, а ресурсы, используемые в других местах - удобней вставлять IDы в resource.h
С контекстным - что то другое...
Все шаги по инициализации выполняются успешно, а результат нулевой.

Может bit per pixel? ну так стандартные акадовские иконки используют 32bpp. И у меня оно же(в основном меню работают с маской).

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Иконки в контекстном меню
« Ответ #13 : 21-02-2020, 20:57:29 »
Были проблемы с экранным меню, когда в resource.h прописались ID RCDATA  -перестали отображаться иконки. Убрал - появились.
В RCDATA dll, которая используется с CUIX, прописаны не ID_NUM (целые), а "ID_NUM" (строки). Соответственно в resource.h и писать то нечего.
С контекстным - что то другое...
Покажи код, которым ты вообще пытался добавлять контекстное меню.
Кстати вот пример, как я добавлял иконки в меню истории команд: https://adn-cis.org/dobavlenie-ikonki-k-imeni-komandyi-bez-ispolzovaniya-cuix.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Иконки в контекстном меню
« Ответ #14 : 21-02-2020, 20:59:29 »
Дальше создаётся битмап и устанавливается на пункт меню. SetMenuItemBitmaps возвращает TRUE, что означает - иконка успешно назначена
Только нам не шашечки нужны, а ехать )
В какой момент это назначается??? Вполне возможно, что AutoCAD игнорирует твоё назначение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение