我有一个TWinControl
,我正在尝试确定父窗口是否可见。
我看到TWinControl
的属性为ParentWindow
。 ParentWindow
的返回类型为void *
。所以我很好奇我是否必须转换为特定类型,然后让我访问以检查窗口是否可见。
有没有人知道我需要投射的类型,或其他方式来实现这个目标?
其他疑难解答说明,第1部分:
我试图通过以下方式获取ParentWindows类:
String parentWindowClassName = ((TObject *)(Control->ParentWindow))->ClassName();
但是这违反了访问权限。我也试过转换为TForm,这也给出了访问冲突,这让我相信父窗口可能是由windows控制的。如果是这样,有没有人知道检查它是否可见的任何技巧?例如。任何COM技巧或任何东西?
其他疑难解答说明,第2部分:
这个问题的答案可能有助于解决我的另一个问题:C++ Builder 2009 - Cannot focus a disabled or invisible window
然而,如果没有这种方法,其他问题可能会得到解决,这就是为什么我发布了一个不同的问题。
其他疑难解答说明,第3部分:
感谢额外的信息肯。我从代码帮助中获取了我的信息:
看到你的HWND返回类型这可能是我需要的额外信息......如果我开始工作,我会发布解决方案。 THX。
答案 0 :(得分:0)
@KenWhite,你的建议给了我所需要的,谢谢!
以下是解决我问题的代码:
#include "winuser.h"
...
void SafeSetFocus(TWinControl *Control)
{
HWND hWnd = Control->ParentWindow;
bool parentIsVisible = IsWindowVisible(hWnd);
if(Control->Enabled && Control->Visible && parentIsVisible)
{
Control->SetFocus();
}
}