我有一个包含控件(编辑,组合框等等)的对话框,有些是可见的,有些是可见的.
在函数中,我想要的是循环所有控件并获得最后显示的控件.
我想补充一点,在创建对话框时,我将可见性设置为某些控件SW_HIDE
和其他控件SW_SHOW
.
我所做的是使用::IsWindowVisible
,但即使我将可见性设置为,也会返回false SW_SHOW
.
注意:在创建对话框后立即调用该函数,该对话框尚不可见.
在调用函数时,控件不可见,因为包含它的对话框不可见.根据IsWindowVisible
功能文档:
如果指定的窗口,其父窗口,其父窗口等等具有
WS_VISIBLE
样式,则返回值为非零.否则,返回值为零.
这不仅解释了您所看到的行为,还提出了可能的解决方案.如果你想知道某个特定窗口是否WS_VISIBLE
设置了样式位(并且不关心它的任何祖先),那么只需检索该窗口的样式并WS_VISIBLE
直接测试该位的存在.例如:
LONG_PTR wndStyles = GetWindowLongPtr(hwndCtrl, GWL_STYLE);
bool isVisible = (wndStyles & WS_VISIBLE) == WS_VISIBLE;
Run Code Online (Sandbox Code Playgroud)
那就是说,我真的不明白为什么你需要这样做.如果对话框初始化代码设置了控件的可见性,那么您就知道它们的可见性.您无需在运行时动态检索它.换句话说,这听起来像是一个XY问题.我怀疑有更好的方法来编写代码,以便整个问题都没有问题.