Как вывести окно наверх?

Я создал этот код, который выводит окно Internet Explorer наверх.

    public void avtivateIEWin(IntPtr win){
        int foregrRes = SetForegroundWindow(win);
        log("foregrRes:" + foregrRes);
        ShowWindowAsync(win, SW_SHOW);
        BringWindowToTop(win);
        SetActiveWindow(win);
        SwitchToThisWindow(win, true); 
        SetFocus(win); 

}

(цель моей программы - имитировать поведение Alt-Tab для переключения между окнами моего приложения, которые являются окнами IE)

Да ... Я включил сюда все возможные функции ... и это работает Хорошо, если у меня есть только одно окно IE!

Но когда у меня есть 2 окна IE, одно из них открывается с помощью функции showModalDialog / showModlessDialog - это не работает.

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

Пожалуйста, порекомендуйте.

Спасибо


person michaels123    schedule 15.12.2010    source источник


Ответы (1)


Вот как работают модальные окна - они всегда будут отображаться над родительским окном, когда родительский элемент виден, и нет возможности изменить это поведение.

MSDN содержит дополнительную информацию об окнах владельцев, в частности, упоминается, что:

Принадлежащее ему окно всегда находится выше своего владельца в z-порядке.

person casablanca    schedule 15.12.2010
comment
Хорошо .. Я понял ... Тогда я могу использовать другой подход - свести к минимуму все модальные окна, чтобы показать родителя. Есть ли у такого подхода недостатки? - person michaels123; 15.12.2010
comment
Или просто не открывайте модальные окна, если окажется, что модальное окно вам действительно не нужно. Почему вы используете модальные окна, если хотите, чтобы они вели себя как немодальные окна? - person i_am_jorf; 15.12.2010