RealChildWindowFromPointの使い方。

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

RealChildWindowFromPointの使い方。

#1 投稿記事 by 7 »

カーソル下のウィンドウハンドルを取得しようと思い、グループボックスの中にあるコントロールも取得したかったのでRealChildWindowFromPoint()関数を使おうとしたんですがうまくいきません。 どなたかRealChildWindowFromPoint()関数に詳しい方いませんか?
ゲスト

#2 投稿記事 by ゲスト »

とりあずデバッグして一つ一つの処理を確認してみては?
そのAPIだけが失敗するのなら問題ですが。
同系のAPIと使用方法は、大差ないですし。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#3 投稿記事 by 7 »

> そのAPIだけが失敗するのなら問題ですが。
RealChildWindowFromPoint()関数の戻り値がいつも 0 ですね。
関数が悪い訳じゃなくて指定すべき値が間違ってるんでしょうか...。
違うサンプルコードから以下のように直したんですけどやっぱりグループボックスの中のコントロールのハンドルを取得できません。 環境が悪いんでしょうかねぇ...。
てふろん
記事: 3
登録日時: 2005年11月01日(火) 20:08

#4 投稿記事 by てふろん »

こんにちは、てふろんです。

RealChildWindowFromPoint の第二引数は POINT構造体 の値渡しかと。
よって Int64 か QWord に置き換えてあげる必要があるような気がします。

> Dim fnRealWndFromPoint As *Function(ByVal hwndParent As HWND,ptParentClientCoords As QWord) As HWND
このように関数ポインタを定義し、

> Dim uHitTest As Qword
> uHitTest = ptHitTest.x or ( ptHitTest.y << 32 )
> hHit = fnRealWndFromPoint(pParent,uHitTest)
とすれば動いてくれるような気がします。

テストしてないので全くわかりませんが。
ゲスト

#5 投稿記事 by ゲスト »

すでにレスが付いてる通り、元の宣言は、値渡しですね。

HWND RealChildWindowFromPoint(
HWND hwndParent,
POINT ptParentClientCoords
);

なので、こうしてみてください。

Declare Function RealChildWindowFromPoint Lib "user32" _
(hWndParent As HWND, _
xPoint As Long, _
yPoint As Long) As HWND
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#6 投稿記事 by 7 »

てふろんさん さんが書きました:RealChildWindowFromPoint の第二引数は POINT構造体 の値渡しかと。
よって Int64 か QWord に置き換えてあげる必要があるような気がします。

> Dim uHitTest As Qword
> uHitTest = ptHitTest.x or ( ptHitTest.y << 32 )
> hHit = fnRealWndFromPoint(pParent,uHitTest)
とすれば動いてくれるような気がします。
これでもできなくて悩んでいた所、グループボックスの中のActiveBasicで言う「通知」にチェックが入ってないスタティックコントロールは感知できないってことが分かりました...。
他のコントロールは取得できていました。 Int64,QWord がActiveBasicになかったら使えなかったんでしょうかね。
ゲストさん さんが書きました:なので、こうしてみてください。

Declare Function RealChildWindowFromPoint Lib "user32" _
(hWndParent As HWND, _
xPoint As Long, _
yPoint As Long) As HWND
こういう風に宣言できたんですか!これが分かってれば悩むことも無かったかもしれませんね。

てふろんさん、ゲストさん、ありがとうございました。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#7 投稿記事 by 7 »

> Int64,QWord がActiveBasicになかったら使えなかったんでしょうかね。
> 上のくだりで気付いたんですけど、 と書いても動きました。
返信する