У меня есть ссылка ниже статьи, чтобы нарисовать пользовательскую область кадра с DWM. Custom Window Frame Using DWM После удаления стандартной рамки в рамке не существует области без клиента.Как перенести начальные координаты клиентской области на окно?
void CMainFrame::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp)
{
int nTHight = 30; /*The title bar height*/
RECT * rc;
RECT aRect;
RECT bRect;
RECT bcRect;
if(bCalcValidRects == TRUE)
{
CopyRect(&aRect,&lpncsp->rgrc[1]);
CopyRect(&bRect,&lpncsp->rgrc[0]);
bcRect.left = bRect.left;
bcRect.top = bRect.top - nTHight;
bcRect.right = bRect.right;
bcRect.bottom = bRect.bottom;
CopyRect(&lpncsp->rgrc[0],&bcRect);
CopyRect(&lpncsp->rgrc[1],&bRect);
CopyRect(&lpncsp->rgrc[2],&aRect);
}
else
{
rc = (RECT *)lpncsp;
rc->left = rc->left;
rc->top = rc->top - nTHight;
rc->right = rc->right;
rc->bottom = rc->bottom;
}
CFrameWnd::OnNcCalcSize(bCalcValidRects, lpncsp);
}
Поскольку все окно клиента область, я должен настроить размещение управления UI для кадра, но я не знаю, как справиться с этой проблемой. Например, под красным прямоугольником (весь компонент пользовательского интерфейса) перед удалением части не клиент должен быть смещен в исходную координату клиентской области.
Проверьте Приложение C этой страницы. Если вы просто позволяете DWM нарисовать стандартную подпись в своей клиентской области, вы можете использовать 'AdjustWindowRectEx()', чтобы получить то, что было бы первоначальным клиентом. – andlabs