Пользовательские заголовки / chrome в приложении WinForms
-
09-06-2019 - |
Вопрос
Я почти уверен, что знаю ответ на этот вопрос, но я надеюсь, что есть что-то, что я упустил из виду.
Некоторые приложения, похоже, выглядят так же, как панели заголовков и кнопки Vista Aero, даже при работе в Windows XP.(В качестве примеров на ум приходят Google Chrome и Windows Live Photo Gallery.) Я знаю, что одним из способов добиться этого с помощью WinForms было бы создать форму без полей и самостоятельно нарисовать панель заголовков / кнопки, а затем переопределить WndProc
чтобы убедиться, что перемещение, изменение размера и нажатия кнопок делают то, что они должны делать (я не совсем разбираюсь в деталях, но, вероятно, смог бы справиться с этим, если бы у меня был день на чтение документации.) Мне любопытно, есть ли другой, более простой способ, который я упускаю из виду.Возможно, какие-то вызовы API или стили окон я упустил из виду?
Я полагаю, что Google ответил на этот вопрос за меня, используя подход roll-your-own-window в Chrome.Я оставлю этот вопрос открытым еще на один день на случай, если у кого-то появится новая информация, но я полагаю, что сам ответил на этот вопрос.
Решение
Вот статья с полным примером кода о том, как использовать ваш собственный "chrome" для приложения:
http://geekswithblogs.net/kobush/articles/CustomBorderForms3.aspx
Похоже, это действительно хороший материал.В этой серии всего 3 статьи, и она отлично работает, в том числе и в Vista!
Другие советы
Google Chrome - это нет использование Vista SDK для достижения этой цели в XP.Если вы заглянете в src\chrome\browser\views\frame
существует несколько файлов для определения фрейма браузера в зависимости от возможностей системы.В XP это выглядит так OpaqueFrame
используется;в строке 19 есть вот что сказать:
// OpaqueFrame
//
// OpaqueFrame is a CustomFrameWindow subclass that in conjunction with
// OpaqueNonClientView provides the window frame on Windows XP and on Windows
// Vista when DWM desktop compositing is disabled. The window title and
// borders are provided with bitmaps.
Похоже, что он использует ресурсы в src\chrome\app\theme
чтобы нарисовать кнопки рамки.
Так что, похоже, мои надежды на то, что есть какой-то дешевый способ включить тематизацию Vista в XP, рухнули.Единственный способ сделать это - вручную нарисовать неклиентскую область вашего окна.Я верю что - то вроде этого вероятно, это правильный путь, поскольку он позволяет Windows обрабатывать неклиентские вещи, такие как перемещение и изменение размера окна.
Если кто-то не сможет найти способ волшебным образом включить тематизацию Vista в XP, это ответ на вопрос, но я, очевидно, не могу пометить свой собственный пост в качестве ответа.
Оуэн, я использую Chrome в XP, и я не вижу стеклянную тему "Vista Aero" в окне Chrome.Я вижу его сплошным синим.
Если вам нужна пользовательская тематизация элементов управления и строк заголовка Windows, это можно сделать.Существует отличный бесплатный инструментарий пользовательского интерфейса для WinForms, который делает именно это: KryptonToolkit Криптонный инструмент
@Джонатан Холланд:Это что-то, что можно сделать из .NET?
Да, используя DllImport. Здесь это хороший пост в блоге
Google Chrome использует пакет SDK для Windows Vista, чтобы получить внешний вид glass в XP.Вы можете скачать его здесь:
Используя это, вам необходимо включить задержку загрузки следующих DLL-файлов, чтобы получить эффект Glass в XP:
- uxtheme.библиотека DLL
- dwmapi.dl
Нет, боюсь, другого простого способа сделать это нет.
Вы на правильном пути.Вам нужно будет создать пользовательскую Winform, а затем действовать, как показано в этом пример.