Как создать кнопки заголовка в стиле оболочки в .NET - PullRequest
5 голосов
/ 02 декабря 2011

Это продолжение моего предыдущего вопроса Рисование пользовательских кнопок в Windows Vista / 7 Aero Titlebar .

Я вернулся к этой теме совсем недавно и нашел эту статью , которая по сути является хаком для «рисования» кнопок в строке заголовка с поддержкой Aero (Windows Vista & 7). Код создает прозрачное окно поверх текущего и размещает на нем кнопки, создавая впечатление дополнительных кнопок в строке заголовка. Единственная проблема - кнопки выглядят как обычные кнопки WinForms!

У меня вопрос, как мне прочитать стиль оболочки Windows (он же тема), чтобы создать кнопки, стилизованные под те же кнопки в Control Box (см. Изображение) ?

Я бы хотел, чтобы ответы были в .NET (VB.NET или C #). Я в порядке с неуправляемым кодом.

Control Buttons

1 Ответ

1 голос
/ 02 декабря 2011

Так что, если я вас правильно понимаю, вы хотите прочитать то, что Windows 7 называет аспектом «Цвет окна» текущей темы.

В соответствии с MSDN http://msdn.microsoft.com/en-us/magazine/cc163435.aspx, требуется DwmGetColorizationColor: "извлекает текущий цвет, который используется для композиции стекла DWM. Это значение основано на текущей цветовой схеме. Изменение настройки вызывает уведомление WM_WMCOLORIZATIONCOLORCHANGED."

[DllImport("dwmapi.dll", PreserveSig = false)]
public static extern void DwmGetColorizationColor(out int pcrColorization, [MarshalAs(UnmanagedType.Bool)]out bool pfOpaqueBlend);

"Вы можете проверить, чтобы увидеть цвет и непрозрачность композиции, вызвав функцию DwmGetColorizationColor. Если эта функция завершится успешно, она установит значение цвета GDI + ARGB и логическое значение, указывающее, является ли цвет непрозрачным. Так же, как изменение схемы Aero в на панели управления появляется сообщение, переданное, когда цвет композиции изменился. WM_DWMCOLORIZATIONCOLORCHANGED отправляется, когда это происходит, но в этом случае параметры сообщают вам, что такое новый цвет и непрозрачность. "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...