Пользовательские заголовки / хром в приложении 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 эффектный вид. Вы можете скачать это здесь:
Для этого вам нужно включить отложенную загрузку следующих библиотек DLL, чтобы получить эффект Glass в XP:
- uxtheme.dll
- dwmapi.dl
Нет, я боюсь, нет другого простого способа сделать это.
Ты на правильном пути. Вам нужно будет создать пользовательскую Winform, а затем продолжить, как показано в этом примере.