Использование ресурсной dll для CUIx с прозрачными растрами
Эту статью и пример кода любезно предоставил один из членов ADN: Michael Csikos. Спасибо Михаил!
Здесь показывается, как можно использовать ico-файлы в ресурсных dll для ваших cuix-файлов. По умолчанию, cuix-файлы принимают из dll bmp-файлы растров. Но bmp-файлы не поддерживают прозрачность, которая могла бы помочь сделать кнопки иконок намного симпатичнее в интерфейсе AutoCAD.
К сожалению этот подход нигде не документирован в документации, так что Michael раскопал следующее решение: редактирование вручную файла ресурсов (.rc) для вашей ресурсной dll позволяет добавить поддержку ico-файлов. Достаточно просто добавить новый ico-ресурс при помощи редактора Visual Studio и отредактировать свойства “ICO” ресурса в “RCDATA” как показано ниже:
- //////////////////////////////////////////////////////////////////
- // Иконку с наименьшим ID помещаем первой, чтобы быть уверенным что иконка
- // приложения останется доступной во всех системах.
- IDI_TRIANGLE16 RCDATA ".\\resources\\icon1.ico"
- IDI_TRIANGLE32 RCDATA ".\\resources\\icon2.ico"
- #endif // English (Australia) resources
- //////////////////////////////////////////////////////////////////
Далее вы можете скомпилировать вашу dll и поместить её в тот же каталог, что и cuix-файл, использующий ресурс. К сожалению, для png-файлов такой подход не работает.
Michael также предоставил образец C# кода, который показывает как из программы сгенерировать cuix-файл используя ресурсы. Генерация cuix-файла из кода достаточно эффективный подход, который позволяет быстро и легко модифицировать и регенерировать cuix-файл как необходимо.
Пример создает методы (смотри CustomizationExtensions.cs), которые в заначительной степени упрощают добавление вкладок, панелей, строк и кнопок.
Выжимка из этого кода выглядит так:
- var debugFolder =
- Path.GetDirectoryName(
- Assembly.GetExecutingAssembly().Location);
- var cs = new CustomizationSection();
- var menuGroup = cs.MenuGroup;
- var tab = cs.AddNewTab("CuiTestTab");
- var panel = tab.AddNewPanel("Panel");
- var row = panel.AddNewRibbonRow();
- menuGroup.Name = "CuiTest";
- row.AddNewButton(
- "BMP",
- "BMP",
- "SayBMP",
- "BMP загружен из ресурсной DLL",
- "IDB_CIRCLE16",
- "IDB_CIRCLE32",
- RibbonButtonStyle.LargeWithText);
- row.AddNewButton(
- "ICO",
- "ICO",
- "SayICO",
- "ICO загружен из ресурсной DLL",
- "IDI_TRIANGLE16",
- "IDI_TRIANGLE32",
- RibbonButtonStyle.LargeWithText);
- var fileName = Path.Combine(debugFolder, "CuiTest.cuix");
- File.Delete(fileName);
- 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