CWndオブジェクト – プログラミング – Home

通知
すべてクリア

[解決済] CWndオブジェクト


ARC
 ARC
(@ARC)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

お世話になります。

VC++2005環境で

CWndのオブジェクトを持たないプロジェクト(スタティックライブラリ)で、
CWndオブジェクトを生成したいです。

目的はActive-Xコントロール生成時に指定する、
ウィンドウハンドルがないためです。

この場合、どのようにCWndハンドルを生成すればいいですか?


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

CWndはハンドルではありません。クラスです。
簡単に説明すると、ポップアップする場合はCFrameWnd
他のウインドウの子ウインドウの場合はCWndを「基本クラス」にして

1.「基本クラス」からpublicに派生クラスを作り、
2.AfxRegisterWndClass()でクラス登録し、ウインドウクラス名称を得ます。
3.「基本クラス」::Create()でウインドウを作成します。

です。


返信引用
ARC
 ARC
(@ARC)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

ご回答有難うございます。

他のウインドウの子ウインドウの場合ではなく、

ただ単純にCWndクラスを生成したいのですが、

可能でしょうか?


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

「ARCさんの目的はActiv-Xオブジェクトを持つウインドウが作成したい」
のだと、思っていたのです。この場合CWnd自体を使ってしまっては、
当該のオブジェクトを所有させることができません。が、勘違いでしたか。
1.を省略すればCWnd自体のウインドウを表示できますが、
それ以外は何もできない状態になります。これが、希望の機能なら、
そうしてみてください。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

うーーん、
 1.ウインドウなし、コンソール表示でActiv-Xオブジェクトを使いたい。
 2.とりあえず、DLL/LIB等でActiv-Xオブジェクトのパッケージを作りたい。
 3.サービスプログラムみたいなアプリで起動してもタスクバー上で、表示は
   何もしない。
どんな目的で使うのでしょうか?
僕は、Activ-Xオブジェクトはあまり知りませんが、存知の方でも目的がわからないと
説明のしようがないと思います。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

このレスは元々は
「ACTIVEXで呼び出しがうまくいかない(ダイアログベースでない場合)」
から派生したものだと思いますが、ユーザインターフェースを持たないActiveXって
単なるCOMではないのですか?(厳密には異なるのかも知れません)
だとすればCoCreateInstanceでオブジェクトを作成するのでは?


返信引用
ARC
 ARC
(@ARC)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

有難うございます。

>うーーん、
> 1.ウインドウなし、コンソール表示でActiv-Xオブジェクトを使いたい。
> 2.とりあえず、DLL/LIB等でActiv-Xオブジェクトのパッケージを作りたい。
> 3.サービスプログラムみたいなアプリで起動してもタスクバー上で、表示は
   何もしない。
>どんな目的で使うのでしょうか?

目的は2番に近い感じです。

>>だとすればCoCreateInstanceでオブジェクトを作成するのでは?

出来ればCoCreateInstance等で1から生成する方法だと可能だと思いますが、
コントロールをCreateした方法が簡単なので。
しかしパッケージプロジェクト自体がCWndクラスではないもので、
困っていたのです。
上位クラスからCWndハンドルを渡す事も可能ですが、
内部的な処理で終わらせれるならと思い考えています。。。


返信引用
maru
 maru
(@maru)
ゲスト
結合: 17年前
投稿: 358
 

何か手段が目的化しているようですが。

> この場合、どのようにCWndハンドルを生成すればいいですか?
CWndをどのように使用するかわからないのに、どのように生成するかを聞いても
意味がないと思いますよ。目的は、
> 目的はActive-Xコントロール生成時に指定する、
> ウィンドウハンドルがないためです。
とのことですが、Active-Xコントロールがそのクラスオブジェクトをどのように
使用するかを理解しないままクラスオブジェクトを生成して関数に渡してもその
関数は正しく動作しないでしょう。

そもそも、ActiveXコントロールラッパクラスはCWndの派生クラスとして生成される
ようなので、ウィンドウと関係しない環境で使用するようには考えられていないと
思われます。
つまりラッパクラスでインターフェースを使用しようとすることが間違いでしょう。
素直にCOMでプログラムしたらいかがですか。


返信引用
PATIO
(@patio)
Famed Member
結合: 3年前
投稿: 2660
 

Active-Xコントロールの生成時になぜウインドウハンドルが必要なのか
と言う部分を確認しないで単に生成しようとしている部分が
問題なような気がしますね。
必要無いのであれば、要求される事もないはずなので
Active-Xの動作上の理由で必要なのではないかとは考えられないでしょうか。

だとすれば、単にウインドウハンドルさえあれば良いと言う話には
ならない様に思います。
この辺はもう少し掘り下げて考えた方が良いと思います。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

> そもそも、ActiveXコントロールラッパクラスはCWndの派生クラスとして生成される
> ようなので、ウィンドウと関係しない環境で使用するようには考えられていないと
> 思われます。

> Active-Xコントロールの生成時になぜウインドウハンドルが必要なのか
> と言う部分を確認しないで単に生成しようとしている部分が
> 問題なような気がしますね。
うーーん
僕の示した選択肢が間違っていたみたいですみませんです。
ARCさんが、ある程度の目的を書かないため、ちょっといいかげんな選択肢を
示してしまいました。


返信引用
ARC
 ARC
(@ARC)
ゲスト
結合: 14年前
投稿: 8
Topic starter  

>ActiveXコントロールラッパクラスはCWndの派生クラスとして生成される
>ようなので、ウィンドウと関係しない環境で使用するようには考えられていないと
>思われます。
>素直にCOMでプログラムしたらいかがですか。

>必要無いのであれば、要求される事もないはずなので
>Active-Xの動作上の理由で必要なのではないかとは考えられないでしょうか。

はい、正直コメント頂いて同じく考えられます。

目的を達成するために、どんな手段を選んでもいいとはいえないですね。。(苦笑)

今回用いるコントロールを用いる背景として、
コントロールの仕様はCWnd派生クラス上での動作を推奨しています。
そのため、そのルールに沿った作り方、プロジェクト構築を考えることにします。

ありがとうございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました