2015-08-23 3 views
1

Пожалуйста, обратите внимание на этом скриншоте:Сдерживание перетаскиваемых дочерних окон в родительском окне?

enter image description here

Как вы можете видеть, «Исполняемые модули» и «Тема» дочерних окна могут свободно бродить в песочнице, как «Themida» родительское окно, и если они перетаскиваются мимо края, переполнение просто скрывается. Как я могу создать этот эффект?

+0

Благодарим за добавление изображения для меня. –

ответ

3

Это приложение Multiple Document Interface (MDI). Содержащее окно с темно-серым фоном является клиентом MDI-клиента, а окна внутри - дочерними окнами MDI.

Использование MDI Microsoft было обескуражено в течение многих лет, поэтому вы можете подумать дважды об использовании его в новом приложении.

+0

Есть ли способ для меня достичь (визуально или функционально) подобного эффекта? Я пишу приложение, которое вводит игровое окно в мое собственное окно в качестве ребенка, а затем предоставляет всевозможные инструменты для взаимодействия с ним. У меня будет каждый «инструмент», а игровое окно - дочернее окно MDI. –

+1

@VincentLindgren Основополагающая технология все еще работает, поэтому нет ничего, что останавливало бы вас при использовании MDI, просто не рекомендуется использовать такой интерфейс. –

+0

MDI не устарел от Microsoft. Корпорация Майкрософт рекомендует не использовать ее на основе соображений удобства использования, но не из-за устаревания (см. [Интерфейс нескольких документов] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms632591.aspx): * «Многим новым и средним пользователям трудно научиться использовать приложения MDI, поэтому вам следует рассмотреть другие модели для вашего пользовательского интерфейса. ** Однако вы можете использовать MDI для приложений, которые нелегко вписываются в существующую модель. ** «*). – IInspectable

1

Просто установите стиль окна WS_CHILD, и окно будет ограничено в родительском прямоугольнике клиента.

Вы можете сделать это во время создания окна, или после использования SetWindowLongPtr() и GetWindowLongPtr():

SetWindowLongPtr(hwnd, GWL_STYLE, WS_CHILD | GetWindowLongPtr(hwnd, GWL_STYLE)); 

P.S. Вам не нужно создавать приложение MDI для такого поведения.

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