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

how to know if my control is visible or not

本文关键字:是否 控制 何知道 我的      更新时间:2023-10-16

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

功能中的内容,我想要在所有控件上循环并获得最后显示的控件。

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

我所做的是使用::IsWindowVisible,但是即使我将可见性设置为SW_SHOW

nb:该函数在对话框创建后才调用,对话框尚不可见。

在调用该函数时,控件是不可见的,因为包含它的对话框不可见。根据IsWindowVisible函数的文档:

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

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

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

也就是说,我真的不明白您为什么需要这样做。如果您的对话界定代码设置了控件的可见性,则您的可见性是什么。您无需在运行时动态检索它。换句话说,这听起来像是X-y问题。我怀疑有一种更好的方法来编写您的代码,以使整个问题都是非问题的。