Как временно предотвратить изменение размера окна? - PullRequest
2 голосов
/ 01 декабря 2009

У меня есть окно, размер которого можно изменить, но в некоторых случаях изменение размера невозможно из-за состояния приложения. Есть ли способ предотвратить временное изменение размера окна?

Я хочу отключить изменение размера всеми доступными пользователям способами, включая меню окон, перетаскивание краев мышью, мозаику окон, инициируемую пользователем, выполняемую ОС - и, возможно, некоторые другие, о которых я не знаю?

Ответы [ 4 ]

8 голосов
/ 03 декабря 2009

Чтобы сохранить вид границы окна и все еще предотвратить изменение размера (и изменение курсора), перехватите WM_NCHITTEST, передайте его в DefWindowProc, если возвращаемый код является одной из констант размера, измените реальный возврат на иначе, HTCLIENT например

4 голосов
/ 01 декабря 2009

Одним из способов является использование GetWindowLong () с флагом GWL_STYLE для получения стиля окна и
сбросьте / удалите все стили , которые вам нужны, то есть стиль WS_THICKFRAME, чтобы изменить размер окна.

Вы применяете новый стиль с помощью SetWindowLong.

4 голосов
/ 01 декабря 2009

Другой возможностью является обработка сообщения WM_GETMINMAXINFO и установка структуры MINMAXINFO таким образом, чтобы как минимальный, так и максимальный размер окна был текущим размером. Тогда пользователь не сможет изменить размер окна.

0 голосов
/ 01 декабря 2009

Следующий код в процедуре окна, кажется, обрабатывает случай перетаскивания пользователем края / угла окна:

case WM_SIZING:
    RECT &rc = *(LPRECT) lParam;
    RECT windowRect;
    GetWindowRect(hwnd, &windowRect);
    rc = windowRect;
    return 0;

Я пока не нашел ничего, что помешало бы системе изменить размер окна при мозаичном / каскадном расположении окон. Я надеялся, что следующее поможет, но, похоже, это не так:

case WM_SIZE:
   return TRUE;

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

Кроме того, хотя это действительно препятствует изменению размера окна, я бы предпочел запретить пользователю даже инициировать изменение размера, чем, по-видимому, позволить ему изменять размер и затем отказаться от этого.

...