如何知道我的控制是否可见
how to know if my control is visible or not
我有一个包含控件的对话框(编辑,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问题。我怀疑有一种更好的方法来编写您的代码,以使整个问题都是非问题的。
相关文章:
- 是否可以使用if constexpr删除控制流语句
- 是否可以使用一个类来控制 C++ 中另一个类的对象?(阿杜伊诺)
- 是否可以使用三元切换/控制/谓词成员函数调用?
- 是否可以跨动态库控制销毁顺序?
- Msgpack中是否具有版本控制功能
- c ++ 是否有任何用于列出 Windows 驱动程序管理器控制台中显示的设备驱动程序的 Windows API?
- 访问控制对于已删除的构造函数是否重要?
- 如何知道我的控制是否可见
- 是否可以访问C++标头/库并在 python 控制台中运行C++脚本?
- HPX 是否提供具有粒度控制的基于任务的并行化迭代函数?
- 如何根据模板参数包是否匹配函数参数来控制模板函数定义?
- 我们是否可以使用 FireBase 云消息传递来发送或接收消息,或者在 Windows 桌面/控制台或 Linux 控制
- 控制一个字符串是否存在于另一个字符串中(以 C++ 为单位)
- 是否有任何类型特征控制成员类型(不是成员变量)
- 是否可以使头文件使文本居中?- 在控制台中
- FPU控制功能是否与x64_64处理器相关
- 是否可以在 Visual Studio 中的 Win32 C++应用程序中的控制台中进行调试
- 此功能是否具有所有控制路径上的明确返回值
- 是否可以在GDB会话之间传输对程序的控制
- VS 2008/2010中是否控制尾部结构填充?(#pragma包不够好)