Как нарисовать пользовательскую кнопку на панели заголовка темы Aero без расширения области, не являющейся клиентом? - PullRequest
3 голосов
/ 14 июля 2010

Я пытаюсь понять, как нарисовать пользовательскую кнопку на панели заголовков окон при использовании темы Aero в Vista или Win7. Мне нужно применить это к ряду различных приложений без изменения исходного кода, так что это будет в процедуре подключения. Поскольку я не могу изменить исходный код, я не могу использовать DwmExtendFrameIntoClientArea.

Я почти уверен, что это можно сделать или, по крайней мере, подделать очень хорошо, потому что я видел приложение, которое может это сделать. Я довольно внимательно изучил различные окна во время работы этого другого приложения и не верю, что они изменяют стиль окна или расширяют фрейм в клиентскую область.

В качестве теста я пытался использовать сообщение WM_NCPAINT, чтобы что-то нарисовать на панели заголовков. Когда тема Aero активна, ничего, что я рисую, не появится. Если я получу DC для всего экрана, а не только для окна, тогда я смогу «рисовать» на панели заголовков, но, конечно, это действительно рисует на экране. При таком подходе есть все виды проблем, поэтому он не работает. Если у кого-то есть какие-нибудь хорошие идеи или даже хорошие намеки, я буду очень признателен за помощь!

1 Ответ

0 голосов
/ 03 июля 2014

Поскольку вы не можете расширить клиентскую область, одним из методов является создание плавающего дочернего окна WS_EX_LAYERED с владельцем, установленным в окно верхнего уровня, чтобы оно оставалось выше только этого окна.

Вы можете подключить WndProc целевого окна для сообщений WM_MOVE и WM_SIZE.

...