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

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

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

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

6 ответов

Решение

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

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. Я вижу это как сплошной синий.

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

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

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

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

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

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

Другие вопросы по тегам