Применить пользовательский визуальный стиль (.msstyle) к одному приложению Winforms

Есть ли способ применить пользовательский стиль (.msstyle) к приложению Windows Forms без изменения темы всей системы? По сути, мы хотим, чтобы наше приложение поддерживало одну и ту же тему независимо от того, что было установлено в панели управления. Пожалуйста, не говорите мне, думаете ли вы, что это хорошая идея. Мне интересно, есть ли способ сделать это, который не включает в себя проприетарную библиотеку, например, серию вызовов API. Спасибо!

2 ответа

Решение

SetWindowTheme Функция выглядит как решение, которое вы ищете. Вы должны будете сделать P/Invoke, чтобы использовать его.

К сожалению, это требует много перехватов, а не просто P/Invoke.

Вы, вероятно, быстрее и лучше переопределять / создавать новые элементы управления с помощью управляемого кода. В противном случае вам нужно будет перехватывать вызовы тем с помощью встроенной библиотеки DLL и быть очень осторожным в том, что вы делаете.

На самом деле, я не знаю, как реализовать это сам, боюсь. Я бы дал более полезный ответ. Весь прогресс кажется чрезмерно сложным, если взглянуть на код теперь заброшенного инструмента под названием "VisualStyler" от Style Soft (компания кажется мертвым с 2014 года), который прекрасно поддерживал все это.

Кроме того, если вы действительно решите использовать uxtheme, вы застрянете с тем, что предоставляет движок тем для Windows, ограниченный его форматом визуальных стилей и всплывающими подсказками (у вас даже есть хороший редактор в настоящее время?).

Я бы хотел, чтобы Microsoft разработала движок тем для XP, чтобы разработчики приложений могли использовать его для собственной идентификации приложения. Но, похоже, они никогда этого не делают, когда дело доходит до их идентичности / идентичности продукта Windows (другой пример - DWM не раскрывает какие-либо функции 3D-трансформации, но, вероятно, это хорошая идея, чтобы приложения не делали безумные вещи, злоупотребляя такими вещами).

Опции?

  • Создайте свои собственные элементы управления в управляемом коде, обрабатывая рисование самостоятельно.
  • Купите продукт, предлагающий это для приложений Win32.
  • Начните изучать WPF, который предоставляет современные и разумные способы создания тем приложений.
Другие вопросы по тегам