0

どういうわけかWTLdestopアプリケーションをATLActiveX(つまり拡張機能)に埋め込む方法はありますか?

私が達成しようとしているのは、Officeファイルビューアを使用してActiveXコントロールを作成することです。ベースとして、OOo v3 APIを使用してドキュメントを表示するデスクトップWTLアプリケーション(少し前に作成)があります。

  • ActiveXプロジェクトを作成し、必要なライブラリとインクルードをリンクしました。
  • WTLメソッドとOOApiメソッドを呼び出すことができます。
  • ホストアプリケーションの要件を満たすために、いくつかのプロパティとメソッドが追加されました。
  • 私のActiveXはieとホストアプリケーションで正しく表示されます

そして、ここで私の運(そして知識?)は終わりました。

私のコントロールにはm_hwndプロパティがありますが、常に0に設定されています。私は少しグーグルして、私が親hwndを得ることができることを発見しました

this->m_spInPlaceSite->GetWindow()

しかし、それも機能していません。ウィンドウランタイムを作成するたびに、Parent == nullのIsWindow()メソッド(ATL lib内から呼び出される)で終了します

OOo :: DocWindowを作成して表示するには、親ウィンドウのHWNDが必要です。

そしてここに質問があります:

どういうわけか、ActiveX、つまり拡張機能にWTLウィンドウベースのアプリケーションを埋め込むことはできますか?
OOo Apiラッパー全体を書き直さなくても可能ですか?

4

1 に答える 1

1

はい、できます。

VSウィザードの手順:

  1. ATLプロジェクトを作成する
  2. いくつかのコントロール(ボタンなど)に基づいて、ATLコントロールを追加します。この場合、いくつかのハンドラーを含むメッセージマップがあります。

次に、CContainedWindowメンバーを独自のウィンドウに置き換えます。これですべてです。

ATLサンプルページ、私はそれをチェックしませんでしたが、それが役立つことを願っています。

于 2010-04-07T11:31:32.607 に答える