Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Контрол за пределами родительской формы


Автор: Diego2la 30.3.2012, 14:24
Возникла необходимость вытащить контрол за пределы родительской формы. Это уже реализовано во многих программах, к примеру, в VS можно таскать Solution Explorer по всему экрану. Одним словом нужно найти способ перетащить контрол в любую часть экрана, при этом оставив обработчиков на родителе.
Есть ли в MFC способы решения этой задачи. Возможно уже что-то написано на эту тему. 

Благодарен за помощь. 

Дмитрий.

Автор: Earnest 30.3.2012, 17:15
Если контрол == дочернее окно (т.е. WS_CHILD), то ни при каких условиях оно не может вылезти за пределы родительского. Но в WinAPI есть еще понятие Owner-окна, правда довольно мутное (на мой взгляд). Но делу это особо не помогает, т.к. стандартного механизма нотификации Owner'а нет, каждый извращается на свой лад. Солюшен-эксплорер, тобой упомянутый - это не один контрол, а кучка окон одно в другом. Если не ошибаюсь, при перетаскивании контрол меняет парента, помещаясь в специальный плавающий попап.
Что касается местоположения обработчиков сообщений, то в MFC все команды от панелей приходят обычно к главному фрейму (если панели принадлежат ему; в принципе, панели можно присобачить и к дочернему фрейму, но так обычно не делают). А вот из главного окна команда идет по стандартному dispatch-пути (вид, документ, etc). Под командой в данном случае подразумеваются извещения WM_COMMAND, WM_COMMAND типа update и WM_NOTIFY. И вроде что-то еще, но я IRL этого не встречала (возможно, для какого-нибудь OLE). Все остальное нужно пересылать руками, никто не мешает - хоть полный состав windows-сообщений.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)