Не рисует толстый кадр на CWnd - PullRequest
1 голос
/ 23 июня 2010

У меня есть окно приложения, в которое я добавляю стиль WS_THICKFRAME и удалил стиль WS_CAPTION.Когда окно развернется до максимума, я хочу скрыть WS_THICKFRAME, но сохранить функцию Aero-Snap, поэтому я изменил свой обработчик для WS_NCCALCSIZE, чтобы он возвращал завышенный прямоугольник относительно размера границ окна.важная часть кода обработчика WS_NCCLIENTSIZE выглядит следующим образом:

...
CRect rc( lpncsp->rgrc[0] );
if (IsZoomed())
{
    int borderSize = GetSystemMetrics(SM_CYSIZEFRAME);
    rc.InflateRect(borderSize,topOff+borderSize,borderSize,borderSize);
}
else
    rc.InflateRect(0,topOff+0,0,0);

lpncsp->rgrc[0] = rc;
...

Этот код эффективно делает WS_THICKFRAME скрытым.в то время как развернуто) WS_THICKFRAME рисуется в пределах границы.Есть ли сообщение, в котором я могу вернуть завышенный прямоугольник назад или, по крайней мере, заново отрегулировать размер окна, чтобы снова скрыть WS_THICKFRAME, когда фокус окна установлен / не установлен?

1 Ответ

1 голос
/ 23 июня 2010

Да, это не сработает.Реализуйте обработчик сообщений для WM_GETMINMAXINFO, чтобы границы окна падали с экрана.Помните, что если вы не установили опцию компоновщика / SUBSYSTEM, чтобы сказать, что ваша программа предназначена для Vista или Win7 (версия 6,0), то Aero будет вам лгать, когда вы используете GetWindowRect ().Возвращаемое значение основано на тонких (устаревших) границах.

...