Когда пользователь изменяет размеры окна, Windows сама запрашивает у программы минимальный и максимальный размеры, посылая окну сообщение WM_GETMINMAXINFO. При этом в параметре lParam размещается указатель на структуру MINMAXINFO, в которую и следует записать нужные значения. Затем нужно вернуть 0. Рассмотрим пример обработки сообщения WM_GETMINMAXINFO, при котором размер окна не может быть сделан меньше (100x100) и больше (300x300).
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { ... case WM_GETMINMAXINFO: { MINMAXINFO *pInfo = (MINMAXINFO *)lParam; POINT ptMin = { 100, 100 }, ptMax = { 300, 300 }; pInfo->ptMinTrackSize = ptMin; pInfo->ptMaxTrackSize = ptMax; return 0; } default: return DefWindowProc(hWnd, message, wParam, lParam); } } |
В MFC обработчик выглядит аналогичным образом, например:
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) { lpMMI->ptMinTrackSize = CPoint(100, 100); lpMMI->ptMaxTrackSize = CPoint(300, 300); CFrameWnd::OnGetMinMaxInfo(lpMMI); } |
ПРИМЕЧАНИЕ Для добавления этого обработчика можно использовать ClassWizard. Если оно не появляется в списке Messages, перейдите на вкладку Class Info и установите Message filter: Window. |