2013-09-30 8 views
2

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

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

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

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

Спасибо!

+0

Непонятно для меня, что вы хотите! Вы хотите отключить функции drag & drop внутри CMFCTabCtrl? – xMRi

+0

xMRi - Я не уверен? Извините, я довольно новичок в MFC. Я не хочу изменять поведение перетаскивания самих вкладок, если это то, о чем вы говорите. В данном окне вкладки будет одно или несколько окон (компонентов). Я не хочу, чтобы пользователи могли изменять размер или расположение этих окон после их открытия. – BobbyA

+0

Если вы можете представить новую вкладку в Chrome или Firefox, где вы видите различные поля, которые представляют веб-сайты, которые вы недавно посещали, это похоже на мою настройку. Когда вы переходите на эту вкладку, вы можете перетащить эти поля. Я хочу отключить это поведение в своем проекте. – BobbyA

ответ

0

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

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

+0

Возможность перетаскивания окон по умолчанию не включена? Это не кажется правильным. Эти компоненты являются объектами CWND, если это делает вещи более ясными. – BobbyA

1

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

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

+0

Это то, что я искал, спасибо! Я попробую это, когда я приступлю к разработке решения, и помечаю его как ответ, если он будет работать. – BobbyA

0

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

Смежные вопросы