UserControl上のWebBrowserのHWNDを取得するには?

解決


ウィング  2006-03-23 00:56:53  No: 94711

開発環境はVB6(SP6)、OSはXP(SP2)です。

UserControl上にWebBrowserコントロールを配置した
OCXを作っているのですがHWNDが正常に取れません。
0が返ってきてしまいます。

Microsoftの下記HP上でHWNDの仕方は調べたのですが
UserControlではなく、標準EXEでForm上に貼り付けたやり方なら
正常に取得できました。

UserControl上に配置したWebBrowserからはHWNDは取得できないのでしょうか?

実際に渡すコンテナのハンドルは、UserControl.hwnd を引数に渡してます。

よろしくお願いいたします。


ウィング  2006-03-23 00:58:18  No: 94712

すみません。
HPのアドレス書き忘れていました・・・

http://support.microsoft.com/kb/244310/ja


通りすがり  2006-03-23 02:19:08  No: 94713

UserControl.hwndは存在しません。
Formのhwndを渡してください。


ウィング  2006-03-23 03:50:10  No: 94714

ご回答ありがとうございます。

Formのhwndを渡すということは、各ユーザコントロール毎の
hwndは取得できないってことですね・・。

どうもMicrosoftから提供されているHWNDの取得の仕方を見ると
フォーム上に複数のWebBrowserがあると最初の1個しかHWNDが
取得できないので、ユーザコントロールにしてみたのですが。

各WebBrowserのHWNDを取得することは無理ってことですかね?


我龍院忠太  2006-03-23 06:00:24  No: 94715

それはウィングさんが参照しているコードが
最初のハンドルを見つけたらループを抜ける
構造になってるからでは。


ウィング  2006-03-23 18:32:47  No: 94716

ご回答ありがとうございます。

>それはウィングさんが参照しているコードが
>最初のハンドルを見つけたらループを抜ける
>構造になってるからでは。
ループを抜けないような構造にしたとしたときに、どのオブジェクトの
ハンドルなのかというのはどう判断したらいいですか?
同じクラスIDになるのでどれがどれに紐づくのかがわかりません。

どうやってもUserControl上では正しく取れないですね。
SPY++ツールを使って取れたハンドルとプログラム上での戻り値
を比較しても異なるんですよ。


我龍院忠太  2006-03-23 19:17:52  No: 94717

>同じクラスIDになるのでどれがどれに紐づくのかがわかりません。
と言われても、それを区別するのがハンドルなんだけど・・・・
WebBrowserをいっぺんに起動せずに一つずつ起動するとか。

>どうやってもUserControl上では正しく取れないですね。
>SPY++ツールを使って取れたハンドルとプログラム上での戻り値
>を比較しても異なるんですよ。
と言われても、どこがいけないか判断するのに、再現出来る最低限のコードは必要かと。


K.J.K.  2006-03-23 22:04:06  No: 94718

とりあえず、タイプライブラリを作るなり探すなりして、
IOleWindowを使えるようにする、というのも手ですよ。

API関数で調べる場合は、Windowを列挙/調査するAPI関数で
どれが用途に合っているのかを調べてから使ってみるべき
でしょう。
 Windowの親子・階層関係が固定か不定か。
 該当するWindowは(特定の親Windowに対して)1つか複数か。
などの条件で、適切なものは変わってきますよね。
ちなみに、複数の場合でも、"ControlID"は異なるはずですし、
ControlIDとVB6のTabIndexの間には密接な関係があります。


ウィング  2006-03-24 06:53:47  No: 94719

ご回答ありがとうございます。

いろいろと試してみたのですが、
うまくいきませんでした・・。

実際何を作りたかったかといいますと、
ActiveXでWebBrowserを使ってUnicode対応のテキストボックスを
作成したかったのです。ToolTipTextをUnicodeで実装するために
ウィンドウハンドルがどうしても必要だったので・・。

うまくいかないので、VC++でUnicode対応のテキストボックス(OCX)を
作成することができましたので、この件は解決とさせていただきます。

いろいろと教えていただきましてありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加