-PR-
解決済み

ウィンドウのないActiveXコントロールへのメッセージ通知方法

  • すぐに回答を!
  • 質問No.56588
  • 閲覧数1335
  • ありがとう数3
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 100% (1/1)

 内部的にWinsock2を使用して別のサーバアプリケーションと通信を行うActiveXコントロールを作成しています。サーバからのデータ受信を非同期で行うため、WSAAsyncSelect()関数を使用して指定したウィンドウにWinsockからイベントメッセージ(メッセージIDはWM_USER+1を使用)を通知させます。
コントロールをウィンドウなしのアクティベーション使用で開発しているので、WSAAsyncSelect()のメッセージ通知対象ウィンドウがコントロール内にありません。
コンテナによりコントロール充てにメッセージを送ってくれるということなので、コンテナのウィンドウハンドルを取得し、WSAAsyncSelect()のメッセージ通知対象ウィンドウに設定しました。が、コントロールのOnMessageWindowless()にWM_USER+1のイベントは来ていないようです。
私が試したウィンドウハンドルは、次のコードで取得できるものです。
1. AfxGetMainWnd()->m_hWnd
2. CWnd::GetActiveWindow()->m_hWnd (CWndは使用するなとありましたが)

 取得するウィンドウハンドルが間違っているのでしょうか?それとも、コンテナアプリケーションはWM_USERメッセージをコントロールに送ることができないのでしょうか?もしくは、コンテナにWM_USER+1のメッセージはコントロールへ、という設定をしてやる必要があるのでしょうか?

 なお、なぜウィンドウありのコントロールにしないかと申しますと、ウィンドウありだとコンテナ(IEを想定)に乗った直後にウィンドウが生成されず、自分のウィンドウハンドルを取得しようとするとNULLが返ってしまうからです。ユーザがマウスで一度クリックすればOKなのですが・・・オブジェクト生成時に自動的にウィンドウを生成する方法がわかりませんでした。もしこちらが分かればウィンドウありで行くこともできますので、分かる方いらっしゃいましたらお願いいたします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1

一応通知方法はあります。

ウィンドウハンドルの取得も
1.AfxGetMainWnd()->m_hWnd
2.CWnd::GetActiveWnd()->m_hWnd
ということをしなくても、ウィンドウあり
(ディフォルト)であれば、使用する前に
ひとつ関数(コンストラクタはダメ)を
呼んでやれば、きちんとm_hWndがNULL以外の
値になるはずです。
#私はいつもこの方法でウィンドウハンドルを
#取得しています。コンストラクタでは、
#どうやってもNULLになります。

ただし、この方法だと、どうしてもOCXを
使う側が一度呼び出さなければならないため、
Initialize処理としての関数呼び出しが必要に
なりますので、若干不便でしょう。

後は、不可視にしておいて、上から確実に
呼んでもらえるようにしておけば、大丈夫なはず。

どういった風にActiveXを使いたいのか
分かりませんが、一応通知することは可能
だということは分かってください。

ではでは☆
お礼コメント
ratsukichi

お礼率 100% (1/1)

早速のご回答、どうもありがとうございました。
やっぱり、Windowありのコントロールにするのが無難ですかね。
ということで、おっしゃるようにやってみました。最初はやっぱりアクティブ
にならなかったのですが、試行錯誤してみると、どうやらOLEMISC__INVISIBLEATRUNTIMEフラグを立てていたからのようです。
これをはずして、OLEMISC_ACTIVATEWHENVISIBLEを立てたらいけました!
ActiveXって難しいですね~。
どうもお世話になりました。
投稿日時 - 2001-03-27 14:36:15
-PR-
-PR-
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ