Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenmetric.c
Go to the documentation of this file.
00001 /* 00002 * Win32 5.1 Theme metrics 00003 * 00004 * Copyright (C) 2003 Kevin Koltzau 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU Lesser General Public 00017 * License along with this library; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 00019 */ 00020 00021 #include "uxthemep.h" 00022 #include "wine/debug.h" 00023 00024 WINE_DEFAULT_DEBUG_CHANNEL(uxtheme); 00025 00026 /*********************************************************************** 00027 * GetThemeSysBool (UXTHEME.@) 00028 */ 00029 BOOL WINAPI GetThemeSysBool(HTHEME hTheme, int iBoolID) 00030 { 00031 HRESULT hr; 00032 PTHEME_PROPERTY tp; 00033 BOOL ret; 00034 00035 TRACE("(%p, %d)\n", hTheme, iBoolID); 00036 SetLastError(0); 00037 if(hTheme) { 00038 if((tp = MSSTYLES_FindMetric(TMT_BOOL, iBoolID))) { 00039 hr = MSSTYLES_GetPropertyBool(tp, &ret); 00040 if(SUCCEEDED(hr)) 00041 return ret; 00042 else 00043 SetLastError(hr); 00044 } 00045 } 00046 if(iBoolID == TMT_FLATMENUS) { 00047 if(SystemParametersInfoW(SPI_GETFLATMENU, 0, &ret, 0)) 00048 return ret; 00049 } 00050 else { 00051 FIXME("Unknown bool id: %d\n", iBoolID); 00052 SetLastError(STG_E_INVALIDPARAMETER); 00053 } 00054 return FALSE; 00055 } 00056 00057 /*********************************************************************** 00058 * GetThemeSysColor (UXTHEME.@) 00059 */ 00060 COLORREF WINAPI GetThemeSysColor(HTHEME hTheme, int iColorID) 00061 { 00062 HRESULT hr; 00063 PTHEME_PROPERTY tp; 00064 00065 TRACE("(%p, %d)\n", hTheme, iColorID); 00066 SetLastError(0); 00067 if(hTheme) { 00068 if((tp = MSSTYLES_FindMetric(TMT_COLOR, iColorID))) { 00069 COLORREF color; 00070 hr = MSSTYLES_GetPropertyColor(tp, &color); 00071 if(SUCCEEDED(hr)) 00072 return color; 00073 else 00074 SetLastError(hr); 00075 } 00076 } 00077 return GetSysColor(iColorID); 00078 } 00079 00080 /*********************************************************************** 00081 * GetThemeSysColorBrush (UXTHEME.@) 00082 */ 00083 HBRUSH WINAPI GetThemeSysColorBrush(HTHEME hTheme, int iColorID) 00084 { 00085 TRACE("(%p, %d)\n", hTheme, iColorID); 00086 return CreateSolidBrush(GetThemeSysColor(hTheme, iColorID)); 00087 } 00088 00089 /*********************************************************************** 00090 * GetThemeSysFont (UXTHEME.@) 00091 */ 00092 HRESULT WINAPI GetThemeSysFont(HTHEME hTheme, int iFontID, LOGFONTW *plf) 00093 { 00094 HRESULT hr = S_OK; 00095 PTHEME_PROPERTY tp; 00096 00097 TRACE("(%p, %d)\n", hTheme, iFontID); 00098 if(hTheme) { 00099 if((tp = MSSTYLES_FindMetric(TMT_FONT, iFontID))) { 00100 HDC hdc = GetDC(NULL); 00101 hr = MSSTYLES_GetPropertyFont(tp, hdc, plf); 00102 ReleaseDC(NULL, hdc); 00103 if(SUCCEEDED(hr)) 00104 return S_OK; 00105 } 00106 } 00107 if(iFontID == TMT_ICONTITLEFONT) { 00108 if(!SystemParametersInfoW(SPI_GETICONTITLELOGFONT, sizeof(LOGFONTW), plf, 0)) 00109 return HRESULT_FROM_WIN32(GetLastError()); 00110 } 00111 else { 00112 NONCLIENTMETRICSW ncm; 00113 LOGFONTW *font = NULL; 00114 ncm.cbSize = sizeof(NONCLIENTMETRICSW); 00115 if(!SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICSW), &ncm, 0)) 00116 return HRESULT_FROM_WIN32(GetLastError()); 00117 switch(iFontID) { 00118 case TMT_CAPTIONFONT: font = &ncm.lfCaptionFont; break; 00119 case TMT_SMALLCAPTIONFONT: font = &ncm.lfSmCaptionFont; break; 00120 case TMT_MENUFONT: font = &ncm.lfMenuFont; break; 00121 case TMT_STATUSFONT: font = &ncm.lfStatusFont; break; 00122 case TMT_MSGBOXFONT: font = &ncm.lfMessageFont; break; 00123 default: FIXME("Unknown FontID: %d\n", iFontID); break; 00124 } 00125 if(font) *plf = *font; 00126 else hr = STG_E_INVALIDPARAMETER; 00127 } 00128 return hr; 00129 } 00130 00131 /*********************************************************************** 00132 * GetThemeSysInt (UXTHEME.@) 00133 */ 00134 HRESULT WINAPI GetThemeSysInt(HTHEME hTheme, int iIntID, int *piValue) 00135 { 00136 PTHEME_PROPERTY tp; 00137 00138 TRACE("(%p, %d)\n", hTheme, iIntID); 00139 if(!hTheme) 00140 return E_HANDLE; 00141 if(iIntID < TMT_FIRSTINT || iIntID > TMT_LASTINT) { 00142 WARN("Unknown IntID: %d\n", iIntID); 00143 return STG_E_INVALIDPARAMETER; 00144 } 00145 if((tp = MSSTYLES_FindMetric(TMT_INT, iIntID))) 00146 return MSSTYLES_GetPropertyInt(tp, piValue); 00147 return E_PROP_ID_UNSUPPORTED; 00148 } 00149 00150 /*********************************************************************** 00151 * GetThemeSysSize (UXTHEME.@) 00152 */ 00153 int WINAPI GetThemeSysSize(HTHEME hTheme, int iSizeID) 00154 { 00155 PTHEME_PROPERTY tp; 00156 int i, id = -1; 00157 int metricMap[] = { 00158 SM_CXVSCROLL, TMT_SCROLLBARWIDTH, 00159 SM_CYHSCROLL, TMT_SCROLLBARHEIGHT, 00160 SM_CXSIZE, TMT_CAPTIONBARWIDTH, 00161 SM_CYSIZE, TMT_CAPTIONBARHEIGHT, 00162 SM_CXFRAME, TMT_SIZINGBORDERWIDTH, 00163 SM_CYFRAME, TMT_SIZINGBORDERWIDTH, /* There is no TMT_SIZINGBORDERHEIGHT, but this works in windows.. */ 00164 SM_CXSMSIZE, TMT_SMCAPTIONBARWIDTH, 00165 SM_CYSMSIZE, TMT_SMCAPTIONBARHEIGHT, 00166 SM_CXMENUSIZE, TMT_MENUBARWIDTH, 00167 SM_CYMENUSIZE, TMT_MENUBARHEIGHT 00168 }; 00169 00170 if(hTheme) { 00171 for(i=0; i<sizeof(metricMap)/sizeof(metricMap[0]); i+=2) { 00172 if(metricMap[i] == iSizeID) { 00173 id = metricMap[i+1]; 00174 break; 00175 } 00176 } 00177 SetLastError(0); 00178 if(id != -1) { 00179 if((tp = MSSTYLES_FindMetric(TMT_SIZE, id))) { 00180 if(SUCCEEDED(MSSTYLES_GetPropertyInt(tp, &i))) { 00181 return i; 00182 } 00183 } 00184 TRACE("Size %d not found in theme, using system metric\n", iSizeID); 00185 } 00186 else { 00187 SetLastError(STG_E_INVALIDPARAMETER); 00188 return 0; 00189 } 00190 } 00191 return GetSystemMetrics(iSizeID); 00192 } 00193 00194 /*********************************************************************** 00195 * GetThemeSysString (UXTHEME.@) 00196 */ 00197 HRESULT WINAPI GetThemeSysString(HTHEME hTheme, int iStringID, 00198 LPWSTR pszStringBuff, int cchMaxStringChars) 00199 { 00200 PTHEME_PROPERTY tp; 00201 00202 TRACE("(%p, %d)\n", hTheme, iStringID); 00203 if(!hTheme) 00204 return E_HANDLE; 00205 if(iStringID < TMT_FIRSTSTRING || iStringID > TMT_LASTSTRING) { 00206 WARN("Unknown StringID: %d\n", iStringID); 00207 return STG_E_INVALIDPARAMETER; 00208 } 00209 if((tp = MSSTYLES_FindMetric(TMT_STRING, iStringID))) 00210 return MSSTYLES_GetPropertyString(tp, pszStringBuff, cchMaxStringChars); 00211 return E_PROP_ID_UNSUPPORTED; 00212 } Generated on Thu May 24 2012 04:27:19 for ReactOS by
1.7.6.1
|