OLEサーバコンポーネントを作ってますが、、、
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/oleembedded10.html
を使わさせて頂いております。
それから、RECT上にBitbltで、Gif画像を描くのは、以下のようにしています。
void CObject::DrawShape(HDC hdc)
{
int i;
RECT rc;
long PictureWidth;
long PictureHeight;
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;
です。
忌憚のないご指摘をお願いします。