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
#include "wx/msw/private.h"
#include "wx/msw/missing.h" // for SM_CXCURSOR, SM_CYCURSOR, SM_TABLETPC
#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
#ifndef SPI_GETFLATMENU
#define SPI_GETFLATMENU 0x1022
{
wxNativeFontInfo info;
info.lf = lf;
{
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.
// 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.
#else // !__WXWINCE__
// wxWindow ctor calls GetFont(wxSYS_DEFAULT_GUI_FONT) so we're
// called fairly often -- this is why we cache this particular font
#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);
}
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
wxASSERT(font.IsOk());
#if wxUSE_FONTENUM