Chrome Style C# Приложения?


14

Я не говорю о функции стекла vista, я уже знаю, как это сделать. Функция, о которой я говорю, это добавить элементы управления в заголовок, например, Office 2007 с логотипом и панелью инструментов.

22

Чтобы достичь этого эффекта, вам нужно сделать несколько взаимодействий Win32. В зависимости от того, используете ли вы Winforms или WPF, способ обращения к обработке сообщений отличается (я не помню Winforms, поэтому я приведу все примеры для WPF). Но в обоих случаях вам необходимо:

  1. Перехват создания окна и изменение стилей окна и расширенных стилей. В WPF вам необходимо наследовать от HwndSource и изменить HwndSourceParameters для этого. Вам нужны WS_OVERLAPPEDWINDOW, WS_CLIPSIBLINGS и WS_VISIBLE для обычных стилей и расширенных стилей WS_EX_WINDOWEDGE и WS_EX_APPWINDOW.

  2. Добавить обработчик сообщения через его параметры HwndSource HwndSourceHook.

  3. В прок сообщение добавляется через крюк в два шага, вам необходимо обработать несколько сообщений:

    • WM_NCACTIVATE - изменить картину заголовка, когда приложение активируется или не
    • WM_NCCALCSIZE - вернуться к ОСАМ, что вы не имеете неклиентские областей
    • WM_NCPAINT - в общем, нужна, чтобы invaldate окна прямоугольника только здесь, то WPF будет заботиться о фактической картине)
    • WM_NCHITTEST - обрабатывать перемещение окна, сводя к минимуму и максимизируя.
  4. Как только вы сделаете это, ваша клиентская область, где WPF будет рисовать ваше визуальное дерево, будет охватывать всю область окна. Вам нужно будет добавить визуальные эффекты «без клитора», чтобы ваше приложение выглядело как обычное приложение для пользователя.

  5. Вы, возможно, потребуется еще несколько сообщений:

    • WM_THEMECHANGED, если вы хотите изменить свою «не-клиент» области живописи, чтобы соответствовать теме OS
    • WM_DWMCOMPOSITIONCHANGED, если вы хотите продлить стекло и получить стандартную окраску ОС NC-стекла, когда стекло включено и переключиться на вашу пользовательскую логику, когда стекла нет.
  6. Вы можете посмотреть на Тематических API, Win32, если вы хотите пойти получить стандартные средства Win32 за границы, заголовок, закрыть, mininmize и максимально кнопки для использования в «не-клиент» области.

  7. Если вы хотите продлить стекло в окно, вы можете посмотреть по адресу:

    • DwmExtendFrameIntoClientArea - получить стандартное стекло NC-область
    • DwmDefWindowProc - получить менеджер рабочего стола, чтобы краска стекла и стандартный контроль ЧПУ
    • DwmIsCompositionEnabled - определить, включено ли стекло; вы можете использовать вышеуказанные два API только тогда, когда Glass включен. Если «Стекло» не включено, вам необходимо сделать собственный рисунок области ЧПУ.

Вы можете найти правильные определения всех сообщений, стилей и соответствующих Win32 API, вам нужно на P/Invoke C#.

Вы также можете добиться аналогичного эффекта, используя стандартное окно WPF с WindowStyle=none. Тем не менее, будут некоторые различия между поведением рабочего стола к вашему приложению и другим приложениям; наиболее очевидным из них является то, что вы не сможете укладывать или разбивать свое окно, щелкнув правой кнопкой мыши на панели задач.

Вы также можете изучить некоторые сторонние компоненты, которые позволяют использовать некоторые из этих функций. Я еще не использовал (как вы можете видеть, я не боюсь Win32 interop :-)), поэтому я не могу рекомендовать вас никому.

  0

Не совсем. Я планировал написать один, но я так и не дошел до него, что с 5-месячным ребенком в доме и еще что-то ... :-) 22 фев. 092009-02-22 03:55:48


2

Я использовал набор управления DotNetBar с хорошим успехом.


8

Как упоминает Франци, вы хотите, чтобы DwmExtendFrameIntoClientArea. Вот пример из Codeproject, который показывает, как это сделать.

http://www.codeproject.com/KB/dialog/AeroNonClientAreaButtons.aspx

+1

Обратите внимание, что когда Glass выключен, например, под TS или когда пользователь переключается на Vista basic, DwmExtendFrameIntoClientAre не собирается работать. 22 фев. 092009-02-22 03:59:14


8

Джо Кастро, разработчик команды продукта WPF, имеет MSDN код галерея проект под названием «WPF Chrome», который может быть использован для создания офиса 2007-как пользовательского интерфейса (например: элементы управления, которые охватывают как клиент , а также неклиентские области окна).

Найти его здесь: http://code.msdn.microsoft.com/chrome

  0

awesome ~~~~~~~~~~~~~~! 24 июл. 092009-07-24 21:34:26