Применить пользовательский визуальный стиль (.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, который предоставляет современные и разумные способы создания тем приложений.