ADN Open CIS
Сообщество программистов Autodesk в СНГ

16/05/2015

Использование ресурсной dll для CUIx с прозрачными растрами

Эту статью и пример кода любезно предоставил один из членов ADN: Michael Csikos. Спасибо Михаил!

Здесь показывается, как можно использовать ico-файлы в ресурсных dll для ваших cuix-файлов. По умолчанию, cuix-файлы принимают из dll bmp-файлы растров. Но bmp-файлы не поддерживают прозрачность, которая могла бы помочь сделать кнопки иконок намного симпатичнее в интерфейсе AutoCAD.

К сожалению этот подход нигде не документирован в документации, так что Michael раскопал следующее решение: редактирование вручную файла ресурсов (.rc) для вашей ресурсной dll позволяет добавить поддержку ico-файлов. Достаточно просто добавить новый ico-ресурс при помощи редактора Visual Studio и отредактировать свойства “ICO” ресурса в “RCDATA” как показано ниже:

Код - C++: [Выделить]
  1. //////////////////////////////////////////////////////////////////
  2. // Иконку с наименьшим ID помещаем первой, чтобы быть уверенным что иконка
  3. // приложения останется доступной во всех системах.
  4. IDI_TRIANGLE16     RCDATA           ".\\resources\\icon1.ico"
  5. IDI_TRIANGLE32     RCDATA           ".\\resources\\icon2.ico"
  6. #endif    // English (Australia) resources
  7. //////////////////////////////////////////////////////////////////

Далее вы можете скомпилировать вашу dll и поместить её в тот же каталог, что и cuix-файл, использующий ресурс. К сожалению, для png-файлов такой подход не работает.

Michael также предоставил образец C# кода, который показывает как из программы сгенерировать cuix-файл используя ресурсы. Генерация cuix-файла из кода достаточно эффективный подход, который позволяет быстро и легко модифицировать и регенерировать cuix-файл как необходимо.

Пример создает методы (смотри CustomizationExtensions.cs), которые в заначительной степени упрощают добавление вкладок, панелей, строк и кнопок.

Выжимка из этого кода выглядит так:

Код - C#: [Выделить]
  1. var debugFolder          =
  2.     Path.GetDirectoryName(
  3.         Assembly.GetExecutingAssembly().Location);
  4.  
  5. var cs                   = new CustomizationSection();
  6. var menuGroup            = cs.MenuGroup;
  7. var tab                  = cs.AddNewTab("CuiTestTab");
  8. var panel                = tab.AddNewPanel("Panel");
  9. var row                  = panel.AddNewRibbonRow();
  10.  
  11. menuGroup.Name           = "CuiTest";
  12.  
  13. row.AddNewButton(
  14.     "BMP",
  15.     "BMP",
  16.     "SayBMP",
  17.     "BMP загружен из ресурсной DLL",
  18.     "IDB_CIRCLE16",
  19.     "IDB_CIRCLE32",
  20.     RibbonButtonStyle.LargeWithText);
  21.  
  22. row.AddNewButton(
  23.     "ICO",
  24.     "ICO",
  25.     "SayICO",
  26.     "ICO загружен из ресурсной DLL",
  27.     "IDI_TRIANGLE16",
  28.     "IDI_TRIANGLE32",
  29.     RibbonButtonStyle.LargeWithText);
  30.  
  31. var fileName = Path.Combine(debugFolder, "CuiTest.cuix");
  32.  
  33. File.Delete(fileName);
  34.  
  35. cs.SaveAs(fileName);

 

А вот и картинка как это будет выглядеть:



Вот весь проект: cui resonly ico.zip

Источник: http://adndevblog.typepad.com/autocad/2014/08/using-cuix-resource-dll-with-image-transparency.html

Автор перевода: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=2706

Опубликовано 16.05.2015