如何知道我的控件是否可见

时间:2017-06-01 12:41:48

标签: c++ winapi

我有一个包含控件(编辑,组合框等等)的对话框,有些是可见的,有些是可见的。

在函数中,我想要的是循环所有控件并获得最后显示的控件。

我想补充一点,在创建对话框时,我将某些控件的可见性设置为SW_HIDE,将其他控件设置为SW_SHOW

我所做的是使用::IsWindowVisible,但即使我将可见性设置为SW_SHOW,也会返回false。

注意:在创建对话框后立即调用该函数,该对话框尚不可见。

1 个答案:

答案 0 :(得分:5)

在调用函数时,控件可见,因为包含它的对话框不可见。根据{{​​3}}的文档:

  

如果指定的窗口,其父窗口,其父窗口等具有WS_VISIBLE样式,则返回值为非零。否则,返回值为零。

这不仅解释了您所看到的行为,还提出了可能的解决方案。如果你想知道一个特定的窗口是否设置了WS_VISIBLE样式位(并且不关心它的任何祖先),那么只需检索该窗口的样式并测试是否存在直接WS_VISIBLE位。例如:

LONG_PTR wndStyles = GetWindowLongPtr(hwndCtrl, GWL_STYLE);
bool     isVisible = (wndStyles & WS_VISIBLE) == WS_VISIBLE;

那就是说,我真的不明白为什么你需要这样做。如果对话框初始化代码设置了控件的可见性,那么您知道的可见性。您不需要在运行时动态检索它。换句话说,这听起来像IsWindowVisible function。我怀疑有更好的方法来编写代码,这样整个问题就不是问题了。