Как проверить, если окно "Всегда сверху"? - PullRequest
9 голосов
/ 19 марта 2011

В моей полезной программе горячих клавиш у меня есть глобальная горячая клавиша, которая устанавливает текущее окно переднего плана на Topmost / Not topmost, вызывая

SetWindowPos(hwnd, HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
SetWindowPos(hwnd, HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

на данный момент у меня должно быть две отдельные горячие клавиши, Win + Z, чтобы установить окно в TOPMOST, и Win + X, чтобы установить окно в NOTOPMOST.

Я не могу найти функцию в MSDN, которая позволяет вам проверять порядок окон z .. Я надеялся на что-то вроде GetWindowOrder, но это не так. Я также попытался проверить флаги Windows ex следующим образом:

dwExStyles & WS_EX_TOPMOST

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

Есть ли функция для проверки этого?

Ответы [ 2 ]

15 голосов
/ 19 марта 2011

Я думаю, вы можете сделать это:

DWORD dwExStyle = ::GetWindowLong(m_hWnd, GWL_EXSTYLE);

if ((dwExStyle & WS_EX_TOPMOST) != 0)
{
    // do stuff
}

Вот ссылка MSDN - http://msdn.microsoft.com/en-us/library/ms633584(VS.85).aspx

А вот ссылка MSDN на расширенные стили - http://msdn.microsoft.com/en-us/library/ff700543(v=VS.85).aspx -самый верхний в настоящее время указан как "TBD":)

2 голосов
/ 19 марта 2011

Вы ищете GetWindow():

Извлекает дескриптор окна, которое имеет указанные отношения (Z-Order или владелец) по указанному окно.

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