MFCを使用したOLEサーバーについて – プログラミング – Home

MFCを使用したOLEサーバーについて
 
通知
すべてクリア

MFCを使用したOLEサーバーについて


Toshi
 Toshi
(@Toshi)
ゲスト
結合: 24年前
投稿: 7
Topic starter  

お世話になります。

Windows7, Visual Studio 2010 Pro, MFC

MFCを使用したOLEサーバーのソフトを開発しているのですが、
クライアント側に提供するプレゼンテーション用のデータについて、分からないことが
あります。

元々は、アプリ内部では拡張メタファイル形式でプレゼンデータを作成しているのです
が、MFCが標準メタファイル形式をデフォルトにしているので、GetWinMetaFileBits()
というAPIを使用して、標準メタファイル形式に変換しています。
その影響だと思うのですが、Unicode領域の文字や記号を含むオブジェクトをクライアン
トに貼り付けると、
文字化けを起こしてしまいます。この文字化けを解消したい、というのが本来の目的で
す。

MFCのCOleServerItemクラスでは、プレゼン用のデータ形式のデフォルトは標準メタファ
イル形式になっています。これを拡張メタファイル形式に変更できないか、いろいろと
調べているのですが、よく分かりません。

BOOL COleServerItem::OnRenderData(LPFORMATETC lpFormatEtc, LPSTGMEDIUM
lpStgMedium)
{
(中略)

// default implementation supports both types of metafiles
if (lpFormatEtc->cfFormat == CF_METAFILEPICT)
return GetMetafileData(lpFormatEtc, lpStgMedium);

return FALSE; // cfFormat not supported
}

MFCの中にこのような関数があり、ここで標準メタファイルのデータを作成しているので
すが、
この関数の中に以下のようなコードを追加してみました。

if (lpFormatEtc->cfFormat == CF_ENHMETAFILE) {
lpFormatEtc->cfFormat = CF_ENHMETAFILE;
lpFormatEtc->tymed = TYMED_ENHMF;

return GetEnhMetafileData(lpFormatEtc, lpStgMedium);
}

GetEnhMetafileData()は自作の関数です。
でも、このif文の中には飛び込みません。

これは想像なのですが、サーバーが提供できるプレセンデータのフォーマットを
どこかに指定(あるいは登録)してやる必要があるような気がします。

COleServerItem::AddOtherClipboardData()の中で、サーバーがサポートしている
フォーマットを列挙してループしているような箇所があるのですが、
どのようにして拡張メタファイルをサポートしていることを通知すればいいのか分かり
ません。

もし、ご存じの方がいましたら、アドバイスをお願い致します。


引用解決済
トピックタグ
ロマ
 ロマ
(@ロマ)
ゲスト
結合: 18年前
投稿: 170
 

OnRenderDataって、遅延レンダリング用だと思います。
(遅延レンダリングとは、クリップボードにデータを置かず、
ペースト時にサーバーを呼び出すやり方です)

さて、生のOLEだと、
IDataObject::EnumFormatEtc
IDataObject::GetData
ですが、
MFCだとどのようになっているのか、私にはわかりません。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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