Прежде всего, 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