我有一个包含控件(编辑,组合框等等)的对话框,有些是可见的,有些是可见的。
在函数中,我想要的是循环所有控件并获得最后显示的控件。
我想补充一点,在创建对话框时,我将某些控件的可见性设置为SW_HIDE
,将其他控件设置为SW_SHOW
。
我所做的是使用::IsWindowVisible
,但即使我将可见性设置为SW_SHOW
,也会返回false。
注意:在创建对话框后立即调用该函数,该对话框尚不可见。
答案 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。我怀疑有更好的方法来编写代码,这样整个问题就不是问题了。