MFC ActiveX コントロールのOLEコンテナ処理 – プログラミング – Home

MFC ActiveX コントロールの...
 
通知
すべてクリア

[解決済] MFC ActiveX コントロールのOLEコンテナ処理


おかわり
 おかわり
(@おかわり)
ゲスト
結合: 18年前
投稿: 9
Topic starter  

開発環境はXP VC++2005 MFC SDIです。

タイトルが妥当か判断できず、また、上手に説明することが出来ないのですが、
下記の処理を行いたいと思ってます。

①ACTIVEXコントロールを選択して、ダイアログ実行中に貼り付け処理を行う。

上記の処理OLEコンテナの処理で行うことは出来ますでしょうか?
なにぶん、情報が乏しく、可能かどうかもわからず、途方に暮れております。

以前書き込みがありました。『VCのようなオブジェクトの貼り付け処理について』
に近いと思うのですが、登録されているACTICEXを使用して行う必要があります。

拙い文章で申し訳ありませんが、何かヒントとなるようなものをご教授
いただけないでしょうか。宜しくお願い致します。


引用未解決
トピックタグ
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

要はActiveXコントロールをダイアログ上に動的に作成する
ということですか?

そうであれば、CWnd::CreateControl()を使用すれば可能かと。

> 上記の処理OLEコンテナの処理で行うことは出来ますでしょうか?

↑ここが意味不明。


返信引用
おかわり
 おかわり
(@おかわり)
ゲスト
結合: 18年前
投稿: 9
Topic starter  

お返事ありがとうございます。
既存のプログラムの改造を行っているのですが、
なかなかソースを追いきれないのと、そもそものやり方を理解していないところに
問題があるのですが・・・・・

少し異なっておりまして、

class CXXXXXItem : public COleClientItem

備考:(1)新規のコントロールの挿入 →pItem = new CXXXXXItem( this );
:(2)コントロール情報の読込 →pItem->CreateOrLoad( clsid,
                             pszName,
                   iidPersistanceMedium,
pPersistanceMedium )

COleClientItemで管理されているクラスにオブジェクトの出し入れをして管理している
ようなのですが、既存のソースが追いきれないため、内容を理解したほうが早いと思っ
て、調べているのですが、一向にわからず、ヒントだけでも得たいと思っているのです
が・・・・


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

未だ質問の主旨が理解できない…

> 備考:(1)新規のコントロールの挿入 →pItem = new CXXXXXItem(this);
> :(2)コントロール情報の読込 →pItem->CreateOrLoad(clsid,
> pszName,
> iidPersistanceMedium,
> pPersistanceMedium)

これがすでに実現できているのであれば、いったい何が問題なのでしょうか?
・ActiveXコントロールを選択(どんな風に?)する方法
・COleClientItemを利用してActiveXコントロールを貼り付ける(どこに?)方法
・ActiveXコントロールの貼り付けには成功しているが問題(どんな?)が発生している


返信引用
おかわり
 おかわり
(@おかわり)
ゲスト
結合: 18年前
投稿: 9
Topic starter  

すみません。まったく方法がわかっていない状況です。
ActiveXコントロールテストコンテナのような処理を行いたいのです


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

> ActiveXコントロールテストコンテナのような処理を行いたいのです

であれば、MSDNのMFCサンプルTSTCON(ActiveX コントロール テスト コンテナ)が
そのまんま参考になると思われます。
COleClientItemクラスを利用してActiveXコントロールをホストしています。


返信引用
おかわり
 おかわり
(@おかわり)
ゲスト
結合: 18年前
投稿: 9
Topic starter  

View上にアクティブXを表示することはできました。
ありがとうございます。

CCOleTest3CntrItem* pItem = NULL; //OLEアイテムのインスタンス
CCOleTest3Doc* pDoc = GetDocument(); //
pItem = new CCOleTest3CntrItem(pDoc); //OLEアイテム動的生成
pItem->CreateItem(); //OLEアイテムの新規作成
pItem->DoVerb(OLEIVERB_SHOW, this);
m_pSelection = pItem;

上記処理で、アクティブXは表示されるのですが、
表示された直後は、アクティブXの動作として実行可能状態なのですが、
一旦フォーカスを離れると移動やリサイズの編集可能状態にはなれど、
アクティブXの動作として実行させることができません。
※表示直後は、チェックボックスにチェック可能であるが、一旦フォーカスを
離れるとチェックできなくなります。

アクティブXの動作状態を切り替えるようなコマンドはあるのでしょうか?
申し訳ありませんが、ご教授ください。


返信引用
おかわり
 おかわり
(@おかわり)
ゲスト
結合: 18年前
投稿: 9
Topic starter  

一旦フォーカスが離れた場合でも
pItem->DoVerb(OLEIVERB_SHOW, this);
を行うことによって、アクティブ化されるようなのですが、
表示位置が、毎回、左上に再描画されてしまいます。
これを修正する方法はないでしょうか?


返信引用
Kerry
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

こちらが現象を再現できるような状態ではないので、提示された情報
だけでは残念ながら原因は掴めません。

サンプルコードは正しく動いているのですから、そのコードと見比べるなり
デバッグを行うなどしてもう少し原因を絞り込むべきかと思われます。


返信引用
おかわり
 おかわり
(@おかわり)
ゲスト
結合: 18年前
投稿: 9
Topic starter  

本件の疑問は、クラスのメンバのm_rectをコンストラクションで初期化し
OnGetItemPositionにて、
未設定時は、カーソル位置でアイテムを作成
設定隅時は、m_rectの座標にて作成でうまくいきました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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