как найти состояние окна SW_SHOW / SW_HIDE - PullRequest
14 голосов
/ 16 сентября 2009

Я пытаюсь определить видимость элемента управления окна, который был скрыт или включен с помощью CWnd :: ShowWindow (). (или :: ShowWindow (hWnd, nCmdShow))

Я не могу просто использовать :: IsWindowVisible (hWnd), так как элемент управления находится на вкладке, которая сама может быть отключена, в результате чего IsWindowVisible вернет FALSE.

Есть ли способ получить состояние окна SW_SHOW / HIDE (или других) или мне нужно использовать значение повтора ShowWindow () и выполнить сброс соответственно?

редактирование: так как элемент управления включен (или отключен) для отображения, но в данный момент может не отображаться, так как вкладка переключена, я бы подумал, что его состояние SW_SHOW останется прежним, даже если само окно фактически не включено. Я нереалистичен в своих ожиданиях, что это нормально.

Так что на самом деле я ищу "можно ли показать это окно / элемент управления"

Ответы [ 6 ]

12 голосов
/ 16 сентября 2009

Вызов GetWindowLong( handle, GWL_STYLE), проверьте возвращаемое значение на наличие стиля WS_VISIBLE.

7 голосов
/ 16 сентября 2009

Использование GetWindowPlacement . Он заполняет структуру WINDOWPLACEMENT , которая имеет поле showCmd.

showCmd
Определяет текущее состояние показа окна. Этот член может иметь одно из следующих значений.

2 голосов
/ 16 сентября 2009

Я бы использовал GetWindowPlacement, однако я не уверен, понял ли я, что вы хотите. Он заполняет структуру WINDOWPLACEMENT и затем использует элемент showCmd.

0 голосов
/ 10 февраля 2018

Если это диалоговое окно с несколькими вкладками, а не элемент управления, переопределите как

void MyClass::OnShowWindow(BOOL bShow, UINT nStatus)
{
    m_nCmdShow = bShow;
    CDialog::OnShowWindow(bShow, nStatus);
}

В BEGIN_MESSAGE_MAP добавьте ON_WM_SHOWWINDOW ().

m_nCmdShow теперь имеет статус, если окно имеет значение SW_SHOW или SW_HIDE.

0 голосов
/ 05 января 2016

Функция GetWindowPlacement () будет работать только в том случае, если окно развернуто или свернуто. В противном случае член showCmd будет возвращать SW_SHOWNORMAL также, когда окно скрыто, как указано в этом ответе StackOverflow: showCmd в WINDOWPLACEMENT ... всегда 1?

Вы можете использовать более простую логическую функцию IsWindowVisible (), чтобы получить, находится ли указанное окно в видимом состоянии или нет.

0 голосов
/ 16 сентября 2009

Я не знаю, существует ли правильный метод для этой задачи, но я бы попробовал Функция WindowFromPoint.

Примечания

Функция WindowFromPoint не извлекает дескриптор скрытого или отключено окно, даже если точка в окне. Приложение следует использовать ChildWindowFromPoint функция для неограниченного поиска.

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

...