Пользовательские заголовки / хром в приложении WinForms - PullRequest
12 голосов
/ 04 сентября 2008

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

Некоторые приложения выглядят и выглядят в Vista Aero на панелях и кнопках надписей даже при работе в Windows XP. (Google Chrome и Windows Live Photo Gallery приходят в качестве примера.) Я знаю, что одним из способов добиться этого из WinForms было бы создать форму без полей и нарисовать панель / кнопки заголовка самостоятельно, а затем переопределить WndProc, чтобы убедиться, что перемещение , изменение размера и нажатие кнопок делают то, что они должны делать (я не совсем разбираюсь в деталях, но, возможно, смогу справиться с этим в течение дня, чтобы прочитать документацию.) Мне любопытно, есть ли другой, более простой способ, которым я с видом Возможно, некоторые вызовы API или стили окон, которые я пропустил?

Я полагаю, что Google ответил на этот вопрос, применив подход Chrome, позволяющий свернуть окно. Я оставлю вопрос открытым на следующий день, если у кого-то появится новая информация, но я думаю, что я сам ответил на вопрос.

Ответы [ 6 ]

12 голосов
/ 20 сентября 2008

Вот статья с полным примером кода о том, как использовать свой собственный «хром» для приложения:

http://geekswithblogs.net/kobush/articles/CustomBorderForms3.aspx

Это похоже на действительно хорошие вещи. Всего в этой серии 3 статьи, и она отлично работает, в том числе и в Vista!

5 голосов
/ 04 сентября 2008

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, это ответ на вопрос, но я, очевидно, не могу пометить свой пост как ответ.

4 голосов
/ 06 сентября 2008

Оуэн, я использую Chrome в XP и не вижу стеклянную тему "Vista Aero" в окне Chrome. Я вижу это как сплошной синий.

Если это пользовательские темы элементов управления и заголовков окон, которые вы хотите, это может быть достигнуто. Существует отличный бесплатный инструментарий пользовательского интерфейса для WinForms, который делает именно это: KryptonToolkit

1 голос
/ 04 сентября 2008

@ Джонатан Холланд: Это можно сделать из .NET?

Да, используя DllImport. Здесь хороший пост в блоге

0 голосов
/ 04 сентября 2008

Google Chrome использует Windows Vista SDK, чтобы придать XP эффектный вид. Вы можете скачать его здесь:

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

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

  • uxtheme.dll
  • dwmapi.dl
0 голосов
/ 04 сентября 2008

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

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

...