RichEditにオブジェクトを挿入するアイコンのカスタマイズ
誰かが欲しがっているので再送します.原文はblogcnに載っています.blogcnは有料になってから削除しました.Googleのブログにはバックアップがありますが、国内では検索できないようです.
方法は基本的にKnowledge Base文章Q 220844 HOWTO:Insert a Bitmap Into an RTF Document Using the RichEdit Controlと同じで、最後に挿入する前にIOleCache::SetDataを呼び出して、1つのHGLOBALをパラメータとして、HGLOBALの中のデータは1つのMETAFILEPICT構造で、自分で提供したピクチャーを含む
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;