CやVB6の経験は長いが、C++については、初心者です。
WordにOLE埋め込みするOLEサーバコンポーネントをC++で作ってます。
(Wordがコンテナです)
RECT上にBitbltで、Gif画像を描いていて、それは、ちゃんと表示されているのですが、
いざ、Wordに埋め込むために、更新メニュークリック時のMsgループ内で
if (m_bEmbedding && m_pDataAdviseHolder != NULL){
m_pDataAdviseHolder->SendOnDataChange(static_cast<IDataObject *>(this), 0, DVASPECT_CONTENT);
}
m_bDirty = TRUE;
とやってるのですが、RECTの枠しかWord上に表示されません。
どのメソッドを調べればいいのか、お教え下さい。
一応、GetData にブレークポイントを入れているのですが、引っかかりません。
ただ、RECTの枠だけは、Word上に出てはいます。
尚、プログラムの大枠は、EternalWindowsさんの
http://eternalwindows.jp/ole/oleembedded/oleembe …
を使わさせて頂いております。
それから、RECT上にBitbltで、Gif画像を描くのは、以下のようにしています。
void CObject::DrawShape(HDC hdc)
{
inti;
RECTrc;
longPictureWidth;
longPictureHeight;
i = 0;
rc = m_shape[i].rc;
Rectangle(hdc, rc.left, rc.top, rc.right, rc.bottom);
if (m_vbHDC != NULL){
PictureWidth = rc.right - rc.left;
PictureHeight = rc.bottom - rc.top;
BitBlt(hdc, 0,0, PictureWidth, PictureHeight, m_vbHDC, 0,0, SRCCOPY);
}
それと、メタファイルの作成は、、、
x=0; y=0;
GetSize(&nWidth, &nHeight);
SetRect(&rc, x, y, x + nWidth, y + nHeight);
hdc = CreateEnhMetaFile(m_vbHDC, NULL, &rc, "AAA");
SetMapMode(hdc, MM_ANISOTROPIC);
SetWindowOrgEx(hdc, 0, 0, NULL);
SetWindowExtEx(hdc, nWidth, nHeight, NULL);
DrawShape(hdc);
hmf = CloseEnhMetaFile(hdc);
sizel.cx = nWidth;
sizel.cy = nHeight;
DPtoHIMETRIC(&sizel);
hglobal = GlobalAlloc(GPTR, sizeof(METAFILEPICT));
lpmf = (LPMETAFILEPICT)GlobalLock(hglobal);
lpmf->hMF = (HMETAFILE)hmf;
lpmf->mm = MM_ANISOTROPIC;
lpmf->xExt = sizel.cx;
lpmf->yExt = sizel.cy;
GlobalUnlock(hglobal);
//if (bEnhance) {
DWORD dwSize;
LPBYTE lpData;
HGLOBAL hglobalOld = hglobal;
dwSize = GetMetaFileBitsEx(lpmf->hMF, 0, NULL);
lpData = (LPBYTE)GlobalAlloc(GPTR, dwSize);
GetMetaFileBitsEx(lpmf->hMF, dwSize, lpData);
hglobal = (HGLOBAL)SetWinMetaFileBits(dwSize, lpData, NULL, lpmf);
GlobalFree(lpData);
GlobalFree(hglobalOld);
//}
return hglobal;
です。
忌憚のないご指摘をお願いします。
No.1ベストアンサー
- 回答日時:
>一応、GetData にブレークポイントを入れているのですが、引っかかりません。
についてだけ、ちょっとコメントを・・・。
Word 上でオブジェクトの挿入(新規作成)を行うと、OLE サーバが起動すると思うのですが、
この、Word から呼ばれて起動したプロセスは、デバッガ ( Visual Studio ? ) で起動しているプロセスとは別のプロセスとして起動しているので、ブレークポイントに引っかからないのだと思います。
Visual Studio なら、メニューの「ツール(T)」→「プロセスにアタッチ(P)」というのがあると思いますので、これで、Word から起動されたプロセスを選択すれば、デバッガでトレースできるようになるのではないかと思います。(他のデバッガについてはわかりません。あしからず。)
もしかすると、リリースビルドではなくデバッグビルドの *.exe が起動するようにレジストリの登録をしておかなければならないかも、です。
ありがとうございました。
おかげで、ほとんど、できあがりました。感謝です。
原因は、見ての通り、EnhMetaFile APIと普通のMetaFile APIの混在、
GetDataの描画に、BitBltでなくPlayEnhMetaFile() を使ったため
BitBlt時、転送元DCが無効になるケースがあったため
でした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 「1004:アプリケーション定義またはオブジェクト定義のエラー」への解消方法に関して 1 2023/07/09 11:47
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- 工学 制御工学の問題について 2 2022/10/30 20:20
- 建設業・製造業 自分 大工してます。 木造造作 RC造作 鉄骨造作 リフォーム出来ます…が。 木造だけやる大工さん 1 2022/08/21 09:20
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- 数学 数学の質問です。 △ABCにおいて, ∠Aの二等分線が BC と交わる点をRとする。 辺BC, CA 2 2023/07/13 23:58
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- 飛行機・空港 ミルウォーキーツールHDC大阪から伊丹空港へ乗り換え無しで行く方法はありますか? できれば、空港直通 2 2023/05/12 06:44
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLへのDB::connectで、faile...
-
バッチファイルで多重起動を防ぐ
-
バッチスクリプト処理でエラー...
-
VBでExcelが起動されているか知...
-
VB6 二重起動確実防止について
-
aptでインストールしたプログラ...
-
cygwinでno such file or direc...
-
safariのアンインストール方法...
-
ソフトのインストール場所って...
-
【Mac/Xcode】カレントディレク...
-
フロッピーディスクの読み込み方法
-
windows 10 mobile
-
クリップボードの内容をEXCELに...
-
Access VBA レポートの日付範囲...
-
OS インストール場所確認
-
scriptコマンドで出力したログ...
-
VBAのRegExpで後方一致/不一致...
-
VBAで画像ファイルをダウンロー...
-
exeファイルの実行結果をテキス...
-
linuxのsshの反応が非常に遅い。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチスクリプト処理でエラー...
-
バッチファイルで多重起動を防ぐ
-
VBでExcelが起動されているか知...
-
Linux環境変数設定(putenv?se...
-
コンソールアプリの起動結果待...
-
「応答なし」の状態を監視する方法
-
_access関数が EACCES エラーと...
-
Open Office Org 急に起動しな...
-
VBを用いてログオフから自動で...
-
ASP.NET 2.0(VB)からEXCELオブ...
-
起動したIEのウインドウタイ...
-
OLEサーバコンポーネントを作っ...
-
CreateProcessでコンソールアプ...
-
MySQLへのDB::connectで、faile...
-
RTOS(TOPPERS)プログラムで、動...
-
プリンタの状態を知る方法
-
VB6 二重起動確実防止について
-
svchostのせい?でネットに繋が...
-
CGIでinit.dで起動したプロセス...
-
デーモンプロセスの起動について
おすすめ情報