Как запретить пользователям перетаскивать окна?

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

У нас есть объект, который наследуется от CMFCTabCtrl для управления нашими вкладками, который содержит коллекцию объектов CWnd, которые представляют каждую из наших вкладок. У нас также есть объект, который управляет представлениями, связанными с каждой из этих вкладок, и активирует эти представления, когда активируется соответствующая вкладка.

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

Каков будет правильный / лучший способ предотвратить перемещение этих компонентов пользователем?

Спасибо!

3 ответа

Одним из решений является удаление стиля заголовка из компонента CWnds. Без заголовка пользователь не может перетащить окно.

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

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

Я предполагаю, что под компонентами вы подразумеваете элементы управления и некоторые такие, а не дочерние окна, как в приложениях типа MDI.

Попробуйте установить для CMFCTabCtrl::m_bActivateOnBtnUp значение TRUE. Это может отключить Drag&Droip.

Другие вопросы по тегам