0

我有一个TWinControl并且正在尝试确定父窗口是否可见。

我看到TWinControl有一个属性ParentWindow。的返回类型ParentWindowvoid *。所以我很好奇我是否必须转换为特定类型,然后我可以检查窗口是否可见。

有谁知道我需要转换的类型,或者其他方式来完成这个?


其他故障排除说明,第 1 部分:

我试图通过以下方式获取 ParentWindows 类:

String parentWindowClassName = ((TObject *)(Control->ParentWindow))->ClassName();

但这给出了访问冲突。我还尝试强制转换为 TForm,这也导致了访问冲突,这让我相信父窗口可能由窗口控制。如果是这样,有谁知道检查它是否可见的任何技巧?例如,任何 COM 技巧或什么?

其他故障排除说明,第 2 部分:

这个问题的答案可能有助于解决我的另一个问题:C++ Builder 2009 - Cannot focus a disabled or invisible window

然而,如果没有这种方法,另一个问题可能会得到解决,这就是我发布不同问题的原因。

其他故障排除说明,第 3 部分:

感谢肯提供的额外信息。我从代码辅助中获取了我的信息: 在此处输入图像描述

但是我看到您的 HWND 返回类型来自:http ://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Controls_TWinControl_ParentWindow.html

这可能是我需要的额外信息......如果我得到它的工作将发布一个解决方案。谢谢。

4

1 回答 1

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();
    }
}
于 2013-03-16T02:40:19.413 回答