Пользовательские заголовки / chrome в приложении WinForms

StackOverflow https://stackoverflow.com/questions/42460

Вопрос

Я почти уверен, что знаю ответ на этот вопрос, но я надеюсь, что есть что-то, что я упустил из виду.

Некоторые приложения, похоже, выглядят так же, как панели заголовков и кнопки 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.Вы можете скачать его здесь:

http://www.microsoft.com/downloads/details.aspx ?FamilyID=4377f86d-c913-4b5c-b87e-ef72e5b4e065 иdisplaylang=ru

Используя это, вам необходимо включить задержку загрузки следующих DLL-файлов, чтобы получить эффект Glass в XP:

  • uxtheme.библиотека DLL
  • dwmapi.dl

Нет, боюсь, другого простого способа сделать это нет.

Вы на правильном пути.Вам нужно будет создать пользовательскую Winform, а затем действовать, как показано в этом пример.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top