Применить пользовательский визуальный стиль (.msstyle) к одному приложению Winforms - PullRequest
3 голосов
/ 30 марта 2011

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

Ответы [ 2 ]

0 голосов
/ 23 февраля 2017

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

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

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

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

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

Опция

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

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

...