how to find a window's SW_SHOW/SW_HIDE status

无人久伴 提交于 2019-11-30 11:34:00
Kirill V. Lyadvinsky

Use GetWindowPlacement. It fills WINDOWPLACEMENT structure, which has field showCmd.

showCmd
Specifies the current show state of the window. This member can be one of the following values.

Call GetWindowLong( handle, GWL_STYLE), check the returned value for WS_VISIBLE style presence.

I would use GetWindowPlacement, however I am not sure if I understood what you want. It fills in a WINDOWPLACEMENT structure and then use the showCmd member.

Flavio

GetWindowPlacement() function will work only if the window is maximized or minimized. Otherwise, showCmd member will return SW_SHOWNORMAL also when window is hidden, as pointed out in this StackOverflow answer: WINDOWPLACEMENT's showCmd... always 1?

You can use the more straightforward boolean function IsWindowVisible() to get if the specified Window is in a visible state or not.

If it is a multi-tab dialog and not a control, then override as

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

In BEGIN_MESSAGE_MAP, add ON_WM_SHOWWINDOW().

m_nCmdShow now has the status if the window is SW_SHOW or SW_HIDE.

I don't know if there is a proper method for this task but I would try WindowFromPoint Function.

Remarks

The WindowFromPoint function does not retrieve a handle to a hidden or disabled window, even if the point is within the window. An application should use the ChildWindowFromPoint function for a nonrestrictive search.

For example I would convert control's corner coords into screen coords and then try to get it's handle from those points.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!