Как удалить атрибут TOPMOST из окна - PullRequest
0 голосов
/ 11 июня 2019

У меня есть приложение для Windows C ++, которое создает два отдельных окна

Мне нужно временно сделать одно окно самым верхним, а затем удалить этот атрибут, чтобы другие окна могли перекрывать его.

Я пробовал этот код:

void setWindowAlwaysOnTop(const std::string& windowTitle, bool onTop) {
    HWND hwnd = FindWindowA(NULL, windowTitle.c_str());
    HWND insertAfter;
    if (onTop) insertAfter = HWND_TOPMOST;  //set the window always-on-top    
    else insertAfter = HWND_BOTTOM; 
    SetWindowPos(hwnd, insertAfter, NULL, NULL, NULL, NULL, SWP_NOMOVE | SWP_NOSIZE);
}

Но если я ранее вызывал этот код с помощью onTop true, он не позволяет другим окнам перекрывать целевое окно после того, как я вызываю его с помощью onTop false.

Я также пытался вызвать функцию из самого целевого окна, а не из отдельного окна, но она все еще не работает.

Насколько я могу видеть на https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setwindowpos, это должно работать?

Это правильно, или есть другой способ достичь этого?

Ответы [ 2 ]

0 голосов
/ 15 июня 2019

Используйте SetWindowLongPtr. Эта функция отменит ваши стили окна, но вы можете восстановить их, как в примере ниже:

SetWindowLongPtr(hWnd, GWL_STYLE, WS_OVERLAPPEDWINDOW); //Discard WS_EX_TOPMOST

ВАЖНОЕ ПРИМЕЧАНИЕ:

Чтобы написать код, совместимый как с 32-разрядной, так и с 64-разрядной версиями Windows, используйте SetWindowLongPtr. При компиляции для 32-битной Windows SetWindowLongPtr определяется как вызов функции SetWindowLong.

Надеюсь, это сработает.

0 голосов
/ 11 июня 2019

Ссылка на документацию, которую вы указываете в вопросе, указывает, что вы должны передать HWND_NOTOPMOST в hWndInsertAfter.Об этом флаге написано:

Размещает окно над всеми не верхними окнами (то есть за всеми самыми верхними окнами).Этот флаг не имеет эффекта, если окно уже не самое верхнее окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...