Рисовать в неклиентской области с Direct2D - PullRequest
1 голос
/ 29 октября 2019

На этой странице: https://docs.microsoft.com/en-us/windows/win32/gdi/wm-ncpaint объясняется, как рисовать в области, не являющейся клиентом, с помощью GDI.

Как я могу рисовать в области, не являющейся клиентом, в моем окне с Direct2D, не имея дело сGDI или GDI +?

1 Ответ

0 голосов
/ 05 ноября 2019

Прежде всего, WM_NCPAINT стар. Его использование отключит тему DWM для окна, придавая Windows Classic / 7 базовый вид. Так что не делайте этого.

Но чтобы использовать любой API рендеринга, рисуйте в клиентской области, удалите стандартную рамку окна из окна, возвращая 0, когда wParam имеет значение true в вашем сообщении WM_NCCALCSIZE.

case WM_NCCALCSIZE:
    if (static_cast<bool>(wParam))
           return 0;
    return DefWindowProc(hwnd, msg, wParam, lParam);

Если вы хотите сохранить стандартные границы, пересчитайте границы окна в WM_NCCALCSIZE.

Затем, чтобы получить строку заголовка "клиентской области", используйте DwmExtendFrameIntoClientArea и расширьте ее сTOP.

Обязательно обработайте WM_NCHITTEST, чтобы перетаскивание окна также работало.

Обязательно предварительно умножьте ALPHA на direct2d. Рисование прямоугольника в точке (0,0) нарисует прямоугольник в заголовке вашего нового пользовательского окна.

SEE: https://github.com/oberth/custom-chrome

...