Размещение окна после окна 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*
что еще сказать? ...