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

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

То, что я хочу, должно сделать ЗАГОЛОВОК/ЗАГОЛОВОК ОКНА БОЛЕЕ ТОЛСТЫМ.

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

От MSDN:

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


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

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

wParam, Если wParam ПРАВДА, он определяет, что применение должно указать, какая часть области клиента содержит действительную информацию. Система копирует действительную информацию в указанную область в новой области клиента. Если wParam ЛОЖНЫЙ, применение не должно указывать на действительную часть области клиента.

lParam, Если wParam ПРАВДА, lParam, указывает на структуру NCCALCSIZE_PARAMS, которая содержит информацию, которую применение может использовать, чтобы вычислить новый размер и положение прямоугольника клиента. Если wParam ЛОЖНЫЙ, lParam указывает на структуру RECT. На входе структура содержит предложенный прямоугольник окна для окна. На выходе структура должна содержать координаты экрана соответствующей области клиента окна.

10
задан no_ripcord 25 January 2010 в 20:37
поделиться

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 до и после.

11
ответ дан 4 December 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: