2010-12-29 6 views
1

私が持っているアプリケーションに機能を追加するには、ウィンドウスパイタイプのものを書いています。私はすべてのコードが動作しているが、時々WindowFromPointがコントロールを含むウィンドウの代わりにハンドルを返します。私の目的のために、私は主要なウィンドウを含むことにのみ関心があります。コントロールを除外する方法はありますか?または、結果がコントロールであることを検出し、ウィンドウが表示されるまで上方に再帰しますか?WindowFromPointはコントロールのハンドルを返しますが、メインウィンドウのみが必要です

答えて

3

WS_CHILDフラグ(GetWindowLongPtrは 'GWL_STYLE')をテストできます。その場合は、GetAncestorに 'GA_ROOT'を 'gaFlags'と指定して呼び出します。

+0

私はこれをC#で行い、pinvokeには 'IntPtr'を返す' GetWindowLongPtr'があります。 'WS_CHILD'はlong型なので、どのようにフラグをチェックするためにそれらを同じフォーマットに変換できますか? – unholysampler

+0

ウィンドウスタイルはちょうど32ビットの数字です(GWL_ *は32ビット、GWLP_ *はポインタサイズ) – Anders

+0

@アンダーウィンドウスタイルはlong(64ビット)としてリストされます。 http://msdn.microsoft.com/en-us/library/ms632600%28v=vs.85%29.aspx 'ToInt64()'は 'WS_CHILD'に対してフラグチェックを行いました。 – unholysampler

関連する問題