如何找到一个窗口的SW_SHOW / SW_HIDE状态(how to find a window&

2019-07-18 04:41发布

我试图确定已隐藏,或与CWnd的启用窗口控制的知名度::的ShowWindow()。 (或::的ShowWindow(HWND,的nCmdShow))

我不能简单地用:: IsWindowVisible(HWND)作为控制是在标签片,其自身可以被切换出,引起IsWindowVisible返回FALSE。

有没有办法让SW_SHOW /隐藏(或其他)窗口状态还是需要使用的ShowWindow(的retun值),并相应地复位?

编辑:作为控制启用(或禁用)显示,但目前可能还无法看到,因为标签切换OT,我会认为这是SW_SHOW状态将保持不变,即使窗口本身是不实际交换如果我在我的期望是不现实这很好。

因此,其实我在寻找“可以在这个窗口/控件中显示”

Answer 1:

使用GetWindowPlacement 。 它填补WINDOWPLACEMENT结构,其中有场showCmd

showCmd
指定窗口的当前显示状态。 此构件可以是以下值中的一个。



Answer 2:

呼叫GetWindowLong( handle, GWL_STYLE)检查WS_VISIBLE风格存在返回的值。



Answer 3:

我会用GetWindowPlacement ,但我不知道如果我明白你想要什么。 它填补了一个WINDOWPLACEMENT结构,然后使用showCmd成员。



Answer 4:

GetWindowPlacement如果最大化或最小化窗口()函数将只工作。 否则,showCmd成员将返回SW_SHOWNORMAL也当被隐藏的窗口,在这个StackOverflow的答案中指出: WINDOWPLACEMENT的showCmd ......始终为1?

您可以使用更简单的布尔函数IsWindowVisible ()来获取如果指定的窗口处于可见状态或没有。



Answer 5:

如果是多标签对话框,而不是控制,那么作为替代

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。



Answer 6:

我不知道是否有完成这个任务, 正确的方法,但我会尝试WindowFromPoint功能。

备注

该WindowFromPoint函数不检索的句柄,隐藏或关闭窗口,即使点在窗口内。 一个应用程序应该使用ChildWindowFromPoint功能的非限制性搜索。

例如,我会控制的角落COORDS转换成屏幕COORDS,然后设法得到它是从这些点处理。



文章来源: how to find a window's SW_SHOW/SW_HIDE status