お世話になります。
VC++2005環境で
CWndのオブジェクトを持たないプロジェクト(スタティックライブラリ)で、
CWndオブジェクトを生成したいです。
目的はActive-Xコントロール生成時に指定する、
ウィンドウハンドルがないためです。
この場合、どのようにCWndハンドルを生成すればいいですか?
CWndはハンドルではありません。クラスです。
簡単に説明すると、ポップアップする場合はCFrameWnd
他のウインドウの子ウインドウの場合はCWndを「基本クラス」にして
1.「基本クラス」からpublicに派生クラスを作り、
2.AfxRegisterWndClass()でクラス登録し、ウインドウクラス名称を得ます。
3.「基本クラス」::Create()でウインドウを作成します。
です。
ご回答有難うございます。
他のウインドウの子ウインドウの場合ではなく、
ただ単純にCWndクラスを生成したいのですが、
可能でしょうか?
「ARCさんの目的はActiv-Xオブジェクトを持つウインドウが作成したい」
のだと、思っていたのです。この場合CWnd自体を使ってしまっては、
当該のオブジェクトを所有させることができません。が、勘違いでしたか。
1.を省略すればCWnd自体のウインドウを表示できますが、
それ以外は何もできない状態になります。これが、希望の機能なら、
そうしてみてください。
うーーん、
1.ウインドウなし、コンソール表示でActiv-Xオブジェクトを使いたい。
2.とりあえず、DLL/LIB等でActiv-Xオブジェクトのパッケージを作りたい。
3.サービスプログラムみたいなアプリで起動してもタスクバー上で、表示は
何もしない。
どんな目的で使うのでしょうか?
僕は、Activ-Xオブジェクトはあまり知りませんが、存知の方でも目的がわからないと
説明のしようがないと思います。
このレスは元々は
「ACTIVEXで呼び出しがうまくいかない(ダイアログベースでない場合)」
から派生したものだと思いますが、ユーザインターフェースを持たないActiveXって
単なるCOMではないのですか?(厳密には異なるのかも知れません)
だとすればCoCreateInstanceでオブジェクトを作成するのでは?
有難うございます。
>うーーん、
> 1.ウインドウなし、コンソール表示でActiv-Xオブジェクトを使いたい。
> 2.とりあえず、DLL/LIB等でActiv-Xオブジェクトのパッケージを作りたい。
> 3.サービスプログラムみたいなアプリで起動してもタスクバー上で、表示は
何もしない。
>どんな目的で使うのでしょうか?
目的は2番に近い感じです。
>>だとすればCoCreateInstanceでオブジェクトを作成するのでは?
出来ればCoCreateInstance等で1から生成する方法だと可能だと思いますが、
コントロールをCreateした方法が簡単なので。
しかしパッケージプロジェクト自体がCWndクラスではないもので、
困っていたのです。
上位クラスからCWndハンドルを渡す事も可能ですが、
内部的な処理で終わらせれるならと思い考えています。。。
何か手段が目的化しているようですが。
> この場合、どのようにCWndハンドルを生成すればいいですか?
CWndをどのように使用するかわからないのに、どのように生成するかを聞いても
意味がないと思いますよ。目的は、
> 目的はActive-Xコントロール生成時に指定する、
> ウィンドウハンドルがないためです。
とのことですが、Active-Xコントロールがそのクラスオブジェクトをどのように
使用するかを理解しないままクラスオブジェクトを生成して関数に渡してもその
関数は正しく動作しないでしょう。
そもそも、ActiveXコントロールラッパクラスはCWndの派生クラスとして生成される
ようなので、ウィンドウと関係しない環境で使用するようには考えられていないと
思われます。
つまりラッパクラスでインターフェースを使用しようとすることが間違いでしょう。
素直にCOMでプログラムしたらいかがですか。
Active-Xコントロールの生成時になぜウインドウハンドルが必要なのか
と言う部分を確認しないで単に生成しようとしている部分が
問題なような気がしますね。
必要無いのであれば、要求される事もないはずなので
Active-Xの動作上の理由で必要なのではないかとは考えられないでしょうか。
だとすれば、単にウインドウハンドルさえあれば良いと言う話には
ならない様に思います。
この辺はもう少し掘り下げて考えた方が良いと思います。
> そもそも、ActiveXコントロールラッパクラスはCWndの派生クラスとして生成される
> ようなので、ウィンドウと関係しない環境で使用するようには考えられていないと
> 思われます。
> Active-Xコントロールの生成時になぜウインドウハンドルが必要なのか
> と言う部分を確認しないで単に生成しようとしている部分が
> 問題なような気がしますね。
うーーん
僕の示した選択肢が間違っていたみたいですみませんです。
ARCさんが、ある程度の目的を書かないため、ちょっといいかげんな選択肢を
示してしまいました。
>ActiveXコントロールラッパクラスはCWndの派生クラスとして生成される
>ようなので、ウィンドウと関係しない環境で使用するようには考えられていないと
>思われます。
>素直にCOMでプログラムしたらいかがですか。
>必要無いのであれば、要求される事もないはずなので
>Active-Xの動作上の理由で必要なのではないかとは考えられないでしょうか。
はい、正直コメント頂いて同じく考えられます。
目的を達成するために、どんな手段を選んでもいいとはいえないですね。。(苦笑)
今回用いるコントロールを用いる背景として、
コントロールの仕様はCWnd派生クラス上での動作を推奨しています。
そのため、そのルールに沿った作り方、プロジェクト構築を考えることにします。
ありがとうございます。