Размещение окна после окна TOPMOST

У меня есть окно TOPMOST, и у меня есть другое (myWindow) окно, которое я хочу разместить за первым, и я не хочу, чтобы второе окно было самым верхним:

SetWindowPos(topMostWin, HWND_TOPMOST, left, top, width, height, flags);
LONG_PTR exstyle = ::GetWindowLongPtr(myWindow, GWL_EXSTYLE);
if (exstyle & WS_EX_TOPMOST)
{
    exstyle &= ~WS_EX_TOPMOST;
    if( ! ::SetWindowLongPtr(myWindow, GWL_EXSTYLE, exstyle))
    {
        LOG_ERROR();
    }
}
SetWindowPos(myWindow, topMostWin, left, top, width, height, flags);

Но myWindow продолжает работать как самое верхнее окно, и когда я проверяю WS_EX_TOPMOST свойство расширенных стилей все еще включено. Можно ли отключить самый верхний бит, хотя я помещаю окно после самого верхнего окна?

2 ответа

Решение

HWND_TOP поместит ваше окно в верхнюю часть z-порядка за любыми верхними окнами.

В результате введения "самых верхних" окон HWND_TOP теперь выводит окно "как можно выше в Z-порядке, не нарушая правила о том, что самые верхние окна всегда появляются над не самыми верхними окнами". Что это значит на практике?

  • Если окно является верхним, то HWND_TOP помещает его в самый верх Z-порядка.
  • Если окно не самое верхнее, то HWND_TOP помещает его сверху всех не верхних окон (т. Е. Чуть ниже самого нижнего верхнего окна, если оно есть).

Примечание. Приведенное выше обсуждение полностью игнорирует проблему владельца и собственных окон. Я оставил их, потому что они добавили бы слой усложнения, который отвлекает от основной темы.

                                *Raymond Chen - The Old New Thing* 

ссылка на блог-сайт Раймонда

что еще сказать? ...

Другие вопросы по тегам