]> git.saurik.com Git - wxWidgets.git/blame - include/wx/msw/private/metrics.h
define wxHAS_CONFIG_TEMPLATE_RW if template wxConfig::Read/Write() are available...
[wxWidgets.git] / include / wx / msw / private / metrics.h
CommitLineData
e328b972
VZ
1///////////////////////////////////////////////////////////////////////////////
2// Name: wx/msw/private/metrics.h
3// Purpose: various helper functions to retrieve system metrics
4// Author: Vadim Zeitlin
5// Created: 2008-09-05
6// RCS-ID: $Id$
7// Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org>
8// Licence: wxWindows licence
9///////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_MSW_PRIVATE_METRICS_H_
12#define _WX_MSW_PRIVATE_METRICS_H_
13
14namespace wxMSWImpl
15{
16
17// return NONCLIENTMETRICS as retrieved by SystemParametersInfo()
18//
19// currently this is not cached as the values may change when system settings
20// do and we don't react to this to invalidate the cache but it could be done
21// in the future
22//
23// MT-safety: this function is only meant to be called from the main thread
24inline const NONCLIENTMETRICS& GetNonClientMetrics()
25{
26 static WinStruct<NONCLIENTMETRICS> nm;
27 if ( !::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &nm, 0) )
28 {
29#if WINVER >= 0x0600
30 // a new field has been added to NONCLIENTMETRICS under Vista, so
31 // the call to SystemParametersInfo() fails if we use the struct
32 // size incorporating this new value on an older system -- retry
33 // without it
34 nm.cbSize -= sizeof(int);
35 if ( !::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &nm, 0) )
36#endif // WINVER >= 0x0600
37 {
38 // maybe we should initialize the struct with some defaults?
39 wxLogLastError(_T("SystemParametersInfo(SPI_GETNONCLIENTMETRICS)"));
40 }
41 }
42
43 return nm;
44}
45
46} // namespace wxMSWImpl
47
48#endif // _WX_MSW_PRIVATE_METRICS_H_
49