STDMETHODIMP CDirect2DRM::CreateImageFromText(BSTR bstrText, DWORD nPointHeight, BOOL bShadowed, LPDIRECT2DRMIMAGE *ppImage) { MMASSERT(ppImage); if (m_pImageCache == NULL) return E_NOTINITIALIZED; HRESULT hr; LPD2DRMIMAGEPRIVATE pImagePriv = NULL; CMFImage *pmfi = NULL; CString strText(bstrText); IFont *pFont = NULL; HFONT hFont = NULL; CY size = {nPointHeight*10000, 0}; pFont = GetDefaultFont(); pFont->put_Size(size); pFont->get_hFont(&hFont); // get a reference to the MFImage from the image cache if (FAILED(hr = m_pImageCache->GetImageFromText(strText, hFont, 0x00FFFFFF, bShadowed, 0, NULL, &pmfi)) || // CoCreate the D2DRMImage object FAILED(hr = CoCreateInstance( CLSID_CDirect2DRMImage, NULL, CLSCTX_INPROC_SERVER, IID_ID2DRMImagePrivate, (LPVOID *) &pImagePriv)) || // initialize the D2DRMImage with the MFImage FAILED(hr = pImagePriv->InitFromMFImage(this, pmfi, 0))) goto e_CreateImageFromText; *ppImage = (LPDIRECT2DRMIMAGE) pImagePriv; // release the extra reference we had from the CreateImageFromText pmfi->Release(); return S_OK; e_CreateImageFromText: MMRELEASE(pImagePriv); MMRELEASE(pmfi); MMRELEASE(pFont); return hr; }
void CMyAxCtrl::OnFontChanged() { // Always set it to the container's font if (m_MyEdit.m_hWnd != NULL) { IFontDisp* pFontDisp = NULL; IFont *pFont = NULL; HRESULT hr; // Get the container's FontDisp interface pFontDisp = AmbientFont(); if (pFontDisp) { hr = pFontDisp->QueryInterface(IID_IFont, (LPVOID *) &pFont); if (FAILED(hr)) { pFontDisp->Release(); return; } } HFONT hFont = NULL; if (pFont) { pFont->get_hFont(&hFont); m_MyEdit.SendMessage(WM_SETFONT, (WPARAM)hFont, 0L); } pFontDisp->Release(); } // Invalidate the control m_MyEdit.Invalidate(); m_MyEdit.UpdateWindow(); COleControl::OnFontChanged(); }