Если вы готовы перерисовать все содержимое строки заголовка, вы можете использовать метод DWM API DwmExtendFrameIntoClientArea, который включает в себя настройку окна без заголовка, что позволяет DWM втягивать свой стакан в используемую область для создания новое пространство, которое выглядит как заголовок, но фактически находится в вашей клиентской области, так что вы можете рисовать на нем кнопки.
Обратной стороной этого метода является то, что вам придется делать стандартные кнопки, если они вам нужны. Свернуть, развернуть и закрыть - не проблема для воссоздания (хотя вы обнаружите, что кнопка максимизации представляет собой переключатель, внешний вид которого зависит от состояния), но вы можете обнаружить, что у вас возникли проблемы с воссозданием кнопки в верхнем левом углу. Вам также, конечно, придется перерисовать свой заголовок, но я не могу представить, что у вас возникнут какие-либо проблемы с этим.
Что касается чтения данных текущей темы, чтобы изменить стиль ваших кнопок как их, извините, но я ничего об этом не знаю. Я предлагаю использовать прозрачность при построении кнопок на заголовке, а также использовать эффекты полупрозрачного свечения и т. Д. Таким образом вы сможете сохранить стеклянный фон и просто изменить его внешний вид, наложив полупрозрачный цвет. Кроме того, если вы сделаете это таким образом, то смещающиеся зеркальные блики на стекле будут двигаться естественным образом, тогда как если вы просто получите цвета их темы, вы обнаружите, что либо у вас нет доступа к их отражениям, либо они воссоздаются заново внутри пространство ваших кнопок. Конечно, всего два цента - если вы сможете найти способ сделать цвета своей темы и так далее, во что бы то ни стало.
Однако есть одно предостережение - есть еще один поток StackOverflow (http://stackoverflow.com/questions/2666979/net-framework-4-0-and-drawing-on-aero-glass-issue/4656182#4656182), который описание проблемы с методом DWM API DwmExtendFrameIntoClientArea, поэтому на вашем месте я бы прочитал его, прежде чем пробовать это решение.
person
David Hagan
schedule
13.01.2011