diff --git a/dlls/uxtheme/.cvsignore b/dlls/uxtheme/.cvsignore index 1a1142c3f53..b52aa7ae659 100644 --- a/dlls/uxtheme/.cvsignore +++ b/dlls/uxtheme/.cvsignore @@ -2,3 +2,4 @@ Makefile uxtheme.dll.dbg.c uxtheme.spec.c uxtheme.spec.def +version.res diff --git a/dlls/uxtheme/Makefile.in b/dlls/uxtheme/Makefile.in index 0d774269b58..359bb251c25 100644 --- a/dlls/uxtheme/Makefile.in +++ b/dlls/uxtheme/Makefile.in @@ -7,7 +7,13 @@ IMPORTS = gdi32 user32 advapi32 kernel32 ntdll EXTRALIBS = $(LIBUNICODE) C_SRCS = \ - main.c + draw.c \ + main.c \ + metric.c \ + property.c \ + system.c + +RC_SRCS = version.rc @MAKE_DLL_RULES@ diff --git a/dlls/uxtheme/draw.c b/dlls/uxtheme/draw.c new file mode 100644 index 00000000000..57cf3597edc --- /dev/null +++ b/dlls/uxtheme/draw.c @@ -0,0 +1,216 @@ +/* + * Win32 5.1 Theme drawing + * + * Copyright (C) 2003 Kevin Koltzau + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" + +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "uxtheme.h" + +#include "uxthemedll.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(uxtheme); + +/*********************************************************************** + * EnableThemeDialogTexture (UXTHEME.@) + */ +HRESULT WINAPI EnableThemeDialogTexture(HWND hwnd, DWORD dwFlags) +{ + FIXME("%p 0x%08lx: stub\n", hwnd, dwFlags); + return ERROR_CALL_NOT_IMPLEMENTED; + } + +/*********************************************************************** + * IsThemeDialogTextureEnabled (UXTHEME.@) + */ +BOOL WINAPI IsThemeDialogTextureEnabled(void) +{ + FIXME("stub\n"); + return FALSE; +} + +/*********************************************************************** + * DrawThemeParentBackground (UXTHEME.@) + */ +HRESULT WINAPI DrawThemeParentBackground(HWND hwnd, HDC hdc, RECT *prc) +{ + FIXME("stub\n"); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * DrawThemeBackground (UXTHEME.@) + */ +HRESULT WINAPI DrawThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, const RECT *pRect, + const RECT *pClipRect) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * DrawThemeBackgroundEx (UXTHEME.@) + */ +HRESULT WINAPI DrawThemeBackgroundEx(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, const RECT *pRect, + const DTBGOPTS *pOptions) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * DrawThemeEdge (UXTHEME.@) + */ +HRESULT WINAPI DrawThemeEdge(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, const RECT *pDestRect, UINT uEdge, + UINT uFlags, RECT *pContentRect) +{ + FIXME("%d %d 0x%08x 0x%08x: stub\n", iPartId, iStateId, uEdge, uFlags); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * DrawThemeIcon (UXTHEME.@) + */ +HRESULT WINAPI DrawThemeIcon(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, + const RECT *pRect, HIMAGELIST himl, int iImageIndex) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * DrawThemeText (UXTHEME.@) + */ +HRESULT WINAPI DrawThemeText(HTHEME hTheme, HDC hdc, int iPartId, int iStateId, + LPCWSTR pszText, int iCharCount, DWORD dwTextFlags, + DWORD dwTextFlags2, const RECT *pRect) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeBackgroundContentRect (UXTHEME.@) + */ +HRESULT WINAPI GetThemeBackgroundContentRect(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, + const RECT *pBoundingRect, + RECT *pContentRect) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeBackgroundExtent (UXTHEME.@) + */ +HRESULT WINAPI GetThemeBackgroundExtent(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, const RECT *pContentRect, + RECT *pExtentRect) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeBackgroundRegion (UXTHEME.@) + */ +HRESULT WINAPI GetThemeBackgroundRegion(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, const RECT *pRect, + HRGN *pRegion) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemePartSize (UXTHEME.@) + */ +HRESULT WINAPI GetThemePartSize(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, RECT *prc, THEMESIZE eSize, + SIZE *psz) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, eSize); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/*********************************************************************** + * GetThemeTextExtent (UXTHEME.@) + */ +HRESULT WINAPI GetThemeTextExtent(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, LPCWSTR pszText, int iCharCount, + DWORD dwTextFlags, const RECT *pBoundingRect, + RECT *pExtentRect) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeTextMetrics (UXTHEME.@) + */ +HRESULT WINAPI GetThemeTextMetrics(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, TEXTMETRICW *ptm) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * IsThemeBackgroundPartiallyTransparent (UXTHEME.@) + */ +BOOL WINAPI IsThemeBackgroundPartiallyTransparent(HTHEME hTheme, int iPartId, + int iStateId) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + return FALSE; +} diff --git a/dlls/uxtheme/main.c b/dlls/uxtheme/main.c index 440ee6766db..a59391b9384 100644 --- a/dlls/uxtheme/main.c +++ b/dlls/uxtheme/main.c @@ -24,57 +24,25 @@ #include "windef.h" #include "winbase.h" -#include "winuser.h" -#include "wingdi.h" -#include "uxtheme.h" +#include "uxthemedll.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(uxtheme); +/***********************************************************************/ + /* For the moment, do nothing here. */ BOOL WINAPI DllMain(HINSTANCE hInstDLL, DWORD fdwReason, LPVOID lpv) { + TRACE("%p 0x%lx %p: stub\n", hInstDLL, fdwReason, lpv); switch(fdwReason) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hInstDLL); - break; - case DLL_PROCESS_DETACH: - break; + UXTHEME_InitSystem(); + break; + case DLL_PROCESS_DETACH: + break; } return TRUE; } - -BOOL WINAPI IsAppThemed(void) -{ - FIXME("\n"); - return FALSE; -} - -BOOL WINAPI IsThemeActive(void) -{ - FIXME("\n"); - return FALSE; -} - -HRESULT WINAPI EnableThemeDialogTexture(HWND hwnd, DWORD dwFlags) { - FIXME("%p 0x%08lx\n", hwnd, dwFlags); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -HRESULT WINAPI EnableTheming(BOOL fEnable) { - FIXME("%d\n", fEnable); - return ERROR_CALL_NOT_IMPLEMENTED; -} - -HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR pszClassList) { - FIXME("%p %s\n", hwnd, debugstr_w(pszClassList)); - return NULL; -} - -HRESULT WINAPI SetWindowTheme(HWND hwnd, LPCWSTR pszSubAppName, - LPCWSTR pszSubIdList) { - FIXME("%p %s %s\n", hwnd, debugstr_w(pszSubAppName), - debugstr_w(pszSubIdList)); - return ERROR_CALL_NOT_IMPLEMENTED; -} diff --git a/dlls/uxtheme/metric.c b/dlls/uxtheme/metric.c new file mode 100644 index 00000000000..30e1889f8f0 --- /dev/null +++ b/dlls/uxtheme/metric.c @@ -0,0 +1,105 @@ +/* + * Win32 5.1 Theme metrics + * + * Copyright (C) 2003 Kevin Koltzau + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" + +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "uxtheme.h" + +#include "uxthemedll.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(uxtheme); + +/*********************************************************************** + * GetThemeSysBool (UXTHEME.@) + */ +BOOL WINAPI GetThemeSysBool(HTHEME hTheme, int iBoolID) +{ + FIXME("%d: stub\n", iBoolID); + return FALSE; +} + +/*********************************************************************** + * GetThemeSysColor (UXTHEME.@) + */ +COLORREF WINAPI GetThemeSysColor(HTHEME hTheme, int iColorID) +{ + FIXME("%d: stub\n", iColorID); + return FALSE; +} + +/*********************************************************************** + * GetThemeSysColorBrush (UXTHEME.@) + */ +HBRUSH WINAPI GetThemeSysColorBrush(HTHEME hTheme, int iColorID) +{ + FIXME("%d: stub\n", iColorID); + return FALSE; +} + +/*********************************************************************** + * GetThemeSysFont (UXTHEME.@) + */ +HRESULT WINAPI GetThemeSysFont(HTHEME hTheme, int iFontID, LOGFONTW *plf) +{ + FIXME("%d: stub\n", iFontID); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeSysInt (UXTHEME.@) + */ +HRESULT WINAPI GetThemeSysInt(HTHEME hTheme, int iIntID, int *piValue) +{ + FIXME("%d: stub\n", iIntID); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeSysSize (UXTHEME.@) + */ +int WINAPI GetThemeSysSize(HTHEME hTheme, int iSizeID) +{ + FIXME("%d: stub\n", iSizeID); + return 0; +} + +/*********************************************************************** + * GetThemeSysString (UXTHEME.@) + */ +HRESULT WINAPI GetThemeSysString(HTHEME hTheme, int iStringID, + LPWSTR pszStringBuff, int cchMaxStringChars) +{ + FIXME("%d: stub\n", iStringID); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} diff --git a/dlls/uxtheme/property.c b/dlls/uxtheme/property.c new file mode 100644 index 00000000000..03f75440159 --- /dev/null +++ b/dlls/uxtheme/property.c @@ -0,0 +1,205 @@ +/* + * Win32 5.1 Theme properties + * + * Copyright (C) 2003 Kevin Koltzau + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" + +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "uxtheme.h" + +#include "uxthemedll.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(uxtheme); + +/*********************************************************************** + * GetThemeDocumentationProperty (UXTHEME.@) + */ +HRESULT WINAPI GetThemeDocumentationProperty(LPCWSTR pszThemeName, + LPCWSTR pszPropertyName, + LPWSTR pszValueBuff, + int cchMaxValChars) +{ + FIXME("%s %s: stub\n", debugstr_w(pszThemeName), debugstr_w(pszPropertyName)); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeBool (UXTHEME.@) + */ +HRESULT WINAPI GetThemeBool(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, BOOL *pfVal) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeColor (UXTHEME.@) + */ +HRESULT WINAPI GetThemeColor(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, COLORREF *pColor) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeEnumValue (UXTHEME.@) + */ +HRESULT WINAPI GetThemeEnumValue(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, int *piVal) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeFilename (UXTHEME.@) + */ +HRESULT WINAPI GetThemeFilename(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, LPWSTR pszThemeFilename, + int cchMaxBuffChars) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeFont (UXTHEME.@) + */ +HRESULT WINAPI GetThemeFont(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, int iPropId, LOGFONTW *pFont) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeInt (UXTHEME.@) + */ +HRESULT WINAPI GetThemeInt(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, int *piVal) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeIntList (UXTHEME.@) + */ +HRESULT WINAPI GetThemeIntList(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, INTLIST *pIntList) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemePosition (UXTHEME.@) + */ +HRESULT WINAPI GetThemePosition(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, POINT *pPoint) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeRect (UXTHEME.@) + */ +HRESULT WINAPI GetThemeRect(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, RECT *pRect) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeString (UXTHEME.@) + */ +HRESULT WINAPI GetThemeString(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, LPWSTR pszBuff, int cchMaxBuffChars) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeMargins (UXTHEME.@) + */ +HRESULT WINAPI GetThemeMargins(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, int iPropId, RECT *prc, + MARGINS *pMargins) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeMetric (UXTHEME.@) + */ +HRESULT WINAPI GetThemeMetric(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, int iPropId, int *piVal) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemePropertyOrigin (UXTHEME.@) + */ +HRESULT WINAPI GetThemePropertyOrigin(HTHEME hTheme, int iPartId, int iStateId, + int iPropId, PROPERTYORIGIN *pOrigin) +{ + FIXME("%d %d %d: stub\n", iPartId, iStateId, iPropId); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} diff --git a/dlls/uxtheme/system.c b/dlls/uxtheme/system.c new file mode 100644 index 00000000000..0d82ec67502 --- /dev/null +++ b/dlls/uxtheme/system.c @@ -0,0 +1,418 @@ +/* + * Win32 5.1 Theme system + * + * Copyright (C) 2003 Kevin Koltzau + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" + +#include + +#include "windef.h" +#include "winbase.h" +#include "winuser.h" +#include "wingdi.h" +#include "uxtheme.h" + +#include "uxthemedll.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(uxtheme); + +/*********************************************************************** + * Defines and global variables + */ + +DWORD dwThemeAppProperties = STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS; +ATOM atWindowTheme; +ATOM atSubAppName; +ATOM atSubIdList; + +/***********************************************************************/ + +/*********************************************************************** + * UXTHEME_InitSystem + */ +void UXTHEME_InitSystem() +{ + const WCHAR szWindowTheme[] = { + 'u','x','_','t','h','e','m','e','\0' + }; + const WCHAR szSubAppName[] = { + 'u','x','_','s','u','b','a','p','p','\0' + }; + const WCHAR szSubIdList[] = { + 'u','x','_','s','u','b','i','d','l','s','t','\0' + }; + + atWindowTheme = GlobalAddAtomW(szWindowTheme); + atSubAppName = GlobalAddAtomW(szSubAppName); + atSubIdList = GlobalAddAtomW(szSubIdList); +} + +/*********************************************************************** + * IsAppThemed (UXTHEME.@) + */ +BOOL WINAPI IsAppThemed(void) +{ + FIXME("stub\n"); + return FALSE; +} + +/*********************************************************************** + * IsThemeActive (UXTHEME.@) + */ +BOOL WINAPI IsThemeActive(void) +{ + FIXME("stub\n"); + return FALSE; +} + +/*********************************************************************** + * EnableTheming (UXTHEME.@) + * + * NOTES + * This is a global and persistant change + */ +HRESULT WINAPI EnableTheming(BOOL fEnable) +{ + FIXME("%d: stub\n", fEnable); + return ERROR_CALL_NOT_IMPLEMENTED; + } + +/*********************************************************************** + * OpenThemeData (UXTHEME.@) + */ +HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR pszClassList) +{ + FIXME("%p %s: stub\n", hwnd, debugstr_w(pszClassList)); + return NULL; +} + +/*********************************************************************** + * GetWindowTheme (UXTHEME.@) + * + * Retrieve the last theme opened for a window + */ +HTHEME WINAPI GetWindowTheme(HWND hwnd) +{ + TRACE("(%p)\n", hwnd); + return GetPropW(hwnd, MAKEINTATOMW(atWindowTheme)); +} + +/*********************************************************************** + * UXTHEME_SetWindowProperty + * + * I'm using atoms as there may be large numbers of duplicated strings + * and they do the work of keeping memory down as a cause of that quite nicely + */ +HRESULT UXTHEME_SetWindowProperty(HWND hwnd, ATOM aProp, LPCWSTR pszValue) +{ + ATOM oldValue = (ATOM)(size_t)RemovePropW(hwnd, MAKEINTATOMW(aProp)); + if(oldValue) + DeleteAtom(oldValue); + if(pszValue) { + ATOM atValue = AddAtomW(pszValue); + if(!atValue + || !SetPropW(hwnd, MAKEINTATOMW(aProp), (LPWSTR)MAKEINTATOMW(atValue))) { + HRESULT hr = HRESULT_FROM_WIN32(GetLastError()); + if(atValue) DeleteAtom(atValue); + return hr; + } + } + return S_OK; +} + +/*********************************************************************** + * SetWindowTheme (UXTHEME.@) + * + * Persistant through the life of the window, even after themes change + */ +HRESULT WINAPI SetWindowTheme(HWND hwnd, LPCWSTR pszSubAppName, + LPCWSTR pszSubIdList) +{ + HRESULT hr; + TRACE("(%p,%s,%s)\n", hwnd, debugstr_w(pszSubAppName), + debugstr_w(pszSubIdList)); + hr = UXTHEME_SetWindowProperty(hwnd, atSubAppName, pszSubAppName); + if(SUCCEEDED(hr)) + hr = UXTHEME_SetWindowProperty(hwnd, atSubIdList, pszSubIdList); + return hr; +} + +/*********************************************************************** + * GetCurrentThemeName (UXTHEME.@) + */ +HRESULT WINAPI GetCurrentThemeName(LPWSTR pszThemeFileName, int dwMaxNameChars, + LPWSTR pszColorBuff, int cchMaxColorChars, + LPWSTR pszSizeBuff, int cchMaxSizeChars) +{ + FIXME("stub\n"); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * GetThemeAppProperties (UXTHEME.@) + */ +DWORD WINAPI GetThemeAppProperties(void) +{ + return dwThemeAppProperties; +} + +/*********************************************************************** + * SetThemeAppProperties (UXTHEME.@) + */ +void WINAPI SetThemeAppProperties(DWORD dwFlags) +{ + TRACE("(0x%08lx)\n", dwFlags); + dwThemeAppProperties = dwFlags; +} + +/*********************************************************************** + * CloseThemeData (UXTHEME.@) + */ +HRESULT WINAPI CloseThemeData(HTHEME hTheme) +{ + FIXME("stub\n"); + if(!hTheme) + return E_HANDLE; + return S_OK; +} + +/*********************************************************************** + * HitTestThemeBackground (UXTHEME.@) + */ +HRESULT WINAPI HitTestThemeBackground(HTHEME hTheme, HDC hdc, int iPartId, + int iStateId, DWORD dwOptions, + const RECT *pRect, HRGN hrgn, + POINT ptTest, WORD *pwHitTestCode) +{ + FIXME("%d %d 0x%08lx: stub\n", iPartId, iStateId, dwOptions); + if(!hTheme) + return E_HANDLE; + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/*********************************************************************** + * IsThemePartDefined (UXTHEME.@) + */ +BOOL WINAPI IsThemePartDefined(HTHEME hTheme, int iPartId, int iStateId) +{ + FIXME("%d %d: stub\n", iPartId, iStateId); + return FALSE; +} + +/********************************************************************** + * Undocumented functions + */ + +/********************************************************************** + * QueryThemeServices (UXTHEME.1) + * + * RETURNS + * some kind of status flag + */ +DWORD WINAPI QueryThemeServices() +{ + FIXME("stub\n"); + return 3; /* This is what is returned under XP in most cases */ +} + + +/********************************************************************** + * OpenThemeFile (UXTHEME.2) + * + * Opens a theme file, which can be used to change the current theme, etc + * + * PARAMS + * pszThemeFileName Path to a msstyles theme file + * pszColorName Color defined in the theme, eg. NormalColor + * pszSizeName Size defined in the theme, eg. NormalSize + * hThemeFile Handle to theme file + */ +HRESULT WINAPI OpenThemeFile(LPCWSTR pszThemeFileName, LPCWSTR pszColorName, + LPCWSTR pszSizeName, HTHEMEFILE *hThemeFile, + DWORD unknown) +{ + FIXME("%s,%s,%s,%ld: stub\n", debugstr_w(pszThemeFileName), + debugstr_w(pszColorName), + debugstr_w(pszSizeName), unknown); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/********************************************************************** + * CloseThemeFile (UXTHEME.3) + * + * Releases theme file handle returned by OpenThemeFile + * + * PARAMS + * hThemeFile Handle to theme file + */ +HRESULT WINAPI CloseThemeFile(HTHEMEFILE hThemeFile) +{ + FIXME("stub\n"); + return S_OK; +} + +/********************************************************************** + * ApplyTheme (UXTHEME.4) + * + * Set a theme file to be the currently active theme + * + * PARAMS + * hThemeFile Handle to theme file + * unknown See notes + * hWnd Window requesting the theme change + * + * NOTES + * I'm not sure what the second parameter is (the datatype is likely wrong), other then this: + * Under XP if I pass + * char b[] = ""; + * the theme is applied with the screen redrawing really badly (flickers) + * char b[] = "\0"; where \0 can be one or more of any character, makes no difference + * the theme is applied smoothly (screen does not flicker) + * char *b = "\0" or NULL; where \0 can be zero or more of any character, makes no difference + * the function fails returning invalid parameter...very strange + */ +HRESULT WINAPI ApplyTheme(HTHEMEFILE hThemeFile, char *unknown, HWND hWnd) +{ + FIXME("%s: stub\n", unknown); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/********************************************************************** + * GetThemeDefaults (UXTHEME.7) + * + * Get the default color & size for a theme + * + * PARAMS + * pszThemeFileName Path to a msstyles theme file + * pszColorName Buffer to recieve the default color name + * dwColorNameLen Length, in characters, of color name buffer + * pszSizeName Buffer to recieve the default size name + * dwSizeNameLen Length, in characters, of size name buffer + */ +HRESULT WINAPI GetThemeDefaults(LPCWSTR pszThemeFileName, LPWSTR pszColorName, + DWORD dwColorNameLen, LPWSTR pszSizeName, + DWORD dwSizeNameLen) +{ + FIXME("%s: stub\n", debugstr_w(pszThemeFileName)); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/********************************************************************** + * EnumThemes (UXTHEME.8) + * + * Enumerate available themes, calls specified EnumThemeProc for each + * theme found. Passes lpData through to callback function. + * + * PARAMS + * pszThemePath Path containing themes + * callback Called for each theme found in path + * lpData Passed through to callback + */ +HRESULT WINAPI EnumThemes(LPCWSTR pszThemePath, EnumThemeProc callback, + LPVOID lpData) +{ + FIXME("%s: stub\n", debugstr_w(pszThemePath)); + return ERROR_CALL_NOT_IMPLEMENTED; +} + + +/********************************************************************** + * EnumThemeColors (UXTHEME.9) + * + * Enumerate theme colors available with a particular size + * + * PARAMS + * pszThemeFileName Path to a msstyles theme file + * pszSizeName Theme size to enumerate available colors + * If NULL the default theme size is used + * dwColorNum Color index to retrieve, increment from 0 + * pszColorName Output color name + * + * RETURNS + * S_OK on success + * E_PROP_ID_UNSUPPORTED when dwColorName does not refer to a color + * or when pszSizeName does not refer to a valid size + * + * NOTES + * XP fails with E_POINTER when pszColorName points to a buffer smaller then 605 + * characters + */ +HRESULT WINAPI EnumThemeColors(LPWSTR pszThemeFileName, LPWSTR pszSizeName, + DWORD dwColorNum, LPWSTR pszColorName) +{ + FIXME("%s %s %ld: stub\n", debugstr_w(pszThemeFileName), + debugstr_w(pszSizeName), dwColorNum); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/********************************************************************** + * EnumThemeSizes (UXTHEME.10) + * + * Enumerate theme colors available with a particular size + * + * PARAMS + * pszThemeFileName Path to a msstyles theme file + * pszColorName Theme color to enumerate available sizes + * If NULL the default theme color is used + * dwSizeNum Size index to retrieve, increment from 0 + * pszSizeName Output size name + * + * RETURNS + * S_OK on success + * E_PROP_ID_UNSUPPORTED when dwSizeName does not refer to a size + * or when pszColorName does not refer to a valid color + * + * NOTES + * XP fails with E_POINTER when pszSizeName points to a buffer smaller then 605 + * characters + */ +HRESULT WINAPI EnumThemeSizes(LPWSTR pszThemeFileName, LPWSTR pszColorName, + DWORD dwSizeNum, LPWSTR pszSizeName) +{ + FIXME("%s %s %ld: stub\n", debugstr_w(pszThemeFileName), debugstr_w(pszColorName), dwSizeNum); + return ERROR_CALL_NOT_IMPLEMENTED; +} + +/********************************************************************** + * ParseThemeIniFile (UXTHEME.11) + * + * Enumerate data in a theme INI file. + * + * PARAMS + * pszIniFileName Path to a theme ini file + * pszUnknown Cannot be NULL, L"" is valid + * callback Called for each found entry + * lpData Passed through to callback + * + * RETURNS + * S_OK on success + * 0x800706488 (Unknown property) when enumeration is canceled from callback + * + * NOTES + * When pszUnknown is NULL the callback is never called, the value does not seem to surve + * any other purpose + */ +HRESULT WINAPI ParseThemeIniFile(LPCWSTR pszIniFileName, LPWSTR pszUnknown, + ParseThemeIniFileProc callback, LPVOID lpData) +{ + FIXME("%s %s: stub\n", debugstr_w(pszIniFileName), debugstr_w(pszUnknown)); + return ERROR_CALL_NOT_IMPLEMENTED; +} diff --git a/dlls/uxtheme/uxtheme.spec b/dlls/uxtheme/uxtheme.spec index 1374c3b1267..34ddc90678f 100644 --- a/dlls/uxtheme/uxtheme.spec +++ b/dlls/uxtheme/uxtheme.spec @@ -1,48 +1,93 @@ -@ stub CloseThemeData -@ stub DrawThemeBackground -@ stub DrawThemeBackgroundEx -@ stub DrawThemeEdge -@ stub DrawThemeIcon -@ stub DrawThemeParentBackground -@ stub DrawThemeText +# Undocumented functions - Names derived from debug symbols +1 stdcall QueryThemeServices() +2 stdcall OpenThemeFile(wstr wstr wstr ptr long) +3 stdcall CloseThemeFile(ptr) +4 stdcall ApplyTheme(ptr ptr ptr) +7 stdcall GetThemeDefaults(wstr wstr long wstr long) +8 stdcall EnumThemes(wstr ptr ptr) +9 stdcall EnumThemeColors(wstr wstr long wstr) +10 stdcall EnumThemeSizes(wstr wstr long wstr) +11 stdcall ParseThemeIniFile(wstr wstr ptr ptr) +13 stub DrawNCPreview +14 stub RegisterDefaultTheme +15 stub DumpLoadedThemeToTextFile +16 stub OpenThemeDataFromFile +17 stub OpenThemeFileFromData +18 stub GetThemeSysSize96 +19 stub GetThemeSysFont96 +20 stub SessionAllocate +21 stub SessionFree +22 stub ThemeHooksOn +23 stub ThemeHooksOff +24 stub AreThemeHooksActive +25 stub GetCurrentChangeNumber +26 stub GetNewChangeNumber +27 stub SetGlobalTheme +28 stub GetGlobalTheme +29 stub CheckThemeSignature +30 stub LoadTheme +31 stub InitUserTheme +32 stub InitUserRegistry +33 stub ReestablishServerConnection +34 stub ThemeHooksInstall +35 stub ThemeHooksRemove +36 stub RefreshThemeForTS +43 stub ClassicGetSystemMetrics +44 stub ClassicSystemParametersInfoA +45 stub ClassicSystemParametersInfoW +46 stub ClassicAdjustWindowRectEx +48 stub GetThemeParseErrorInfo +60 stub CreateThemeDataFromObjects +61 stub OpenThemeDataEx +62 stub ServerClearStockObjects +63 stub MarkSelection + +# Standard functions +@ stdcall CloseThemeData(ptr) +@ stdcall DrawThemeBackground(ptr ptr long long ptr ptr) +@ stdcall DrawThemeBackgroundEx(ptr ptr long long ptr ptr) +@ stdcall DrawThemeEdge(ptr ptr long long ptr long long ptr) +@ stdcall DrawThemeIcon(ptr ptr long long ptr ptr long) +@ stdcall DrawThemeParentBackground(ptr ptr ptr) +@ stdcall DrawThemeText(ptr ptr long long wstr long long long ptr) @ stdcall EnableThemeDialogTexture(ptr long) @ stdcall EnableTheming(long) -@ stub GetCurrentThemeName -@ stub GetThemeAppProperties -@ stub GetThemeBackgroundContentRect -@ stub GetThemeBackgroundExtent -@ stub GetThemeBackgroundRegion -@ stub GetThemeBool -@ stub GetThemeColor -@ stub GetThemeDocumentationProperty -@ stub GetThemeEnumValue -@ stub GetThemeFilename -@ stub GetThemeFont -@ stub GetThemeInt -@ stub GetThemeIntList -@ stub GetThemeMargins -@ stub GetThemeMetric -@ stub GetThemePartSize -@ stub GetThemePosition -@ stub GetThemePropertyOrigin -@ stub GetThemeRect -@ stub GetThemeString -@ stub GetThemeSysBool -@ stub GetThemeSysColor -@ stub GetThemeSysColorBrush -@ stub GetThemeSysFont -@ stub GetThemeSysInt -@ stub GetThemeSysSize -@ stub GetThemeSysString -@ stub GetThemeTextExtent -@ stub GetThemeTextMetrics -@ stub GetWindowTheme -@ stub HitTestThemeBackground +@ stdcall GetCurrentThemeName(wstr long wstr long wstr long) +@ stdcall GetThemeAppProperties() +@ stdcall GetThemeBackgroundContentRect(ptr ptr long long ptr ptr) +@ stdcall GetThemeBackgroundExtent(ptr ptr long long ptr ptr) +@ stdcall GetThemeBackgroundRegion(ptr ptr long long ptr ptr) +@ stdcall GetThemeBool(ptr long long long ptr) +@ stdcall GetThemeColor(ptr long long long ptr) +@ stdcall GetThemeDocumentationProperty(wstr wstr wstr long) +@ stdcall GetThemeEnumValue(ptr long long long ptr) +@ stdcall GetThemeFilename(ptr long long long wstr long) +@ stdcall GetThemeFont(ptr ptr long long long ptr) +@ stdcall GetThemeInt(ptr long long long ptr) +@ stdcall GetThemeIntList(ptr long long long ptr) +@ stdcall GetThemeMargins(ptr ptr long long long ptr ptr) +@ stdcall GetThemeMetric(ptr ptr long long long ptr) +@ stdcall GetThemePartSize(ptr ptr long long ptr long ptr) +@ stdcall GetThemePosition(ptr long long long ptr) +@ stdcall GetThemePropertyOrigin(ptr long long long ptr) +@ stdcall GetThemeRect(ptr long long long ptr) +@ stdcall GetThemeString(ptr long long long wstr long) +@ stdcall GetThemeSysBool(ptr long) +@ stdcall GetThemeSysColor(ptr long) +@ stdcall GetThemeSysColorBrush(ptr long) +@ stdcall GetThemeSysFont(ptr long ptr) +@ stdcall GetThemeSysInt(ptr long ptr) +@ stdcall GetThemeSysSize(ptr long) +@ stdcall GetThemeSysString(ptr long wstr long) +@ stdcall GetThemeTextExtent(ptr ptr long long wstr long long ptr ptr) +@ stdcall GetThemeTextMetrics(ptr ptr long long ptr) +@ stdcall GetWindowTheme(ptr) +@ stdcall HitTestThemeBackground(ptr ptr long long long ptr ptr long ptr) @ stdcall IsAppThemed() @ stdcall IsThemeActive() -@ stub IsThemeBackgroundPartiallyTransparent -@ stub IsThemeDialogTextureEnabled -@ stub IsThemePartDefined +@ stdcall IsThemeBackgroundPartiallyTransparent(ptr long long) +@ stdcall IsThemeDialogTextureEnabled() +@ stdcall IsThemePartDefined(ptr long long) @ stdcall OpenThemeData(ptr wstr) -@ stub SetThemeAppProperties +@ stdcall SetThemeAppProperties(long) @ stdcall SetWindowTheme(ptr wstr wstr) diff --git a/dlls/uxtheme/uxthemedll.h b/dlls/uxtheme/uxthemedll.h new file mode 100644 index 00000000000..a2a6cc5052a --- /dev/null +++ b/dlls/uxtheme/uxthemedll.h @@ -0,0 +1,90 @@ +/* + * Internal uxtheme defines & declarations + * + * Copyright (C) 2003 Kevin Koltzau + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef __WINE_UXTHEMEDLL_H +#define __WINE_UXTHEMEDLL_H + +typedef HANDLE HTHEMEFILE; + +/********************************************************************** + * EnumThemeProc + * + * Callback function for EnumThemes. + * + * RETURNS + * TRUE to continue enumeration, FALSE to stop + * + * PARAMS + * lpReserved Always 0 + * pszThemeFileName Full path to theme msstyles file + * pszThemeName Display name for theme + * pszToolTip Tooltip name for theme + * lpReserved2 Always 0 + * lpData Value passed through lpData from EnumThemes + */ +typedef BOOL (CALLBACK *EnumThemeProc)(LPVOID lpReserved, LPCWSTR pszThemeFileName, + LPCWSTR pszThemeName, LPCWSTR pszToolTip, LPVOID lpReserved2, + LPVOID lpData); + +/********************************************************************** + * ParseThemeIniFileProc + * + * Callback function for ParseThemeIniFile. + * + * RETURNS + * TRUE to continue enumeration, FALSE to stop + * + * PARAMS + * dwType Entry type + * pszParam1 Use defined by entry type + * pszParam2 Use defined by entry type + * pszParam3 Use defined by entry type + * dwParam Use defined by entry type + * lpData Value passed through lpData from ParseThemeIniFile + * + * NOTES + * I dont know what the valid entry types are + */ +typedef BOOL (CALLBACK*ParseThemeIniFileProc)(DWORD dwType, LPWSTR pszParam1, + LPWSTR pszParam2, LPWSTR pszParam3, + DWORD dwParam, LPVOID lpData); + +/* Declarations for undocumented functions for use internally */ +DWORD WINAPI QueryThemeServices(); +HRESULT WINAPI OpenThemeFile(LPCWSTR pszThemeFileName, LPCWSTR pszColorName, + LPCWSTR pszSizeName, HTHEMEFILE *hThemeFile, + DWORD unknown); +HRESULT WINAPI CloseThemeFile(HTHEMEFILE hThemeFile); +HRESULT WINAPI ApplyTheme(HTHEMEFILE hThemeFile, char *unknown, HWND hWnd); +HRESULT WINAPI GetThemeDefaults(LPCWSTR pszThemeFileName, LPWSTR pszColorName, + DWORD dwColorNameLen, LPWSTR pszSizeName, + DWORD dwSizeNameLen); +HRESULT WINAPI EnumThemes(LPCWSTR pszThemePath, EnumThemeProc callback, + LPVOID lpData); +HRESULT WINAPI EnumThemeColors(LPWSTR pszThemeFileName, LPWSTR pszSizeName, + DWORD dwColorNum, LPWSTR pszColorName); +HRESULT WINAPI EnumThemeSizes(LPWSTR pszThemeFileName, LPWSTR pszColorName, + DWORD dwSizeNum, LPWSTR pszSizeName); +HRESULT WINAPI ParseThemeIniFile(LPCWSTR pszIniFileName, LPWSTR pszUnknown, + ParseThemeIniFileProc callback, LPVOID lpData); + +extern void UXTHEME_InitSystem(void); + +#endif diff --git a/dlls/uxtheme/version.rc b/dlls/uxtheme/version.rc new file mode 100644 index 00000000000..3e38d1ff01f --- /dev/null +++ b/dlls/uxtheme/version.rc @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2003 Kevin Koltzau + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#define WINE_FILENAME_STR "uxtheme.dll" + +#include