X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/fb582e40cc84cc8b6560c6d6e19b2e90af17e1fd..dd9f8b6bb6935360a8271dc3e8749fb026b601a8:/src/msw/ownerdrw.cpp?ds=sidebyside diff --git a/src/msw/ownerdrw.cpp b/src/msw/ownerdrw.cpp index bb11e87a2c..b41cb1734a 100644 --- a/src/msw/ownerdrw.cpp +++ b/src/msw/ownerdrw.cpp @@ -35,6 +35,7 @@ #include "wx/fontutil.h" #include "wx/msw/private.h" +#include "wx/msw/dc.h" #ifndef SPI_GETKEYBOARDCUES #define SPI_GETKEYBOARDCUES 0x100A @@ -86,14 +87,36 @@ public: } private: - static void DoInitMetrics() + static NONCLIENTMETRICS GetNCM() { WinStruct nm; - ::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &nm, 0); + if ( !::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &nm, 0) ) + { +#if WINVER >= 0x0600 + // a new field has been added to NONCLIENTMETRICS under Vista, so + // the call to SystemParametersInfo() fails if we use the struct + // size incorporating this new value on an older system -- retry + // without it + nm.cbSize -= sizeof(int); + if ( !::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &nm, 0) ) +#endif // WINVER >= 0x0600 + { + // maybe we should initialize the struct with some defaults? + wxLogLastError(_T("SystemParametersInfo(SPI_GETNONCLIENTMETRICS)")); + } + } + + return nm; + } + static void DoInitMetrics() + { // iMenuHeight is the menu bar height and the menu items are less tall, // although I don't know by how much -- below is the value for my system - ms_systemMenuHeight = nm.iMenuHeight - 4; + ms_systemMenuHeight = GetNCM().iMenuHeight - 4; + + wxASSERT_MSG( ms_systemMenuHeight > 0, + "menu height should be positive" ); if ( ::SystemParametersInfo(SPI_GETKEYBOARDCUES, 0, &ms_alwaysShowCues, 0) == 0 ) @@ -106,10 +129,7 @@ private: static void DoInitFont() { - WinStruct nm; - ::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &nm, 0); - - ms_systemMenuFont = new wxFont(wxNativeFontInfo(nm.lfMenuFont)); + ms_systemMenuFont = new wxFont(wxNativeFontInfo(GetNCM().lfMenuFont)); } static wxFont* ms_systemMenuFont;