From 16b0c553987e18e1c28d03ba79111b62981287b0 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 30 Aug 2009 20:42:46 +0000 Subject: [PATCH] Use correct font instead of DEFAULT_GUI_FONT. DEFAULT_GUI_FONT is a misnomer, not only is it not a default (and never was) but it shouldn't be used at all. Instead use lfMessageFont from the NONCLIENTMETRICS structure as it seems to correspond to the font used by the native controls under 2000, XP and Vista and respects Vista global DPI setting unlike DEFAULT_GUI_FONT. Closes #11008. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61790 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/msw/settings.cpp | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/src/msw/settings.cpp b/src/msw/settings.cpp index ea2e76c0c0..84a4ee3348 100644 --- a/src/msw/settings.cpp +++ b/src/msw/settings.cpp @@ -34,6 +34,7 @@ #include "wx/msw/private.h" #include "wx/msw/missing.h" // for SM_CXCURSOR, SM_CYCURSOR, SM_TABLETPC +#include "wx/msw/private/metrics.h" #ifndef SPI_GETFLATMENU #define SPI_GETFLATMENU 0x1022 @@ -230,13 +231,6 @@ wxFont wxCreateFontFromStockObject(int index) { wxNativeFontInfo info; info.lf = lf; -#ifndef __WXWINCE__ - // We want Windows 2000 or later to have new fonts even MS Shell Dlg - // is returned as default GUI font for compatibility - int verMaj; - if(index == DEFAULT_GUI_FONT && wxGetOsVersion(&verMaj) == wxOS_WINDOWS_NT && verMaj >= 5) - wxStrcpy(info.lf.lfFaceName, wxT("MS Shell Dlg 2")); -#endif // Under MicroWindows we pass the HFONT as well // because it's hard to convert HFONT -> LOGFONT -> HFONT // It's OK to delete stock objects, the delete will be ignored. @@ -276,21 +270,28 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index) #else // !__WXWINCE__ // wxWindow ctor calls GetFont(wxSYS_DEFAULT_GUI_FONT) so we're // called fairly often -- this is why we cache this particular font - const bool isDefaultRequested = index == wxSYS_DEFAULT_GUI_FONT; - if ( isDefaultRequested ) + if ( index == wxSYS_DEFAULT_GUI_FONT ) { - if ( gs_fontDefault ) - return *gs_fontDefault; + if ( !gs_fontDefault ) + { + // http://blogs.msdn.com/oldnewthing/archive/2005/07/07/436435.aspx + // explains why neither SYSTEM_FONT nor DEFAULT_GUI_FONT should be + // used here + // + // the message box font seems to be the one which should be used + // for most (simple) controls, e.g. buttons and such but other + // controls may prefer to use lfStatusFont or lfCaptionFont if it + // is more appropriate for them + wxNativeFontInfo info; + info.lf = wxMSWImpl::GetNonClientMetrics().lfMessageFont; + gs_fontDefault = new wxFont(info); + } + + return *gs_fontDefault; } wxFont font = wxCreateFontFromStockObject(index); - if ( isDefaultRequested ) - { - // if we got here it means we hadn't cached it yet - do now - gs_fontDefault = new wxFont(font); - } - wxASSERT(font.IsOk()); #if wxUSE_FONTENUM -- 2.45.2