- default:
- wxFAIL_MSG(wxT("unknown font slant"));
- // fall through
-
- case wxNORMAL:
- ff_italic = 0;
- }
-
- int ff_weight = 0;
- switch ( M_FONTDATA->m_weight )
- {
- default:
- wxFAIL_MSG(wxT("unknown font weight"));
- // fall through
-
- case wxNORMAL:
- ff_weight = FW_NORMAL;
- break;
-
- case wxLIGHT:
- ff_weight = FW_LIGHT;
- break;
-
- case wxBOLD:
- ff_weight = FW_BOLD;
- break;
- }
-
- const wxChar* pzFace;
- if ( M_FONTDATA->m_faceName.IsEmpty() )
- pzFace = ff_face;
- else
- pzFace = M_FONTDATA->m_faceName ;
-
-#if 0
- /* Always calculate fonts using the screen DC (is this the best strategy?)
- * There may be confusion if a font is selected into a printer
- * DC (say), because the height will be calculated very differently.
- */
- // What sort of display is it?
- int technology = ::GetDeviceCaps(dc, TECHNOLOGY);
-
- int nHeight;
-
- if (technology != DT_RASDISPLAY && technology != DT_RASPRINTER)
- {
- // Have to get screen DC Caps, because a metafile will return 0.
- HDC dc2 = ::GetDC(NULL);
- nHeight = M_FONTDATA->m_pointSize*GetDeviceCaps(dc2, LOGPIXELSY)/72;
- ::ReleaseDC(NULL, dc2);
- }
- else
- {
- nHeight = M_FONTDATA->m_pointSize*GetDeviceCaps(dc, LOGPIXELSY)/72;
- }
-#endif // 0
-
-#if 0
- // Have to get screen DC Caps, because a metafile will return 0.
- HDC dc2 = ::GetDC(NULL);
- ppInch = ::GetDeviceCaps(dc2, LOGPIXELSY);
- ::ReleaseDC(NULL, dc2);
-#endif // 0
-
- // New behaviour: apparently ppInch varies according to Large/Small Fonts
- // setting in Windows. This messes up fonts. So, set ppInch to a constant
- // 96 dpi.
- static const int ppInch = 96;
-
-#if wxFONT_SIZE_COMPATIBILITY
- // Incorrect, but compatible with old wxWindows behaviour
- int nHeight = (M_FONTDATA->m_pointSize*ppInch/72);
-#else
- // Correct for Windows compatibility
- int nHeight = - (M_FONTDATA->m_pointSize*ppInch/72);
-#endif
-
- BYTE ff_underline = M_FONTDATA->m_underlined;
-
- wxFontEncoding encoding = M_FONTDATA->m_encoding;
- if ( encoding == wxFONTENCODING_DEFAULT )
- {
- encoding = wxFont::GetDefaultEncoding();
- }
-
- DWORD charset;
- switch ( encoding )
- {
- case wxFONTENCODING_ISO8859_1:
- case wxFONTENCODING_ISO8859_15:
- case wxFONTENCODING_CP1250:
- charset = ANSI_CHARSET;
- break;
-#if !defined(__WIN16__)
- case wxFONTENCODING_ISO8859_2:
- case wxFONTENCODING_CP1252:
- charset = EASTEUROPE_CHARSET;
- break;
-
- case wxFONTENCODING_ISO8859_4:
- case wxFONTENCODING_ISO8859_10:
- charset = BALTIC_CHARSET;
- break;
-
- case wxFONTENCODING_ISO8859_5:
- case wxFONTENCODING_CP1251:
- charset = RUSSIAN_CHARSET;
- break;
-
- case wxFONTENCODING_ISO8859_6:
- charset = ARABIC_CHARSET;
- break;
-
- case wxFONTENCODING_ISO8859_7:
- charset = GREEK_CHARSET;
- break;
-
- case wxFONTENCODING_ISO8859_8:
- charset = HEBREW_CHARSET;
- break;
-
- case wxFONTENCODING_ISO8859_9:
- charset = TURKISH_CHARSET;
- break;
-
- case wxFONTENCODING_ISO8859_11:
- charset = THAI_CHARSET;
- break;
-#endif // BC++ 16-bit
-
- case wxFONTENCODING_CP437:
- charset = OEM_CHARSET;
- break;
-
- default:
- wxFAIL_MSG(wxT("unsupported encoding"));
- // fall through
-
- case wxFONTENCODING_SYSTEM:
- charset = ANSI_CHARSET;
- }
-
- HFONT hFont = ::CreateFont
- (
- nHeight, // height
- 0, // width (choose best)
- 0, // escapement
- 0, // orientation
- ff_weight, // weight
- ff_italic, // italic?
- ff_underline, // underlined?
- 0, // strikeout?
- charset, // charset
- OUT_DEFAULT_PRECIS, // precision
- CLIP_DEFAULT_PRECIS, // clip precision
- PROOF_QUALITY, // quality of match
- DEFAULT_PITCH | // fixed or variable
- ff_family, // family id
- pzFace // face name
- );
-
- M_FONTDATA->m_hFont = (WXHFONT)hFont;
- if ( !hFont )
- {
- wxLogLastError("CreateFont");