Исключение определенных дочерних окон MDI из каскадирования - PullRequest
2 голосов
/ 09 декабря 2011

Я написал приложение MDI со многими дочерними формами, каждая из которых отличается. Допустим, пользователь создал три дочерние формы: первая форма имеет свой левый верхний угол в координатах экрана 0,0; вторая форма была перетащена в правую часть экрана (координаты 100, 300), а третья форма появляется в координатах 20, 20. Если я использую каскадную команду основной формы, то вторая форма переместится на 10,10.

Я бы хотел, чтобы вторая форма осталась там, где она есть, и чтобы третья форма переместилась на 10, 10 (т. Е. Второе место каскадного порядка). Есть ли способ исключить определенные дочерние MDI-формы из команды Cascade основной формы?

1 Ответ

3 голосов
/ 09 декабря 2011

Нет способа повлиять на поведение метода Cascade, который реализуется путем отправки сообщения WM_MDICASCADE в окно контейнера MDI, ClientHandle.

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

Другой вариант - реализовать собственный метод позиционирования дочернего элемента MDI. Это на самом деле относительно легко сделать. Я бы посоветовал вам обратиться к исходному коду проекта Wine , чтобы понять, как это сделать. Файл ключа mdi.c в user32 DLL.

...