RichEditにオブジェクトを挿入するアイコンのカスタマイズ

1518 ワード

誰かが欲しがっているので再送します.原文はblogcnに載っています.blogcnは有料になってから削除しました.Googleのブログにはバックアップがありますが、国内では検索できないようです.

3/04/2004


RichEditにオブジェクトを挿入するアイコンのカスタマイズ


方法は基本的にKnowledge Base文章Q 220844 HOWTO:Insert a Bitmap Into an RTF Document Using the RichEdit Controlと同じで、最後に挿入する前にIOleCache::SetDataを呼び出して、1つのHGLOBALをパラメータとして、HGLOBALの中のデータは1つのMETAFILEPICT構造で、自分で提供したピクチャーを含む
ASSERT_VALID(this);
ASSERT(m_lpObject != NULL);

// get IOleCache interface
LPOLECACHE lpOleCache = QUERYINTERFACE(m_lpObject, IOleCache);
if (lpOleCache == NULL)
{
TRACE0("Warning: object does not support IOleCache interface.
"); return FALSE; } ASSERT(lpOleCache != NULL); // new cache is for CF_METAFILEPICT, DVASPECT_ICON FORMATETC formatEtc; formatEtc.cfFormat = CF_METAFILEPICT; formatEtc.ptd = NULL; formatEtc.dwAspect = DVASPECT_ICON; formatEtc.lindex = -1; formatEtc.tymed = TYMED_MFPICT; // setup the cache so iconic aspect is now included DWORD dwConnection; SCODE sc = lpOleCache->Cache(&formatEtc, ADVF_NODATA|ADVF_PRIMEFIRST|ADVF_ONLYONCE, &dwConnection); if (FAILED(sc)) { lpOleCache->Release(); return FALSE; } // set data if iconic image provided if (hMetaPict != NULL) { STGMEDIUM stgMedium; stgMedium.tymed = TYMED_MFPICT; stgMedium.hGlobal = hMetaPict; stgMedium.pUnkForRelease = NULL; sc = lpOleCache->SetData(&formatEtc, &stgMedium, FALSE); if (FAILED(sc)) { lpOleCache->Release(); return FALSE; } } lpOleCache->Release(); return TRUE;