Получил некоторые формы / элементы управления C #, которые можно вызывать либо из элемента управления C # в Winform в приложении Winforms MDI, либо из того же элемента управления C #, который используется приложением PowerBuilder MDI через COM.
Я использовал вызов WinAPI SetParent для присоединения форм к MDI.
- Он работает (или, кажется, работает) в обеих средах.
- Позволяет дочернему окну иметь свой собственный WindowState (Normal, Maximized) вместо того, чтобы брать уже открытое дочернее окно (что было настоящей болью).
Скажем, элемент управления называется T. Код элемента управления T вызывает форму D.
Элемент управления T находится на форме X.
Элемент управления T также находится в форме Y.
В .Net все хорошо, и форма D остается в пределах MDI.
в PB:
Управление T находится на управлении PB PX.
Контроль T также находится на контроле PB PY.
С ПХ все хорошо.
Однако для PY есть проблема - форма D, похоже, не становится дочерним элементом MDI - она может выходить за пределы приложения и иметь значок на панели задач. Я подчеркиваю, что здесь используются те же объекты, что и те, которые работают. SetParent - это буквально та же строка кода.
Дальнейшие исследования показали, что SetParent на самом деле не работает для правильного MDI-кодирования - но это нормально, потому что нам не нужно объединять меню и т. Д.
Интересно, мы обнаружили, что хотя SetParent кажется «работающим», вы не получите обратно дескриптор, если попробуете GetParent ...
Form form = new MyForm();
WindowsMessageHelper.SetParent(form.Handle, MDIParentHandle); //passed down
int parentHandle = WindowsMessageHelper.GetParent(form.Handle);
parentHandle всегда будет 0 ....
Есть ли способ заставить форму D вести себя при любых обстоятельствах? Мои собственные исследования не были многообещающими. На самом деле я не хочу возвращаться и переписывать свои формы в качестве элементов управления, чтобы PowerBuilder управлял ими - главным образом потому, что может быть несколько экземпляров каждой формы, и PowerBuilder должен был бы обрабатывать это (вместо получил это в приложении .net).
Могу ли я подчеркнуть, что в .Net проблемы НЕТ, проблема проявляется только в приложении PowerBuilder