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(); }
void C_DictionaryClient::LanguageChange() { C_STLException::install(); try { if (m_dic) { IFontDisp *fontdisp = NULL; m_dic->get_TranslationFont(&fontdisp); if (fontdisp) { IFont *font = NULL; fontdisp->QueryInterface(IID_IFont, reinterpret_cast<void**>(&font)); if (font) { BSTR bs = NULL; CY cy; BOOL bold = FALSE; BOOL italic = FALSE; short weight = FW_NORMAL; font->get_Name(&bs); font->get_Size(&cy); font->get_Bold(&bold); font->get_Italic(&italic); font->get_Weight(&weight); String name(bs); String::FreeBSTR(&bs); font->Release(); static C_NullDC null; static int ppi = GetDeviceCaps(null.GetHandle(), LOGPIXELSY); LOGFONT lf = { cy.Lo * ppi / 560000, 0, 0, 0, weight, italic, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY | ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DECORATIVE, _T("Arial") }; _stprintf(lf.lfFaceName, name.toLPCTSTR()); m_lFont = lf; } fontdisp->Release(); } } } catch (C_STLNonStackException const &exception) { exception.Log(_T("Exception in C_DictionaryClient::LanguageChange")); } }