Подтвердить что ты не робот

Как установить размер неклиентской области окна Win32 (собственный)

Как установить размер неклиентской области окна Win32 (native).

То, что я хочу, - сделать THICKER CAPTION/TITLE.

Я читал и мне сказали, что я должен обрабатывать WM_NCCALCSIZE, но я не могу найти ничего понятного в документации.

От MSDN:

Уведомление WM_NCCALCSIZE


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

Окно получает это сообщение через его функцию WindowProc.

WPARAM Если wParam имеет значение TRUE, он указывает, что приложение должно указать, какая часть клиентской области содержит достоверную информацию. Система копирует действительную информацию в указанную область в новой клиентской области. Если wParam FALSE, приложение не должно указывать действительную часть клиентской области.

LPARAM Если wParam имеет значение ИСТИНА, lParam указывает на структуру NCCALCSIZE_PARAMS, которая содержит информацию, которую приложение может использовать для вычисления нового размера и положения клиентского прямоугольника. Если wParam FALSE, lParam указывает на структуру RECT. При входе структура содержит предлагаемый прямоугольник окна для окна. При выходе структура должна содержать координаты экрана соответствующей области клиентского окна.

4b9b3361

Ответ 1

вы устанавливаете размер неклиентской области, обрабатывая сообщение WM_NCCALCSIZE. Но не делайте этого, если вы не планируете делать все неклиентские рисунки, обрабатывая WM_NCPAINT

Изменить: вот два фрагмента кода, один из которых обрабатывает WM_NCCALCSIZE и обеспечивает простую границу пикселя n, а другой добавляет дополнительные пиксели после того, как DefWindowProc выполнил обработку по умолчанию.

case WM_NCCALCSIZE:
  {
  lRet = 0;
  const int cxBorder = 2;
  const int cyBorder = 2;
  InflateRect((LPRECT)lParam, -cxBorder, -cyBorder);
  }

case WM_NCCALCSIZE: 
  {
  LPNCCALCSIZE_PARAMS pncc = (LPNCCALCSIZE_PARAMS)lParam;
  //pncc->rgrc[0] is the new rectangle
  //pncc->rgrc[1] is the old rectangle
  //pncc->rgrc[2] is the client rectangle

  lRet = DefWindowProc (hwnd, WM_NCCALCSIZE, wParam, lParam);
  pncc->rgrc[0].top += ExtraCaptionHeight;
  }

Вы можете многому научиться, передав WM_NCCALCSIZE в DefWindowProc и посмотрев на значения NCCALCSIZEPARAM до и после.