Предотвратить выход из развернутого режима окна
Я пишу код управления окном на C. Когда установлены определенные флаги, я хочу иметь развернутое окно, которое нельзя изменить, перетаскивая окно за строку заголовка. Есть ли способ "заблокировать" развернутое окно в его развернутом состоянии?
2 ответа
Попробуй это
case WM_SYSCOMMAND:
if(IsMaximized(hwnd) && ((wParam & 0xFFF0) == SC_RESTORE || (wParam & 0xFFF0) == SC_MOVE)){
return 0;
}
break;
редактировать
Полный код
switch(message){ //handle the messages
...
...
case WM_SYSCOMMAND:
...
break;
....
default: //for messages that we don't deal with
return DefWindowProc(hwnd, message, wParam, lParam);
}
return DefWindowProc(hwnd, message, wParam, lParam);
Это стандартная WindowProcedure. Я думал, что это было известно.
Valter
Ответ Вальтера показывает, как перехватить действие пользователя и отменить изменение состояния окна на этом этапе. Это, однако, не будет обрабатывать изменения состояния, сделанные через Win API напрямую (например, ShowWindow
).
Windows API предлагает вам еще одну опцию, которая обеспечивает более точный контроль изменений состояния / положения окна. Он также более гибкий: например, он позволяет применять определенные приложением ограничения к положению окна. Опция есть WM_WINDOWPOSCHANGING
сообщение и его обработчик. Окно получает указатель на структуру, которую оно может изменить, чтобы настроить желаемое состояние и положение. Таким образом, форсирование максимизированного состояния обрабатывает более широкий диапазон сценариев.
Во время обработки этого сообщения изменение любого значения в WINDOWPOS влияет на новый размер, положение или место окна в Z-порядке. Приложение может предотвратить изменения в окне, установив или очистив соответствующие биты в элементе флагов WINDOWPOS.
Вы также можете прочитать это сообщение в блоге Рэймонда Чена: используйте WM_WINDOWPOSCHANGING, чтобы перехватить изменения состояния окна.
Здесь также есть несколько вопросов по SO, этот выглядит близко к вашему, и в ответе также приведен фрагмент кода: операция определения окна восстановления начинается.