0

TWinControl親ウィンドウが表示されているかどうかを確認しようとしています。

TWinControlのプロパティがありますParentWindow。の戻りタイプはParentWindowですvoid *。したがって、特定のタイプにキャストする必要があるかどうかが気になります。これにより、ウィンドウが表示されているかどうかを確認するためのアクセス権が与えられます。

誰かが私がキャストする必要があるタイプ、またはこれを達成するための別の方法を知っていますか?


追加のトラブルシューティングノート、パート1:

次の方法でParentWindowsクラスを取得しようとしました。

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

しかし、これはアクセス違反を引き起こしました。また、TFormにキャストしようとしましたが、これもアクセス違反を引き起こし、親ウィンドウがウィンドウによって制御されている可能性があると思われます。もしそうなら、誰かがそれが表示されているかどうかを確認するためのトリックを知っていますか?たとえば、COMのトリックなどはありますか?

追加のトラブルシューティングノート、パート2:

この質問への答えは、私の他の質問を解決するのに役立つかもしれません:C ++Builder2009-無効または非表示のウィンドウに焦点を合わせることができません

ただし、他の質問はこのアプローチなしで解決できる可能性があるため、別の質問を投稿しました。

追加のトラブルシューティングノート、パート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 に答える