uxtheme: lots of infrastructure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a ton of infrastructure for my future patches, and a full implementation of GetThemeDocumentationProperty which I primarilly used to
test my INI file processing, and its now possible to set the current theme through the API..not that its much use to do that yet
? dlls/uxtheme/msstyles.rc
? dlls/uxtheme/uxini.c
Index: dlls/uxtheme/.cvsignore
===================================================================
RCS file: /home/wine/wine/dlls/uxtheme/.cvsignore,v
retrieving revision 1.2
diff -u -r1.2 .cvsignore
--- dlls/uxtheme/.cvsignore	4 Dec 2003 20:55:30 -0000	1.2
+++ dlls/uxtheme/.cvsignore	11 Jan 2004 01:24:22 -0000
@@ -3,3 +3,4 @@
 uxtheme.spec.c
 uxtheme.spec.def
 version.res
+msstyles.res
Index: dlls/uxtheme/Makefile.in
===================================================================
RCS file: /home/wine/wine/dlls/uxtheme/Makefile.in,v
retrieving revision 1.4
diff -u -r1.4 Makefile.in
--- dlls/uxtheme/Makefile.in	8 Dec 2003 22:45:26 -0000	1.4
+++ dlls/uxtheme/Makefile.in	11 Jan 2004 01:24:22 -0000
@@ -12,9 +12,11 @@
 	metric.c \
 	msstyles.c \
 	property.c \
-	system.c
+	system.c \
+	uxini.c

-RC_SRCS = version.rc
+RC_SRCS = version.rc \
+	  msstyles.rc

 @MAKE_DLL_RULES@

Index: dlls/uxtheme/main.c
===================================================================
RCS file: /home/wine/wine/dlls/uxtheme/main.c,v
retrieving revision 1.2
diff -u -r1.2 main.c
--- dlls/uxtheme/main.c	4 Dec 2003 20:55:30 -0000	1.2
+++ dlls/uxtheme/main.c	11 Jan 2004 01:24:22 -0000
@@ -39,7 +39,7 @@
     switch(fdwReason) {
         case DLL_PROCESS_ATTACH:
             DisableThreadLibraryCalls(hInstDLL);
-            UXTHEME_InitSystem();
+            UXTHEME_InitSystem(hInstDLL);
             break;
         case DLL_PROCESS_DETACH:
             break;
Index: dlls/uxtheme/msstyles.c
===================================================================
RCS file: /home/wine/wine/dlls/uxtheme/msstyles.c,v
retrieving revision 1.1
diff -u -r1.1 msstyles.c
--- dlls/uxtheme/msstyles.c	8 Dec 2003 22:45:26 -0000	1.1
+++ dlls/uxtheme/msstyles.c	11 Jan 2004 01:24:22 -0000
@@ -35,8 +35,139 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(uxtheme);
 
+/***********************************************************************
+ * Defines and global variables
+ */
+
+extern HINSTANCE hDllInst;
+
 #define MSSTYLES_VERSION 0x0003
 
+WCHAR szThemesIniResource[] = {
+    't','h','e','m','e','s','_','i','n','i','\0'
+};
+
+typedef struct _MSSTYLES_MAP {
+    WORD dwValue1;
+    WORD dwValue2;
+    LPCWSTR pszName;
+} MSSTYLES_MAP, *PMSSTYLES_MAP;
+
+static PMSSTYLES_MAP propMap;
+static PMSSTYLES_MAP enumMap;
+
+PTHEME_FILE tfActiveTheme = NULL;
+
+/***********************************************************************/
+
+/**********************************************************************
+ *      MSSTYLES_LoadMap
+ *
+ * Load a name/value map from resources
+ * Each name has 2 values
+ *
+ * PARAMS
+ *     pszName             Resource name to load
+ */
+PMSSTYLES_MAP MSSTYLES_LoadMap(LPWSTR pszName)
+{
+    HRSRC hrsc;
+    LPCSTR lmem = NULL;
+    LPCSTR lmemstart = NULL;
+    WORD eid;
+    DWORD count;
+    PMSSTYLES_MAP ret;
+
+    hrsc = FindResourceW(hDllInst, pszName, MAKEINTRESOURCEW(RT_RCDATA));
+    if(hrsc) lmem = LoadResource(hDllInst, hrsc);
+    if(!lmem)
+        return NULL;
+    lmemstart = lmem;
+    /* Count entries */
+    count = 0;
+    do {
+        eid = *(LPWORD)lmem;
+        lmem += sizeof(WORD) + sizeof(WORD);
+        lmem += (lstrlenW((LPCWSTR)lmem)+1) * sizeof(WCHAR);
+        count++;
+    } while(eid != 0);
+    ret = HeapAlloc(GetProcessHeap(), 0, (count+1) * sizeof(MSSTYLES_MAP));
+    count = 0;
+    lmem = lmemstart;
+    do {
+        eid = *(LPWORD)lmem;
+        ret[count].dwValue1 = eid;
+        lmem += sizeof(WORD);
+        ret[count].dwValue2 = *(LPWORD)lmem;
+        lmem += sizeof(WORD);
+        ret[count].pszName = (LPCWSTR)lmem;
+        lmem += (lstrlenW((LPCWSTR)lmem)+1) * sizeof(WCHAR);
+        count++;
+    } while(eid != 0);
+    ret[count].dwValue1 = 0;
+    ret[count].dwValue2 = 0;
+    ret[count].pszName = NULL;
+
+    return ret;
+}
+
+/**********************************************************************
+ *      MSSTYLES_FindInMap
+ *
+ * Find value associated with a name in a map
+ *
+ * PARAMS
+ *     pmMap               Map to search
+ *     pszName             Name to find
+ *     dwValue1            First value assocated with name
+ *     dwValue2            Second value associated with name
+ *
+ * RETURNS
+ *     FALSE if value is not found, TRUE otherwise
+ *
+ * NOTES
+ * FIXME: should use a hash table for this
+ * This isnt very efficient, as a map will be queried many many times, altho only during
+ * initialization, so will not affect the app after its running
+ */
+BOOL MSSTYLES_FindInMap(PMSSTYLES_MAP pmMap, LPCWSTR pszName, DWORD *dwValue1, DWORD *dwValue2)
+{
+    DWORD item = 0;
+    do {
+        if(!lstrcmpiW(pmMap[item].pszName, pszName)) {
+            if(dwValue1) *dwValue1 = pmMap[item].dwValue1;
+            if(dwValue2) *dwValue2 = pmMap[item].dwValue2;
+            return TRUE;
+        }
+    } while(pmMap[++item].pszName);
+    return FALSE;
+}
+
+/**********************************************************************
+ *      MSSTYLES_InitMSStyles
+ */
+void MSSTYLES_InitMSStyles()
+{
+    WCHAR map_property[] = {'M','A','P','_','P','R','O','P','E','R','T','Y','\0'};
+    WCHAR map_enum[] = {'M','A','P','_','E','N','U','M','\0'};
+
+    propMap = MSSTYLES_LoadMap(map_property);
+    enumMap = MSSTYLES_LoadMap(map_enum);
+
+    if(!propMap) ERR("Resource MAP_PROPERTY not found\n");
+    if(!enumMap) ERR("Resource MAP_ENUM not found\n");
+}
+
+/**********************************************************************
+ *      MSSTYLES_LookupProperty
+ *
+ * Find a property ID from name
+ */
+BOOL MSSTYLES_LookupProperty(LPCWSTR pszPropertyName, DWORD *dwPrimitive, DWORD *dwId)
+{
+    return MSSTYLES_FindInMap(propMap, pszPropertyName, dwPrimitive, dwId);
+}
+
 /**********************************************************************
  *      MSSTYLES_OpenThemeFile
  *
@@ -144,12 +275,13 @@
         goto invalid_theme;
     }
 
-    *tf = HeapAlloc(GetProcessHeap(), 0, sizeof(THEME_FILE));
+    *tf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(THEME_FILE));
     (*tf)->hTheme = hTheme;
     (*tf)->pszAvailColors = pszColors;
     (*tf)->pszAvailSizes = pszSizes;
     (*tf)->pszSelectedColor = pszSelectedColor;
     (*tf)->pszSelectedSize = pszSelectedSize;
+    (*tf)->dwRefCount = 1;
     return S_OK;
 
 invalid_theme:
@@ -166,7 +298,56 @@
 void MSSTYLES_CloseThemeFile(PTHEME_FILE tf)
 {
     if(tf) {
-        if(tf->hTheme) FreeLibrary(tf->hTheme);
-        HeapFree(GetProcessHeap(), 0, tf);
+        tf->dwRefCount--;
+        if(!tf->dwRefCount) {
+            if(tf->hTheme) FreeLibrary(tf->hTheme);
+            HeapFree(GetProcessHeap(), 0, tf);
+        }
     }
+}
+
+/***********************************************************************
+ *      MSSTYLES_SetActiveTheme
+ *
+ * Set the current active theme
+ */
+HRESULT MSSTYLES_SetActiveTheme(PTHEME_FILE tf)
+{
+    if(tfActiveTheme)
+        MSSTYLES_CloseThemeFile(tfActiveTheme);
+    tfActiveTheme = tf;
+    tfActiveTheme->dwRefCount++;
+    FIXME("Process theme resources\n");
+    return S_OK;
+}
+
+/***********************************************************************
+ *      MSSTYLES_GetThemeIni
+ *
+ * Retrieves themes.ini from a theme
+ */
+PUXINI_FILE MSSTYLES_GetThemeIni(PTHEME_FILE tf)
+{
+    return UXINI_LoadINI(tf, szThemesIniResource);
+}
+
+/***********************************************************************
+ *      MSSTYLES_OpenThemeClass
+ *
+ * Open a theme class
+ *
+ * PARAMS
+ *     tf                  Previously opened theme file
+ *     pszClassList        List of requested classes, semicolon delimited
+ */
+PTHEME_CLASS MSSTYLES_OpenThemeClass(LPCWSTR pszClassList)
+{
+    FIXME("%s\n", debugstr_w(pszClassList));
+    return NULL;
+}
+
+HRESULT MSSTYLES_CloseThemeClass(PTHEME_CLASS tc)
+{
+    FIXME("%p\n", tc);
+    return S_OK;
 }
Index: dlls/uxtheme/msstyles.h
===================================================================
RCS file: /home/wine/wine/dlls/uxtheme/msstyles.h,v
retrieving revision 1.1
diff -u -r1.1 msstyles.h
--- dlls/uxtheme/msstyles.h	8 Dec 2003 22:45:26 -0000	1.1
+++ dlls/uxtheme/msstyles.h	11 Jan 2004 01:24:22 -0000
@@ -22,6 +22,7 @@
 #define __WINE_MSSTYLES_H
 
 typedef struct _THEME_FILE {
+    DWORD dwRefCount;
     HMODULE hTheme;
     LPWSTR pszAvailColors;
     LPWSTR pszAvailSizes;
@@ -30,8 +31,29 @@
     LPWSTR pszSelectedSize;
 } THEME_FILE, *PTHEME_FILE;

+typedef struct _UXINI_FILE {
+    LPCWSTR lpIni;
+    LPCWSTR lpCurLoc;
+    LPCWSTR lpEnd;
+} UXINI_FILE, *PUXINI_FILE;
+
+void MSSTYLES_InitMSStyles();
+
 HRESULT MSSTYLES_OpenThemeFile(LPCWSTR lpThemeFile, LPCWSTR pszColorName, LPCWSTR pszSizeName, PTHEME_FILE *tf);
 void MSSTYLES_CloseThemeFile(PTHEME_FILE tf);
+HRESULT MSSTYLES_SetActiveTheme(PTHEME_FILE tf);
+PTHEME_CLASS MSSTYLES_OpenThemeClass(LPCWSTR pszClassList);
+HRESULT MSSTYLES_CloseThemeClass(PTHEME_CLASS tc);
+BOOL MSSTYLES_LookupProperty(LPCWSTR pszPropertyName, DWORD *dwPrimitive, DWORD *dwId);
+HRESULT MSSTYLES_GetDocumentationProperty(LPCWSTR pszPropertyName, LPWSTR pszValueBuff, int cchMaxValChars);
+PUXINI_FILE MSSTYLES_GetThemeIni(PTHEME_FILE tf);

+PUXINI_FILE UXINI_LoadINI(PTHEME_FILE tf, LPCWSTR lpName);
+void UXINI_CloseINI(PUXINI_FILE uf);
+void UXINI_ResetINI(PUXINI_FILE uf);
+LPCWSTR UXINI_GetNextSection(PUXINI_FILE uf, DWORD *dwLen);
+BOOL UXINI_FindSection(PUXINI_FILE uf, LPCWSTR lpName);
+LPCWSTR UXINI_GetNextValue(PUXINI_FILE uf, DWORD *dwNameLen, LPCWSTR *lpValue, DWORD *dwValueLen);
+BOOL UXINI_FindValue(PUXINI_FILE uf, LPCWSTR lpName, LPCWSTR *lpValue, DWORD *dwValueLen);

 #endif
Index: dlls/uxtheme/property.c
===================================================================
RCS file: /home/wine/wine/dlls/uxtheme/property.c,v
retrieving revision 1.1
diff -u -r1.1 property.c
--- dlls/uxtheme/property.c	4 Dec 2003 20:55:30 -0000	1.1
+++ dlls/uxtheme/property.c	11 Jan 2004 01:24:22 -0000
@@ -35,18 +35,6 @@
 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,
Index: dlls/uxtheme/system.c
===================================================================
RCS file: /home/wine/wine/dlls/uxtheme/system.c,v
retrieving revision 1.3
diff -u -r1.3 system.c
--- dlls/uxtheme/system.c	6 Jan 2004 22:08:33 -0000	1.3
+++ dlls/uxtheme/system.c	11 Jan 2004 01:24:23 -0000
@@ -29,6 +29,7 @@
 #include "winreg.h"
 #include "shlwapi.h"
 #include "uxtheme.h"
+#include "tmschema.h"

 #include "uxthemedll.h"
 #include "msstyles.h"
@@ -53,6 +54,10 @@
 static const WCHAR szColorName[] = {'C','o','l','o','r','N','a','m','e','\0'};
 static const WCHAR szDllName[] = {'D','l','l','N','a','m','e','\0'};

+static const WCHAR szIniDocumentation[] = {'d','o','c','u','m','e','n','t','a','t','i','o','n','\0'};
+
+HINSTANCE hDllInst;
+
 DWORD dwThemeAppProperties = STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS;
 ATOM atWindowTheme;
 ATOM atSubAppName;
@@ -66,29 +71,18 @@
 /***********************************************************************/

 /***********************************************************************
- *      UXTHEME_InitSystem
+ *      UXTHEME_LoadTheme
+ *
+ * Set the current active theme from the registry
  */
-void UXTHEME_InitSystem()
+void UXTHEME_LoadTheme()
 {
-    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'
-    };
     HKEY hKey;
     LONG buffsize;
     HRESULT hr;
     WCHAR tmp[10];
     PTHEME_FILE pt;

-    atWindowTheme = GlobalAddAtomW(szWindowTheme);
-    atSubAppName  = GlobalAddAtomW(szSubAppName);
-    atSubIdList   = GlobalAddAtomW(szSubIdList);
-
     /* Get current theme configuration */
     if(!RegOpenKeyW(HKEY_CURRENT_USER, szThemeManager, &hKey)) {
         TRACE("Loading theme config\n");
@@ -129,15 +123,85 @@
             /* Make sure the global color & size match the theme */
             lstrcpynW(szCurrentColor, pt->pszSelectedColor, sizeof(szCurrentColor)/sizeof(szCurrentColor[0]));
             lstrcpynW(szCurrentSize, pt->pszSelectedSize, sizeof(szCurrentSize)/sizeof(szCurrentSize[0]));
+
+            MSSTYLES_SetActiveTheme(pt);
+            TRACE("Theme active: %s %s %s\n", debugstr_w(szCurrentTheme),
+                debugstr_w(szCurrentColor), debugstr_w(szCurrentSize));
             MSSTYLES_CloseThemeFile(pt);
         }
     }
-
-    if(!bThemeActive)
+    if(!bThemeActive) {
+        MSSTYLES_SetActiveTheme(NULL);
         TRACE("Themeing not active\n");
+    }
+}
+
+/***********************************************************************
+ *      UXTHEME_SetActiveTheme
+ *
+ * Change the current active theme
+ */
+HRESULT UXTHEME_SetActiveTheme(PTHEME_FILE tf)
+{
+    HKEY hKey;
+    WCHAR tmp[2];
+    HRESULT hr;
+
+    hr = MSSTYLES_SetActiveTheme(tf);
+    if(FAILED(hr))
+        return hr;
+    if(tf) {
+        bThemeActive = TRUE;
+        GetModuleFileNameW(tf->hTheme, szCurrentTheme, sizeof(szCurrentTheme)/sizeof(szCurrentTheme[0]));
+        lstrcpynW(szCurrentColor, tf->pszSelectedColor, sizeof(szCurrentColor)/sizeof(szCurrentColor[0]));
+        lstrcpynW(szCurrentSize, tf->pszSelectedSize, sizeof(szCurrentSize)/sizeof(szCurrentSize[0]));
+    }
+    else {
+        bThemeActive = FALSE;
+        szCurrentTheme[0] = '\0';
+        szCurrentColor[0] = '\0';
+        szCurrentSize[0] = '\0';
+        return MSSTYLES_SetActiveTheme(NULL);
+    }
+
+    TRACE("Writing theme config to registry\n");
+    if(!RegCreateKeyW(HKEY_CURRENT_USER, szThemeManager, &hKey)) {
+        tmp[0] = bThemeActive?'1':'0';
+        tmp[1] = '\0';
+        RegSetValueExW(hKey, szThemeActive, 0, REG_SZ, (const BYTE*)tmp, sizeof(WCHAR)*2);
+        RegSetValueExW(hKey, szColorName, 0, REG_SZ, (const BYTE*)szCurrentColor, lstrlenW(szCurrentColor)+1);
+        RegSetValueExW(hKey, szSizeName, 0, REG_SZ, (const BYTE*)szCurrentSize, lstrlenW(szCurrentSize)+1);
+        RegSetValueExW(hKey, szDllName, 0, REG_SZ, (const BYTE*)szCurrentTheme, lstrlenW(szCurrentTheme)+1);
+        RegCloseKey(hKey);
+    }
     else
-        TRACE("Theme active: %s %s %s\n", debugstr_w(szCurrentTheme),
-              debugstr_w(szCurrentColor), debugstr_w(szCurrentSize));
+        TRACE("Failed to open theme registry key\n");
+    return hr;
+}
+
+/***********************************************************************
+ *      UXTHEME_InitSystem
+ */
+void UXTHEME_InitSystem(HINSTANCE hInst)
+{
+    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'
+    };
+
+    hDllInst = hInst;
+
+    atWindowTheme = GlobalAddAtomW(szWindowTheme);
+    atSubAppName  = GlobalAddAtomW(szSubAppName);
+    atSubIdList   = GlobalAddAtomW(szSubIdList);
+
+    UXTHEME_LoadTheme();
+    MSSTYLES_InitMSStyles();
 }

 /***********************************************************************
@@ -180,15 +244,21 @@
         PostMessageW(HWND_BROADCAST, WM_THEMECHANGED, 0, 0);
     }
     return S_OK;
- }
+}

 /***********************************************************************
  *      OpenThemeData                                       (UXTHEME.@)
  */
 HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR pszClassList)
 {
-    FIXME("%p %s: stub\n", hwnd, debugstr_w(pszClassList));
-    return NULL;
+    HTHEME hTheme;
+    TRACE("(%p,%s)\n", hwnd, debugstr_w(pszClassList));
+    if(!bThemeActive)
+        return NULL;
+    hTheme = MSSTYLES_OpenThemeClass(pszClassList);
+    if(IsWindow(hwnd))
+      SetPropW(hwnd, MAKEINTATOMW(atWindowTheme), hTheme);
+    return hTheme;
 }

 /***********************************************************************
@@ -281,10 +351,10 @@
  */
 HRESULT WINAPI CloseThemeData(HTHEME hTheme)
 {
-    FIXME("stub\n");
+    TRACE("(%p)\n", hTheme);
     if(!hTheme)
         return E_HANDLE;
-    return S_OK;
+    return MSSTYLES_CloseThemeClass(hTheme);
 }

 /***********************************************************************
@@ -310,6 +380,68 @@
     return FALSE;
 }

+/***********************************************************************
+ *      GetThemeDocumentationProperty                       (UXTHEME.@)
+ *
+ * Try and retrieve the documentation property from string resources
+ * if that fails, get it from the [documentation] section of themes.ini
+ */
+HRESULT WINAPI GetThemeDocumentationProperty(LPCWSTR pszThemeName,
+                                             LPCWSTR pszPropertyName,
+                                             LPWSTR pszValueBuff,
+                                             int cchMaxValChars)
+{
+    const WORD wDocToRes[] = {
+        TMT_DISPLAYNAME,5000,
+        TMT_TOOLTIP,5001,
+        TMT_COMPANY,5002,
+        TMT_AUTHOR,5003,
+        TMT_COPYRIGHT,5004,
+        TMT_URL,5005,
+        TMT_VERSION,5006,
+        TMT_DESCRIPTION,5007
+    };
+
+    PTHEME_FILE pt;
+    HRESULT hr;
+    int i;
+    DWORD dwDocId;
+    TRACE("(%s,%s,%p,%d)\n", debugstr_w(pszThemeName), debugstr_w(pszPropertyName),
+          pszValueBuff, cchMaxValChars);
+
+    hr = MSSTYLES_OpenThemeFile(pszThemeName, NULL, NULL, &pt);
+    if(FAILED(hr)) return hr;
+
+    /* Try to load from string resources */
+    hr = E_PROP_ID_UNSUPPORTED;
+    if(MSSTYLES_LookupProperty(pszPropertyName, NULL, &dwDocId)) {
+        for(i=0; i<sizeof(wDocToRes)/sizeof(wDocToRes[0]); i+=2) {
+            if(wDocToRes[i] == dwDocId) {
+                if(LoadStringW(pt->hTheme, wDocToRes[i+1], pszValueBuff, cchMaxValChars)) {
+                    hr = S_OK;
+                    break;
+                }
+            }
+        }
+    }
+    /* If loading from string resource failed, try getting it from the theme.ini */
+    if(FAILED(hr)) {
+        PUXINI_FILE uf = MSSTYLES_GetThemeIni(pt);
+        if(UXINI_FindSection(uf, szIniDocumentation)) {
+            LPCWSTR lpValue;
+            DWORD dwLen;
+            if(UXINI_FindValue(uf, pszPropertyName, &lpValue, &dwLen)) {
+                lstrcpynW(pszValueBuff, lpValue, min(dwLen+1,cchMaxValChars));
+                hr = S_OK;
+            }
+        }
+        UXINI_CloseINI(uf);
+    }
+
+    MSSTYLES_CloseThemeFile(pt);
+    return hr;
+}
+
 /**********************************************************************
  *      Undocumented functions
  */
@@ -385,8 +517,11 @@
  */
 HRESULT WINAPI ApplyTheme(HTHEMEFILE hThemeFile, char *unknown, HWND hWnd)
 {
-    FIXME("%s: stub\n", unknown);
-    return ERROR_CALL_NOT_IMPLEMENTED;
+    HRESULT hr;
+    TRACE("(%p,%s,%p)\n", hThemeFile, unknown, hWnd);
+    hr = UXTHEME_SetActiveTheme(hThemeFile);
+    PostMessageW(HWND_BROADCAST, WM_THEMECHANGED, 0, 0);
+    return hr;
 }

 /**********************************************************************
Index: dlls/uxtheme/uxthemedll.h
===================================================================
RCS file: /home/wine/wine/dlls/uxtheme/uxthemedll.h,v
retrieving revision 1.2
diff -u -r1.2 uxthemedll.h
--- dlls/uxtheme/uxthemedll.h	6 Jan 2004 22:08:33 -0000	1.2
+++ dlls/uxtheme/uxthemedll.h	11 Jan 2004 01:24:23 -0000
@@ -85,6 +85,6 @@
 HRESULT WINAPI ParseThemeIniFile(LPCWSTR pszIniFileName, LPWSTR pszUnknown,
                                  ParseThemeIniFileProc callback, LPVOID lpData);

-extern void UXTHEME_InitSystem(void);
+extern void UXTHEME_InitSystem(HINSTANCE hInst);

 #endif
--- /dev/null	1969-12-31 19:00:00.000000000 -0500
+++ dlls/uxtheme/msstyles.rc	2004-01-10 12:05:52.000000000 -0500
@@ -0,0 +1,1014 @@
+/*
+ * Copyright (C) 2004 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 "windef.h"
+#include "winbase.h"
+#include "tmschema.h"
+
+# define TMT_ENUM 200
+
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+
+/***********************************************************************
+ * Map property names to IDs & primitive types
+ * PrimitiveType,PropertyID,PropertyName
+ */
+MAP_PROPERTY RCDATA
+BEGIN
+TMT_STRING,TMT_STRING,L"STRING\0",
+TMT_INT,TMT_INT,L"INT\0",
+TMT_BOOL,TMT_BOOL,L"BOOL\0",
+TMT_COLOR,TMT_COLOR,L"COLOR\0",
+TMT_MARGINS,TMT_MARGINS,L"MARGINS\0",
+TMT_FILENAME,TMT_FILENAME,L"FILENAME\0",
+TMT_SIZE,TMT_SIZE,L"SIZE\0",
+TMT_POSITION,TMT_POSITION,L"POSITION\0",
+TMT_RECT,TMT_RECT,L"RECT\0",
+TMT_FONT,TMT_FONT,L"FONT\0",
+TMT_INTLIST,TMT_INTLIST,L"INTLIST\0",
+TMT_STRING,TMT_COLORSCHEMES,L"COLORSCHEMES\0",
+TMT_STRING,TMT_SIZES,L"SIZES\0",
+TMT_INT,TMT_CHARSET,L"CHARSET\0",
+TMT_STRING,TMT_DISPLAYNAME,L"DISPLAYNAME\0",
+TMT_STRING,TMT_TOOLTIP,L"TOOLTIP\0",
+TMT_STRING,TMT_COMPANY,L"COMPANY\0",
+TMT_STRING,TMT_AUTHOR,L"AUTHOR\0",
+TMT_STRING,TMT_COPYRIGHT,L"COPYRIGHT\0",
+TMT_STRING,TMT_URL,L"URL\0",
+TMT_STRING,TMT_VERSION,L"VERSION\0",
+TMT_STRING,TMT_DESCRIPTION,L"DESCRIPTION\0",
+TMT_FONT,TMT_CAPTIONFONT,L"CAPTIONFONT\0",
+TMT_FONT,TMT_SMALLCAPTIONFONT,L"SMALLCAPTIONFONT\0",
+TMT_FONT,TMT_MENUFONT,L"MENUFONT\0",
+TMT_FONT,TMT_STATUSFONT,L"STATUSFONT\0",
+TMT_FONT,TMT_MSGBOXFONT,L"MSGBOXFONT\0",
+TMT_FONT,TMT_ICONTITLEFONT,L"ICONTITLEFONT\0",
+TMT_BOOL,TMT_FLATMENUS,L"FLATMENUS\0",
+TMT_SIZE,TMT_SIZINGBORDERWIDTH,L"SIZINGBORDERWIDTH\0",
+TMT_SIZE,TMT_SCROLLBARWIDTH,L"SCROLLBARWIDTH\0",
+TMT_SIZE,TMT_SCROLLBARHEIGHT,L"SCROLLBARHEIGHT\0",
+TMT_SIZE,TMT_CAPTIONBARWIDTH,L"CAPTIONBARWIDTH\0",
+TMT_SIZE,TMT_CAPTIONBARHEIGHT,L"CAPTIONBARHEIGHT\0",
+TMT_SIZE,TMT_SMCAPTIONBARWIDTH,L"SMCAPTIONBARWIDTH\0",
+TMT_SIZE,TMT_SMCAPTIONBARHEIGHT,L"SMCAPTIONBARHEIGHT\0",
+TMT_SIZE,TMT_MENUBARWIDTH,L"MENUBARWIDTH\0",
+TMT_SIZE,TMT_MENUBARHEIGHT,L"MENUBARHEIGHT\0",
+TMT_INT,TMT_MINCOLORDEPTH,L"MINCOLORDEPTH\0",
+TMT_STRING,TMT_CSSNAME,L"CSSNAME\0",
+TMT_STRING,TMT_XMLNAME,L"XMLNAME\0",
+TMT_COLOR,TMT_SCROLLBAR,L"SCROLLBAR\0",
+TMT_COLOR,TMT_BACKGROUND,L"BACKGROUND\0",
+TMT_COLOR,TMT_ACTIVECAPTION,L"ACTIVECAPTION\0",
+TMT_COLOR,TMT_INACTIVECAPTION,L"INACTIVECAPTION\0",
+TMT_COLOR,TMT_MENU,L"MENU\0",
+TMT_COLOR,TMT_WINDOW,L"WINDOW\0",
+TMT_COLOR,TMT_WINDOWFRAME,L"WINDOWFRAME\0",
+TMT_COLOR,TMT_MENUTEXT,L"MENUTEXT\0",
+TMT_COLOR,TMT_WINDOWTEXT,L"WINDOWTEXT\0",
+TMT_COLOR,TMT_CAPTIONTEXT,L"CAPTIONTEXT\0",
+TMT_COLOR,TMT_ACTIVEBORDER,L"ACTIVEBORDER\0",
+TMT_COLOR,TMT_INACTIVEBORDER,L"INACTIVEBORDER\0",
+TMT_COLOR,TMT_APPWORKSPACE,L"APPWORKSPACE\0",
+TMT_COLOR,TMT_HIGHLIGHT,L"HIGHLIGHT\0",
+TMT_COLOR,TMT_HIGHLIGHTTEXT,L"HIGHLIGHTTEXT\0",
+TMT_COLOR,TMT_BTNFACE,L"BTNFACE\0",
+TMT_COLOR,TMT_BTNSHADOW,L"BTNSHADOW\0",
+TMT_COLOR,TMT_GRAYTEXT,L"GRAYTEXT\0",
+TMT_COLOR,TMT_BTNTEXT,L"BTNTEXT\0",
+TMT_COLOR,TMT_INACTIVECAPTIONTEXT,L"INACTIVECAPTIONTEXT\0",
+TMT_COLOR,TMT_BTNHIGHLIGHT,L"BTNHIGHLIGHT\0",
+TMT_COLOR,TMT_DKSHADOW3D,L"DKSHADOW3D\0",
+TMT_COLOR,TMT_LIGHT3D,L"LIGHT3D\0",
+TMT_COLOR,TMT_INFOTEXT,L"INFOTEXT\0",
+TMT_COLOR,TMT_INFOBK,L"INFOBK\0",
+TMT_COLOR,TMT_BUTTONALTERNATEFACE,L"BUTTONALTERNATEFACE\0",
+TMT_COLOR,TMT_HOTTRACKING,L"HOTTRACKING\0",
+TMT_COLOR,TMT_GRADIENTACTIVECAPTION,L"GRADIENTACTIVECAPTION\0",
+TMT_COLOR,TMT_GRADIENTINACTIVECAPTION,L"GRADIENTINACTIVECAPTION\0",
+TMT_COLOR,TMT_MENUHILIGHT,L"MENUHILIGHT\0",
+TMT_COLOR,TMT_MENUBAR,L"MENUBAR\0",
+TMT_INT,TMT_FROMHUE1,L"FROMHUE1\0",
+TMT_INT,TMT_FROMHUE2,L"FROMHUE2\0",
+TMT_INT,TMT_FROMHUE3,L"FROMHUE3\0",
+TMT_INT,TMT_FROMHUE4,L"FROMHUE4\0",
+TMT_INT,TMT_FROMHUE5,L"FROMHUE5\0",
+TMT_INT,TMT_TOHUE1,L"TOHUE1\0",
+TMT_INT,TMT_TOHUE2,L"TOHUE2\0",
+TMT_INT,TMT_TOHUE3,L"TOHUE3\0",
+TMT_INT,TMT_TOHUE4,L"TOHUE4\0",
+TMT_INT,TMT_TOHUE5,L"TOHUE5\0",
+TMT_COLOR,TMT_FROMCOLOR1,L"FROMCOLOR1\0",
+TMT_COLOR,TMT_FROMCOLOR2,L"FROMCOLOR2\0",
+TMT_COLOR,TMT_FROMCOLOR3,L"FROMCOLOR3\0",
+TMT_COLOR,TMT_FROMCOLOR4,L"FROMCOLOR4\0",
+TMT_COLOR,TMT_FROMCOLOR5,L"FROMCOLOR5\0",
+TMT_COLOR,TMT_TOCOLOR1,L"TOCOLOR1\0",
+TMT_COLOR,TMT_TOCOLOR2,L"TOCOLOR2\0",
+TMT_COLOR,TMT_TOCOLOR3,L"TOCOLOR3\0",
+TMT_COLOR,TMT_TOCOLOR4,L"TOCOLOR4\0",
+TMT_COLOR,TMT_TOCOLOR5,L"TOCOLOR5\0",
+TMT_BOOL,TMT_TRANSPARENT,L"TRANSPARENT\0",
+TMT_BOOL,TMT_AUTOSIZE,L"AUTOSIZE\0",
+TMT_BOOL,TMT_BORDERONLY,L"BORDERONLY\0",
+TMT_BOOL,TMT_COMPOSITED,L"COMPOSITED\0",
+TMT_BOOL,TMT_BGFILL,L"BGFILL\0",
+TMT_BOOL,TMT_GLYPHTRANSPARENT,L"GLYPHTRANSPARENT\0",
+TMT_BOOL,TMT_GLYPHONLY,L"GLYPHONLY\0",
+TMT_BOOL,TMT_ALWAYSSHOWSIZINGBAR,L"ALWAYSSHOWSIZINGBAR\0",
+TMT_BOOL,TMT_MIRRORIMAGE,L"MIRRORIMAGE\0",
+TMT_BOOL,TMT_UNIFORMSIZING,L"UNIFORMSIZING\0",
+TMT_BOOL,TMT_INTEGRALSIZING,L"INTEGRALSIZING\0",
+TMT_BOOL,TMT_SOURCEGROW,L"SOURCEGROW\0",
+TMT_BOOL,TMT_SOURCESHRINK,L"SOURCESHRINK\0",
+TMT_INT,TMT_IMAGECOUNT,L"IMAGECOUNT\0",
+TMT_INT,TMT_ALPHALEVEL,L"ALPHALEVEL\0",
+TMT_INT,TMT_BORDERSIZE,L"BORDERSIZE\0",
+TMT_INT,TMT_ROUNDCORNERWIDTH,L"ROUNDCORNERWIDTH\0",
+TMT_INT,TMT_ROUNDCORNERHEIGHT,L"ROUNDCORNERHEIGHT\0",
+TMT_INT,TMT_GRADIENTRATIO1,L"GRADIENTRATIO1\0",
+TMT_INT,TMT_GRADIENTRATIO2,L"GRADIENTRATIO2\0",
+TMT_INT,TMT_GRADIENTRATIO3,L"GRADIENTRATIO3\0",
+TMT_INT,TMT_GRADIENTRATIO4,L"GRADIENTRATIO4\0",
+TMT_INT,TMT_GRADIENTRATIO5,L"GRADIENTRATIO5\0",
+TMT_INT,TMT_PROGRESSCHUNKSIZE,L"PROGRESSCHUNKSIZE\0",
+TMT_INT,TMT_PROGRESSSPACESIZE,L"PROGRESSSPACESIZE\0",
+TMT_INT,TMT_SATURATION,L"SATURATION\0",
+TMT_INT,TMT_TEXTBORDERSIZE,L"TEXTBORDERSIZE\0",
+TMT_INT,TMT_ALPHATHRESHOLD,L"ALPHATHRESHOLD\0",
+TMT_SIZE,TMT_WIDTH,L"WIDTH\0",
+TMT_SIZE,TMT_HEIGHT,L"HEIGHT\0",
+TMT_INT,TMT_GLYPHINDEX,L"GLYPHINDEX\0",
+TMT_INT,TMT_TRUESIZESTRETCHMARK,L"TRUESIZESTRETCHMARK\0",
+TMT_INT,TMT_MINDPI1,L"MINDPI1\0",
+TMT_INT,TMT_MINDPI2,L"MINDPI2\0",
+TMT_INT,TMT_MINDPI3,L"MINDPI3\0",
+TMT_INT,TMT_MINDPI4,L"MINDPI4\0",
+TMT_INT,TMT_MINDPI5,L"MINDPI5\0",
+TMT_FONT,TMT_GLYPHFONT,L"GLYPHFONT\0",
+TMT_FILENAME,TMT_IMAGEFILE,L"IMAGEFILE\0",
+TMT_FILENAME,TMT_IMAGEFILE1,L"IMAGEFILE1\0",
+TMT_FILENAME,TMT_IMAGEFILE2,L"IMAGEFILE2\0",
+TMT_FILENAME,TMT_IMAGEFILE3,L"IMAGEFILE3\0",
+TMT_FILENAME,TMT_IMAGEFILE4,L"IMAGEFILE4\0",
+TMT_FILENAME,TMT_IMAGEFILE5,L"IMAGEFILE5\0",
+TMT_FILENAME,TMT_STOCKIMAGEFILE,L"STOCKIMAGEFILE\0",
+TMT_FILENAME,TMT_GLYPHIMAGEFILE,L"GLYPHIMAGEFILE\0",
+TMT_STRING,TMT_TEXT,L"TEXT\0",
+TMT_POSITION,TMT_OFFSET,L"OFFSET\0",
+TMT_POSITION,TMT_TEXTSHADOWOFFSET,L"TEXTSHADOWOFFSET\0",
+TMT_POSITION,TMT_MINSIZE,L"MINSIZE\0",
+TMT_POSITION,TMT_MINSIZE1,L"MINSIZE1\0",
+TMT_POSITION,TMT_MINSIZE2,L"MINSIZE2\0",
+TMT_POSITION,TMT_MINSIZE3,L"MINSIZE3\0",
+TMT_POSITION,TMT_MINSIZE4,L"MINSIZE4\0",
+TMT_POSITION,TMT_MINSIZE5,L"MINSIZE5\0",
+TMT_POSITION,TMT_NORMALSIZE,L"NORMALSIZE\0",
+TMT_MARGINS,TMT_SIZINGMARGINS,L"SIZINGMARGINS\0",
+TMT_MARGINS,TMT_CONTENTMARGINS,L"CONTENTMARGINS\0",
+TMT_MARGINS,TMT_CAPTIONMARGINS,L"CAPTIONMARGINS\0",
+TMT_COLOR,TMT_BORDERCOLOR,L"BORDERCOLOR\0",
+TMT_COLOR,TMT_FILLCOLOR,L"FILLCOLOR\0",
+TMT_COLOR,TMT_TEXTCOLOR,L"TEXTCOLOR\0",
+TMT_COLOR,TMT_EDGELIGHTCOLOR,L"EDGELIGHTCOLOR\0",
+TMT_COLOR,TMT_EDGEHIGHLIGHTCOLOR,L"EDGEHIGHLIGHTCOLOR\0",
+TMT_COLOR,TMT_EDGESHADOWCOLOR,L"EDGESHADOWCOLOR\0",
+TMT_COLOR,TMT_EDGEDKSHADOWCOLOR,L"EDGEDKSHADOWCOLOR\0",
+TMT_COLOR,TMT_EDGEFILLCOLOR,L"EDGEFILLCOLOR\0",
+TMT_COLOR,TMT_TRANSPARENTCOLOR,L"TRANSPARENTCOLOR\0",
+TMT_COLOR,TMT_GRADIENTCOLOR1,L"GRADIENTCOLOR1\0",
+TMT_COLOR,TMT_GRADIENTCOLOR2,L"GRADIENTCOLOR2\0",
+TMT_COLOR,TMT_GRADIENTCOLOR3,L"GRADIENTCOLOR3\0",
+TMT_COLOR,TMT_GRADIENTCOLOR4,L"GRADIENTCOLOR4\0",
+TMT_COLOR,TMT_GRADIENTCOLOR5,L"GRADIENTCOLOR5\0",
+TMT_COLOR,TMT_SHADOWCOLOR,L"SHADOWCOLOR\0",
+TMT_COLOR,TMT_GLOWCOLOR,L"GLOWCOLOR\0",
+TMT_COLOR,TMT_TEXTBORDERCOLOR,L"TEXTBORDERCOLOR\0",
+TMT_COLOR,TMT_TEXTSHADOWCOLOR,L"TEXTSHADOWCOLOR\0",
+TMT_COLOR,TMT_GLYPHTEXTCOLOR,L"GLYPHTEXTCOLOR\0",
+TMT_COLOR,TMT_GLYPHTRANSPARENTCOLOR,L"GLYPHTRANSPARENTCOLOR\0",
+TMT_COLOR,TMT_FILLCOLORHINT,L"FILLCOLORHINT\0",
+TMT_COLOR,TMT_BORDERCOLORHINT,L"BORDERCOLORHINT\0",
+TMT_COLOR,TMT_ACCENTCOLORHINT,L"ACCENTCOLORHINT\0",
+TMT_ENUM,TMT_BGTYPE,L"BGTYPE\0",
+TMT_ENUM,TMT_BORDERTYPE,L"BORDERTYPE\0",
+TMT_ENUM,TMT_FILLTYPE,L"FILLTYPE\0",
+TMT_ENUM,TMT_SIZINGTYPE,L"SIZINGTYPE\0",
+TMT_ENUM,TMT_HALIGN,L"HALIGN\0",
+TMT_ENUM,TMT_CONTENTALIGNMENT,L"CONTENTALIGNMENT\0",
+TMT_ENUM,TMT_VALIGN,L"VALIGN\0",
+TMT_ENUM,TMT_OFFSETTYPE,L"OFFSETTYPE\0",
+TMT_ENUM,TMT_ICONEFFECT,L"ICONEFFECT\0",
+TMT_ENUM,TMT_TEXTSHADOWTYPE,L"TEXTSHADOWTYPE\0",
+TMT_ENUM,TMT_IMAGELAYOUT,L"IMAGELAYOUT\0",
+TMT_ENUM,TMT_GLYPHTYPE,L"GLYPHTYPE\0",
+TMT_ENUM,TMT_IMAGESELECTTYPE,L"IMAGESELECTTYPE\0",
+TMT_ENUM,TMT_GLYPHFONTSIZINGTYPE,L"GLYPHFONTSIZINGTYPE\0",
+TMT_ENUM,TMT_TRUESIZESCALINGTYPE,L"TRUESIZESCALINGTYPE\0",
+TMT_BOOL,TMT_USERPICTURE,L"USERPICTURE\0",
+TMT_RECT,TMT_DEFAULTPANESIZE,L"DEFAULTPANESIZE\0",
+TMT_COLOR,TMT_BLENDCOLOR,L"BLENDCOLOR\0",
+0,0,L"\0"
+END
+
+/***********************************************************************
+ * Map strings to enumeration values
+ * Enum,Value,ValueName
+ */
+MAP_ENUM RCDATA
+BEGIN
+TMT_BGTYPE,BT_IMAGEFILE,L"IMAGEFILE\0",
+TMT_BGTYPE,BT_BORDERFILL,L"BORDERFILL\0",
+TMT_BGTYPE,BT_NONE,L"NONE\0",
+TMT_IMAGELAYOUT,IL_VERTICAL,L"VERTICAL\0",
+TMT_IMAGELAYOUT,IL_HORIZONTAL,L"HORIZONTAL\0",
+TMT_BORDERTYPE,BT_RECT,L"RECT\0",
+TMT_BORDERTYPE,BT_ROUNDRECT,L"ROUNDRECT\0",
+TMT_BORDERTYPE,BT_ELLIPSE,L"ELLIPSE\0",
+TMT_FILLTYPE,FT_SOLID,L"SOLID\0",
+TMT_FILLTYPE,FT_VERTGRADIENT,L"VERTGRADIENT\0",
+TMT_FILLTYPE,FT_HORZGRADIENT,L"HORZGRADIENT\0",
+TMT_FILLTYPE,FT_RADIALGRADIENT,L"RADIALGRADIENT\0",
+TMT_FILLTYPE,FT_TILEIMAGE,L"TILEIMAGE\0",
+TMT_SIZINGTYPE,ST_TRUESIZE,L"TRUESIZE\0",
+TMT_SIZINGTYPE,ST_STRETCH,L"STRETCH\0",
+TMT_SIZINGTYPE,ST_TILE,L"TILE\0",
+TMT_HALIGN,HA_LEFT,L"LEFT\0",
+TMT_HALIGN,HA_CENTER,L"CENTER\0",
+TMT_HALIGN,HA_RIGHT,L"RIGHT\0",
+TMT_CONTENTALIGNMENT,CA_LEFT,L"LEFT\0",
+TMT_CONTENTALIGNMENT,CA_CENTER,L"CENTER\0",
+TMT_CONTENTALIGNMENT,CA_RIGHT,L"RIGHT\0",
+TMT_VALIGN,VA_TOP,L"TOP\0",
+TMT_VALIGN,VA_CENTER,L"CENTER\0",
+TMT_VALIGN,VA_BOTTOM,L"BOTTOM\0",
+TMT_OFFSETTYPE,OT_TOPLEFT,L"TOPLEFT\0",
+TMT_OFFSETTYPE,OT_TOPRIGHT,L"TOPRIGHT\0",
+TMT_OFFSETTYPE,OT_TOPMIDDLE,L"TOPMIDDLE\0",
+TMT_OFFSETTYPE,OT_BOTTOMLEFT,L"BOTTOMLEFT\0",
+TMT_OFFSETTYPE,OT_BOTTOMRIGHT,L"BOTTOMRIGHT\0",
+TMT_OFFSETTYPE,OT_BOTTOMMIDDLE,L"BOTTOMMIDDLE\0",
+TMT_OFFSETTYPE,OT_MIDDLELEFT,L"MIDDLELEFT\0",
+TMT_OFFSETTYPE,OT_MIDDLERIGHT,L"MIDDLERIGHT\0",
+TMT_OFFSETTYPE,OT_LEFTOFCAPTION,L"LEFTOFCAPTION\0",
+TMT_OFFSETTYPE,OT_RIGHTOFCAPTION,L"RIGHTOFCAPTION\0",
+TMT_OFFSETTYPE,OT_LEFTOFLASTBUTTON,L"LEFTOFLASTBUTTON\0",
+TMT_OFFSETTYPE,OT_RIGHTOFLASTBUTTON,L"RIGHTOFLASTBUTTON\0",
+TMT_OFFSETTYPE,OT_ABOVELASTBUTTON,L"ABOVELASTBUTTON\0",
+TMT_OFFSETTYPE,OT_BELOWLASTBUTTON,L"BELOWLASTBUTTON\0",
+TMT_ICONEFFECT,ICE_NONE,L"NONE\0",
+TMT_ICONEFFECT,ICE_GLOW,L"GLOW\0",
+TMT_ICONEFFECT,ICE_SHADOW,L"SHADOW\0",
+TMT_ICONEFFECT,ICE_PULSE,L"PULSE\0",
+TMT_ICONEFFECT,ICE_ALPHA,L"ALPHA\0",
+TMT_TEXTSHADOWTYPE,TST_NONE,L"NONE\0",
+TMT_TEXTSHADOWTYPE,TST_SINGLE,L"SINGLE\0",
+TMT_TEXTSHADOWTYPE,TST_CONTINUOUS,L"CONTINUOUS\0",
+TMT_GLYPHTYPE,GT_NONE,L"NONE\0",
+TMT_GLYPHTYPE,GT_IMAGEGLYPH,L"IMAGEGLYPH\0",
+TMT_GLYPHTYPE,GT_FONTGLYPH,L"FONTGLYPH\0",
+TMT_IMAGESELECTTYPE,IST_NONE,L"NONE\0",
+TMT_IMAGESELECTTYPE,IST_SIZE,L"SIZE\0",
+TMT_IMAGESELECTTYPE,IST_DPI,L"DPI\0",
+TMT_TRUESIZESCALINGTYPE,TSST_NONE,L"NONE\0",
+TMT_TRUESIZESCALINGTYPE,TSST_SIZE,L"SIZE\0",
+TMT_TRUESIZESCALINGTYPE,TSST_DPI,L"DPI\0",
+TMT_GLYPHFONTSIZINGTYPE,GFST_NONE,L"NONE\0",
+TMT_GLYPHFONTSIZINGTYPE,GFST_SIZE,L"SIZE\0",
+TMT_GLYPHFONTSIZINGTYPE,GFST_DPI,L"DPI\0",
+0,0,L"\0"
+END
+
+/***********************************************************************
+ * Classes defined below
+ * Defined as PartID,StateID,TextName
+ * If StateID == 0 then its a part being defined
+ */
+
+BUTTON RCDATA
+BEGIN
+BP_PUSHBUTTON,0,L"PUSHBUTTON\0",
+BP_PUSHBUTTON,PBS_NORMAL,L"NORMAL\0",
+BP_PUSHBUTTON,PBS_HOT,L"HOT\0",
+BP_PUSHBUTTON,PBS_PRESSED,L"PRESSED\0",
+BP_PUSHBUTTON,PBS_DISABLED,L"DISABLED\0",
+BP_PUSHBUTTON,PBS_DEFAULTED,L"DEFAULTED\0",
+BP_RADIOBUTTON,0,L"RADIOBUTTON\0",
+BP_RADIOBUTTON,RBS_UNCHECKEDNORMAL,L"UNCHECKEDNORMAL\0",
+BP_RADIOBUTTON,RBS_UNCHECEDHOT,L"UNCHECEDHOT\0",
+BP_RADIOBUTTON,RBS_UNCHECKEDPRESSED,L"UNCHECKEDPRESSED\0",
+BP_RADIOBUTTON,RBS_UNCHECKEDDISABLED,L"UNCHECKEDDISABLED\0",
+BP_RADIOBUTTON,RBS_CHECKEDNORMAL,L"CHECKEDNORMAL\0",
+BP_RADIOBUTTON,RBS_CHECKEDHOT,L"CHECKEDHOT\0",
+BP_RADIOBUTTON,RBS_CHECKEDPRESSED,L"CHECKEDPRESSED\0",
+BP_RADIOBUTTON,RBS_CHECKEDDISABLED,L"CHECKEDDISABLED\0",
+BP_CHECKBOX,0,L"CHECKBOX\0",
+BP_RADIOBUTTON,CBS_UNCHECKEDNORMAL,L"UNCHECKEDNORMAL\0",
+BP_RADIOBUTTON,CBS_UNCHECKEDHOT,L"UNCHECKEDHOT\0",
+BP_RADIOBUTTON,CBS_UNCHECKEDPRESSED,L"UNCHECKEDPRESSED\0",
+BP_RADIOBUTTON,CBS_UNCHECKEDDISABLED,L"UNCHECKEDDISABLED\0",
+BP_RADIOBUTTON,CBS_CHECKEDNORMAL,L"CHECKEDNORMAL\0",
+BP_RADIOBUTTON,CBS_CHECKEDHOT,L"CHECKEDHOT\0",
+BP_RADIOBUTTON,CBS_CHECKEDPRESSED,L"CHECKEDPRESSED\0",
+BP_RADIOBUTTON,CBS_CHECKEDDISABLED,L"CHECKEDDISABLED\0",
+BP_RADIOBUTTON,CBS_MIXEDNORMAL,L"MIXEDNORMAL\0",
+BP_RADIOBUTTON,CBS_MIXEDHOT,L"MIXEDHOT\0",
+BP_RADIOBUTTON,CBS_MIXEDPRESSED,L"MIXEDPRESSED\0",
+BP_RADIOBUTTON,CBS_MIXEDDISABLED,L"MIXEDDISABLED\0",
+BP_GROUPBOX,0,L"GROUPBOX\0",
+BP_RADIOBUTTON,GBS_NORMAL,L"NORMAL\0",
+BP_RADIOBUTTON,GBS_DISABLED,L"DISABLED\0",
+BP_USERBUTTON,0,L"USERBUTTON\0",
+0,0,L"\0"
+END
+
+CLOCK RCDATA
+BEGIN
+CLP_TIME,0,L"TIME\0",
+CLP_TIME,CLS_NORMAL,L"NORMAL\0",
+0,0,L"\0"
+END
+
+COMBOBOX RCDATA
+BEGIN
+CP_DROPDOWNBUTTON,0,L"DROPDOWNBUTTON\0",
+CP_DROPDOWNBUTTON,CBXS_NORMAL,L"NORMAL\0",
+CP_DROPDOWNBUTTON,CBXS_HOT,L"HOT\0",
+CP_DROPDOWNBUTTON,CBXS_PRESSED,L"PRESSED\0",
+CP_DROPDOWNBUTTON,CBXS_DISABLED,L"DISABLED\0",
+0,0,L"\0"
+END
+
+EDIT RCDATA
+BEGIN
+EP_EDITTEXT,0,L"EDITTEXT\0",
+EP_EDITTEXT,ETS_NORMAL,L"NORMAL\0",
+EP_EDITTEXT,ETS_HOT,L"HOT\0",
+EP_EDITTEXT,ETS_SELECTED,L"SELECTED\0",
+EP_EDITTEXT,ETS_DISABLED,L"DISABLED\0",
+EP_EDITTEXT,ETS_FOCUSED,L"FOCUSED\0",
+EP_EDITTEXT,ETS_READONLY,L"READONLY\0",
+EP_EDITTEXT,ETS_ASSIST,L"ASSIST\0",
+EP_CARET,0,L"CARET\0",
+0,0,L"\0"
+END
+
+EXPLORERBAR RCDATA
+BEGIN
+EBP_HEADERBACKGROUND,0,L"HEADERBACKGROUND\0",
+EBP_HEADERCLOSE,0,L"HEADERCLOSE\0",
+EBP_HEADERCLOSE,EBHC_NORMAL,L"NORMAL\0",
+EBP_HEADERCLOSE,EBHC_HOT,L"HOT\0",
+EBP_HEADERCLOSE,EBHC_PRESSED,L"PRESSED\0",
+EBP_HEADERPIN,0,L"HEADERPIN\0",
+EBP_HEADERPIN,EBHP_NORMAL,L"NORMAL\0",
+EBP_HEADERPIN,EBHP_HOT,L"HOT\0",
+EBP_HEADERPIN,EBHP_PRESSED,L"PRESSED\0",
+EBP_HEADERPIN,EBHP_SELECTEDNORMAL,L"SELECTEDNORMAL\0",
+EBP_HEADERPIN,EBHP_SELECTEDHOT,L"SELECTEDHOT\0",
+EBP_HEADERPIN,EBHP_SELECTEDPRESSED,L"SELECTEDPRESSED\0",
+EBP_IEBARMENU,0,L"IEBARMENU\0",
+EBP_IEBARMENU,EBM_NORMAL,L"NORMAL\0",
+EBP_IEBARMENU,EBM_HOT,L"HOT\0",
+EBP_IEBARMENU,EBM_PRESSED,L"PRESSED\0",
+EBP_NORMALGROUPBACKGROUND,0,L"NORMALGROUPBACKGROUND\0",
+EBP_NORMALGROUPCOLLAPSE,0,L"NORMALGROUPCOLLAPSE\0",
+EBP_NORMALGROUPCOLLAPSE,EBNGC_NORMAL,L"NORMAL\0",
+EBP_NORMALGROUPCOLLAPSE,EBNGC_HOT,L"HOT\0",
+EBP_NORMALGROUPCOLLAPSE,EBNGC_PRESSED,L"PRESSED\0",
+EBP_NORMALGROUPEXPAND,0,L"NORMALGROUPEXPAND\0",
+EBP_NORMALGROUPEXPAND,EBNGE_NORMAL,L"NORMAL\0",
+EBP_NORMALGROUPEXPAND,EBNGE_HOT,L"HOT\0",
+EBP_NORMALGROUPEXPAND,EBNGE_PRESSED,L"PRESSED\0",
+EBP_NORMALGROUPHEAD,0,L"NORMALGROUPHEAD\0",
+EBP_SPECIALGROUPBACKGROUND,0,L"SPECIALGROUPBACKGROUND\0",
+EBP_SPECIALGROUPCOLLAPSE,0,L"SPECIALGROUPCOLLAPSE\0",
+EBP_SPECIALGROUPCOLLAPSE,EBSGC_NORMAL,L"NORMAL\0",
+EBP_SPECIALGROUPCOLLAPSE,EBSGC_HOT,L"HOT\0",
+EBP_SPECIALGROUPCOLLAPSE,EBSGC_PRESSED,L"PRESSED\0",
+EBP_SPECIALGROUPEXPAND,0,L"SPECIALGROUPEXPAND\0",
+EBP_SPECIALGROUPEXPAND,EBSGE_NORMAL,L"NORMAL\0",
+EBP_SPECIALGROUPEXPAND,EBSGE_HOT,L"HOT\0",
+EBP_SPECIALGROUPEXPAND,EBSGE_PRESSED,L"PRESSED\0",
+EBP_SPECIALGROUPHEAD,0,L"SPECIALGROUPHEAD\0",
+0,0,L"\0"
+END
+
+GLOBALS RCDATA
+BEGIN
+GP_BORDER,0,L"BORDER\0",
+GP_BORDER,BSS_FLAT,L"FLAT\0",
+GP_BORDER,BSS_RAISED,L"RAISED\0",
+GP_BORDER,BSS_SUNKEN,L"SUNKEN\0",
+GP_LINEHORZ,0,L"LINEHORZ\0",
+GP_LINEHORZ,LHS_FLAT,L"FLAT\0",
+GP_LINEHORZ,LHS_RAISED,L"RAISED\0",
+GP_LINEHORZ,LHS_SUNKEN,L"SUNKEN\0",
+GP_LINEVERT,0,L"LINEVERT\0",
+GP_LINEVERT,LVS_FLAT,L"FLAT\0",
+GP_LINEVERT,LVS_RAISED,L"RAISED\0",
+GP_LINEVERT,LVS_SUNKEN,L"SUNKEN\0",
+0,0,L"\0"
+END
+
+HEADER RCDATA
+BEGIN
+HP_HEADERITEM,0,L"HEADERITEM\0",
+HP_HEADERITEM,HIS_NORMAL,L"NORMAL\0",
+HP_HEADERITEM,HIS_HOT,L"HOT\0",
+HP_HEADERITEM,HIS_PRESSED,L"PRESSED\0",
+HP_HEADERITEMLEFT,0,L"HEADERITEMLEFT\0",
+HP_HEADERITEMLEFT,HILS_NORMAL,L"NORMAL\0",
+HP_HEADERITEMLEFT,HILS_HOT,L"HOT\0",
+HP_HEADERITEMLEFT,HILS_PRESSED,L"PRESSED\0",
+HP_HEADERITEMRIGHT,0,L"HEADERITEMRIGHT\0",
+HP_HEADERITEMRIGHT,HIRS_NORMAL,L"NORMAL\0",
+HP_HEADERITEMRIGHT,HIRS_HOT,L"HOT\0",
+HP_HEADERITEMRIGHT,HIRS_PRESSED,L"PRESSED\0",
+HP_HEADERSORTARROW,0,L"HEADERSORTARROW\0",
+HP_HEADERSORTARROW,HSAS_NORMAL,L"NORMAL\0",
+HP_HEADERSORTARROW,HSAS_HOT,L"HOT\0",
+HP_HEADERSORTARROW,HSAS_PRESSED,L"PRESSED\0",
+0,0,L"\0"
+END
+
+LISTVIEW RCDATA
+BEGIN
+LVP_LISTITEM,0,L"LISTITEM\0",
+LVP_LISTITEM,LIS_NORMAL,L"NORMAL\0",
+LVP_LISTITEM,LIS_HOT,L"HOT\0",
+LVP_LISTITEM,LIS_SELECTED,L"SELECTED\0",
+LVP_LISTITEM,LIS_DISABLED,L"DISABLED\0",
+LVP_LISTITEM,LIS_SELECTEDNOTFOCUS,L"SELECTEDNOTFOCUS\0",
+LVP_LISTGROUP,0,L"LISTGROUP\0",
+LVP_LISTDETAIL,0,L"LISTDETAIL\0",
+LVP_LISTSORTEDDETAIL,0,L"LISTSORTEDDETAIL\0",
+LVP_EMPTYTEXT,0,L"EMPTYTEXT\0",
+0,0,L"\0"
+END
+
+MENU RCDATA
+BEGIN
+MP_MENUITEM,0,L"MENUITEM\0",
+MP_MENUITEM,MS_NORMAL,L"NORMAL\0",
+MP_MENUITEM,MS_SELECTED,L"SELECTED\0",
+MP_MENUITEM,MS_DEMOTED,L"DEMOTED\0",
+MP_MENUDROPDOWN,0,L"MENUDROPDOWN\0",
+MP_MENUDROPDOWN,MS_NORMAL,L"NORMAL\0",
+MP_MENUDROPDOWN,MS_SELECTED,L"SELECTED\0",
+MP_MENUDROPDOWN,MS_DEMOTED,L"DEMOTED\0",
+MP_MENUBARITEM,0,L"MENUBARITEM\0",
+MP_MENUBARITEM,MS_NORMAL,L"NORMAL\0",
+MP_MENUBARITEM,MS_SELECTED,L"SELECTED\0",
+MP_MENUBARITEM,MS_DEMOTED,L"DEMOTED\0",
+MP_MENUBARDROPDOWN,0,L"MENUBARDROPDOWN\0",
+MP_MENUBARDROPDOWN,MS_NORMAL,L"NORMAL\0",
+MP_MENUBARDROPDOWN,MS_SELECTED,L"SELECTED\0",
+MP_MENUBARDROPDOWN,MS_DEMOTED,L"DEMOTED\0",
+MP_CHEVRON,0,L"CHEVRON\0",
+MP_CHEVRON,MS_NORMAL,L"NORMAL\0",
+MP_CHEVRON,MS_SELECTED,L"SELECTED\0",
+MP_CHEVRON,MS_DEMOTED,L"DEMOTED\0",
+MP_SEPARATOR,0,L"SEPARATOR\0",
+MP_SEPARATOR,MS_NORMAL,L"NORMAL\0",
+MP_SEPARATOR,MS_SELECTED,L"SELECTED\0",
+MP_SEPARATOR,MS_DEMOTED,L"DEMOTED\0",
+0,0,L"\0"
+END
+
+MENUBAND RCDATA
+BEGIN
+MDP_NEWAPPBUTTON,0,L"NEWAPPBUTTON\0",
+MDP_NEWAPPBUTTON,MDS_NORMAL,L"NORMAL\0",
+MDP_NEWAPPBUTTON,MDS_HOT,L"HOT\0",
+MDP_NEWAPPBUTTON,MDS_PRESSED,L"PRESSED\0",
+MDP_NEWAPPBUTTON,MDS_DISABLED,L"DISABLED\0",
+MDP_NEWAPPBUTTON,MDS_CHECKED,L"CHECKED\0",
+MDP_NEWAPPBUTTON,MDS_HOTCHECKED,L"HOTCHECKED\0",
+MDP_SEPERATOR,0,L"SEPERATOR\0",
+0,0,L"\0"
+END
+
+PAGE RCDATA
+BEGIN
+PGRP_UP,0,L"UP\0",
+PGRP_UP,UPS_NORMAL,L"NORMAL\0",
+PGRP_UP,UPS_HOT,L"HOT\0",
+PGRP_UP,UPS_PRESSED,L"PRESSED\0",
+PGRP_UP,UPS_DISABLED,L"DISABLED\0",
+PGRP_DOWN,0,L"DOWN\0",
+PGRP_DOWN,DNS_NORMAL,L"NORMAL\0",
+PGRP_DOWN,DNS_HOT,L"HOT\0",
+PGRP_DOWN,DNS_PRESSED,L"PRESSED\0",
+PGRP_DOWN,DNS_DISABLED,L"DISABLED\0",
+PGRP_UPHORZ,0,L"UPHORZ\0",
+PGRP_UPHORZ,UPHZS_NORMAL,L"NORMAL\0",
+PGRP_UPHORZ,UPHZS_HOT,L"HOT\0",
+PGRP_UPHORZ,UPHZS_PRESSED,L"PRESSED\0",
+PGRP_UPHORZ,UPHZS_DISABLED,L"DISABLED\0",
+PGRP_DOWNHORZ,0,L"DOWNHORZ\0",
+PGRP_DOWNHORZ,DNHZS_NORMAL,L"NORMAL\0",
+PGRP_DOWNHORZ,DNHZS_HOT,L"HOT\0",
+PGRP_DOWNHORZ,DNHZS_PRESSED,L"PRESSED\0",
+PGRP_DOWNHORZ,DNHZS_DISABLED,L"DISABLED\0",
+0,0,L"\0"
+END
+
+PROGRESS RCDATA
+BEGIN
+PP_BAR,0,L"BAR\0",
+PP_BARVERT,0,L"BARVERT\0",
+PP_CHUNK,0,L"CHUNK\0",
+PP_CHUNKVERT,0,L"CHUNKVERT\0",
+0,0,L"\0"
+END
+
+REBAR RCDATA
+BEGIN
+RP_GRIPPER,0,L"GRIPPER\0",
+RP_GRIPPERVERT,0,L"GRIPPERVERT\0",
+RP_BAND,0,L"BAND\0",
+RP_CHEVRON,0,L"CHEVRON\0",
+RP_CHEVRON,CHEVS_NORMAL,L"NORMAL\0",
+RP_CHEVRON,CHEVS_HOT,L"HOT\0",
+RP_CHEVRON,CHEVS_PRESSED,L"PRESSED\0",
+RP_CHEVRONVERT,0,L"CHEVRONVERT\0",
+0,0,L"\0"
+END
+
+SCROLLBAR RCDATA
+BEGIN
+SBP_ARROWBTN,0,L"ARROWBTN\0",
+SBP_ARROWBTN,ABS_UPNORMAL,L"UPNORMAL\0",
+SBP_ARROWBTN,ABS_UPHOT,L"UPHOT\0",
+SBP_ARROWBTN,ABS_UPPRESSED,L"UPPRESSED\0",
+SBP_ARROWBTN,ABS_UPDISABLED,L"UPDISABLED\0",
+SBP_ARROWBTN,ABS_DOWNNORMAL,L"DOWNNORMAL\0",
+SBP_ARROWBTN,ABS_DOWNHOT,L"DOWNHOT\0",
+SBP_ARROWBTN,ABS_DOWNPRESSED,L"DOWNPRESSED\0",
+SBP_ARROWBTN,ABS_DOWNDISABLED,L"DOWNDISABLED\0",
+SBP_ARROWBTN,ABS_LEFTNORMAL,L"LEFTNORMAL\0",
+SBP_ARROWBTN,ABS_LEFTHOT,L"LEFTHOT\0",
+SBP_ARROWBTN,ABS_LEFTPRESSED,L"LEFTPRESSED\0",
+SBP_ARROWBTN,ABS_LEFTDISABLED,L"LEFTDISABLED\0",
+SBP_ARROWBTN,ABS_RIGHTNORMAL,L"RIGHTNORMAL\0",
+SBP_ARROWBTN,ABS_RIGHTHOT,L"RIGHTHOT\0",
+SBP_ARROWBTN,ABS_RIGHTPRESSED,L"RIGHTPRESSED\0",
+SBP_ARROWBTN,ABS_RIGHTDISABLED,L"RIGHTDISABLED\0",
+SBP_THUMBBTNHORZ,0,L"THUMBBTNHORZ\0",
+SBP_THUMBBTNHORZ,SCRBS_NORMAL,L"NORMAL\0",
+SBP_THUMBBTNHORZ,SCRBS_HOT,L"HOT\0",
+SBP_THUMBBTNHORZ,SCRBS_PRESSED,L"PRESSED\0",
+SBP_THUMBBTNHORZ,SCRBS_DISABLED,L"DISABLED\0",
+SBP_THUMBBTNVERT,0,L"THUMBBTNVERT\0",
+SBP_THUMBBTNVERT,SCRBS_NORMAL,L"NORMAL\0",
+SBP_THUMBBTNVERT,SCRBS_HOT,L"HOT\0",
+SBP_THUMBBTNVERT,SCRBS_PRESSED,L"PRESSED\0",
+SBP_THUMBBTNVERT,SCRBS_DISABLED,L"DISABLED\0",
+SBP_LOWERTRACKHORZ,0,L"LOWERTRACKHORZ\0",
+SBP_LOWERTRACKHORZ,SCRBS_NORMAL,L"NORMAL\0",
+SBP_LOWERTRACKHORZ,SCRBS_HOT,L"HOT\0",
+SBP_LOWERTRACKHORZ,SCRBS_PRESSED,L"PRESSED\0",
+SBP_LOWERTRACKHORZ,SCRBS_DISABLED,L"DISABLED\0",
+SBP_UPPERTRACKHORZ,0,L"UPPERTRACKHORZ\0",
+SBP_UPPERTRACKHORZ,SCRBS_NORMAL,L"NORMAL\0",
+SBP_UPPERTRACKHORZ,SCRBS_HOT,L"HOT\0",
+SBP_UPPERTRACKHORZ,SCRBS_PRESSED,L"PRESSED\0",
+SBP_UPPERTRACKHORZ,SCRBS_DISABLED,L"DISABLED\0",
+SBP_LOWERTRACKVERT,0,L"LOWERTRACKVERT\0",
+SBP_LOWERTRACKVERT,SCRBS_NORMAL,L"NORMAL\0",
+SBP_LOWERTRACKVERT,SCRBS_HOT,L"HOT\0",
+SBP_LOWERTRACKVERT,SCRBS_PRESSED,L"PRESSED\0",
+SBP_LOWERTRACKVERT,SCRBS_DISABLED,L"DISABLED\0",
+SBP_UPPERTRACKVERT,0,L"UPPERTRACKVERT\0",
+SBP_UPPERTRACKVERT,SCRBS_NORMAL,L"NORMAL\0",
+SBP_UPPERTRACKVERT,SCRBS_HOT,L"HOT\0",
+SBP_UPPERTRACKVERT,SCRBS_PRESSED,L"PRESSED\0",
+SBP_UPPERTRACKVERT,SCRBS_DISABLED,L"DISABLED\0",
+SBP_GRIPPERHORZ,0,L"GRIPPERHORZ\0",
+SBP_GRIPPERVERT,0,L"GRIPPERVERT\0",
+SBP_SIZEBOX,0,L"SIZEBOX\0",
+SBP_SIZEBOX,SZB_RIGHTALIGN,L"RIGHTALIGN\0",
+SBP_SIZEBOX,SZB_LEFTALIGN,L"LEFTALIGN\0",
+0,0,L"\0"
+END
+
+SPIN RCDATA
+BEGIN
+SPNP_UP,0,L"UP\0",
+SPNP_UP,UPS_NORMAL,L"NORMAL\0",
+SPNP_UP,UPS_HOT,L"HOT\0",
+SPNP_UP,UPS_PRESSED,L"PRESSED\0",
+SPNP_UP,UPS_DISABLED,L"DISABLED\0",
+SPNP_DOWN,0,L"DOWN\0",
+SPNP_DOWN,DNS_NORMAL,L"NORMAL\0",
+SPNP_DOWN,DNS_HOT,L"HOT\0",
+SPNP_DOWN,DNS_PRESSED,L"PRESSED\0",
+SPNP_DOWN,DNS_DISABLED,L"DISABLED\0",
+SPNP_UPHORZ,0,L"UPHORZ\0",
+SPNP_UPHORZ,UPHZS_NORMAL,L"NORMAL\0",
+SPNP_UPHORZ,UPHZS_HOT,L"HOT\0",
+SPNP_UPHORZ,UPHZS_PRESSED,L"PRESSED\0",
+SPNP_UPHORZ,UPHZS_DISABLED,L"DISABLED\0",
+SPNP_DOWNHORZ,0,L"DOWNHORZ\0",
+SPNP_DOWNHORZ,DNHZS_NORMAL,L"NORMAL\0",
+SPNP_DOWNHORZ,DNHZS_HOT,L"HOT\0",
+SPNP_DOWNHORZ,DNHZS_PRESSED,L"PRESSED\0",
+SPNP_DOWNHORZ,DNHZS_DISABLED,L"DISABLED\0",
+0,0,L"\0"
+END
+
+STARTPANEL RCDATA
+BEGIN
+SPP_USERPANE,0,L"USERPANE\0",
+SPP_MOREPROGRAMS,0,L"MOREPROGRAMS\0",
+SPP_MOREPROGRAMSARROW,0,L"MOREPROGRAMSARROW\0",
+SPP_MOREPROGRAMSARROW,SPS_NORMAL,L"NORMAL\0",
+SPP_MOREPROGRAMSARROW,SPS_HOT,L"HOT\0",
+SPP_MOREPROGRAMSARROW,SPS_PRESSED,L"PRESSED\0",
+SPP_PROGLIST,0,L"PROGLIST\0",
+SPP_PROGLISTSEPARATOR,0,L"PROGLISTSEPARATOR\0",
+SPP_PLACESLIST,0,L"PLACESLIST\0",
+SPP_PLACESLISTSEPARATOR,0,L"PLACESLISTSEPARATOR\0",
+SPP_LOGOFF,0,L"LOGOFF\0",
+SPP_LOGOFFBUTTONS,0,L"LOGOFFBUTTONS\0",
+SPP_LOGOFFBUTTONS,SPLS_NORMAL,L"NORMAL\0",
+SPP_LOGOFFBUTTONS,SPLS_HOT,L"HOT\0",
+SPP_LOGOFFBUTTONS,SPLS_PRESSED,L"PRESSED\0",
+SPP_USERPICTURE,0,L"USERPICTURE\0",
+SPP_PREVIEW,0,L"PREVIEW\0",
+0,0,L"\0"
+END
+
+STATUS RCDATA
+BEGIN
+SP_PANE,0,L"PANE\0",
+SP_GRIPPERPANE,0,L"GRIPPERPANE\0",
+SP_GRIPPER,0,L"GRIPPER\0",
+0,0,L"\0"
+END
+
+TAB RCDATA
+BEGIN
+TABP_TABITEM,0,L"TABITEM\0",
+TABP_TABITEM,TIS_NORMAL,L"NORMAL\0",
+TABP_TABITEM,TIS_HOT,L"HOT\0",
+TABP_TABITEM,TIS_SELECTED,L"SELECTED\0",
+TABP_TABITEM,TIS_DISABLED,L"DISABLED\0",
+TABP_TABITEM,TIS_FOCUSED,L"FOCUSED\0",
+TABP_TABITEMLEFTEDGE,0,L"TABITEMLEFTEDGE\0",
+TABP_TABITEMLEFTEDGE,TILES_NORMAL,L"NORMAL\0",
+TABP_TABITEMLEFTEDGE,TILES_HOT,L"HOT\0",
+TABP_TABITEMLEFTEDGE,TILES_SELECTED,L"SELECTED\0",
+TABP_TABITEMLEFTEDGE,TILES_DISABLED,L"DISABLED\0",
+TABP_TABITEMLEFTEDGE,TILES_FOCUSED,L"FOCUSED\0",
+TABP_TABITEMRIGHTEDGE,0,L"TABITEMRIGHTEDGE\0",
+TABP_TABITEMRIGHTEDGE,TIRES_NORMAL,L"NORMAL\0",
+TABP_TABITEMRIGHTEDGE,TIRES_HOT,L"HOT\0",
+TABP_TABITEMRIGHTEDGE,TIRES_SELECTED,L"SELECTED\0",
+TABP_TABITEMRIGHTEDGE,TIRES_DISABLED,L"DISABLED\0",
+TABP_TABITEMRIGHTEDGE,TIRES_FOCUSED,L"FOCUSED\0",
+TABP_TABITEMBOTHEDGE,0,L"TABITEMBOTHEDGE\0",
+TABP_TABITEMBOTHEDGE,TIBES_NORMAL,L"NORMAL\0",
+TABP_TABITEMBOTHEDGE,TIBES_HOT,L"HOT\0",
+TABP_TABITEMBOTHEDGE,TIBES_SELECTED,L"SELECTED\0",
+TABP_TABITEMBOTHEDGE,TIBES_DISABLED,L"DISABLED\0",
+TABP_TABITEMBOTHEDGE,TIBES_FOCUSED,L"FOCUSED\0",
+TABP_TOPTABITEM,0,L"TOPTABITEM\0",
+TABP_TOPTABITEM,TTIS_NORMAL,L"NORMAL\0",
+TABP_TOPTABITEM,TTIS_HOT,L"HOT\0",
+TABP_TOPTABITEM,TTIS_SELECTED,L"SELECTED\0",
+TABP_TOPTABITEM,TTIS_DISABLED,L"DISABLED\0",
+TABP_TOPTABITEM,TTIS_FOCUSED,L"FOCUSED\0",
+TABP_TOPTABITEMLEFTEDGE,0,L"TOPTABITEMLEFTEDGE\0",
+TABP_TOPTABITEMLEFTEDGE,TTILES_NORMAL,L"NORMAL\0",
+TABP_TOPTABITEMLEFTEDGE,TTILES_HOT,L"HOT\0",
+TABP_TOPTABITEMLEFTEDGE,TTILES_SELECTED,L"SELECTED\0",
+TABP_TOPTABITEMLEFTEDGE,TTILES_DISABLED,L"DISABLED\0",
+TABP_TOPTABITEMLEFTEDGE,TTILES_FOCUSED,L"FOCUSED\0",
+TABP_TOPTABITEMRIGHTEDGE,0,L"TOPTABITEMRIGHTEDGE\0",
+TABP_TOPTABITEMRIGHTEDGE,TTIRES_NORMAL,L"NORMAL\0",
+TABP_TOPTABITEMRIGHTEDGE,TTIRES_HOT,L"HOT\0",
+TABP_TOPTABITEMRIGHTEDGE,TTIRES_SELECTED,L"SELECTED\0",
+TABP_TOPTABITEMRIGHTEDGE,TTIRES_DISABLED,L"DISABLED\0",
+TABP_TOPTABITEMRIGHTEDGE,TTIRES_FOCUSED,L"FOCUSED\0",
+TABP_TOPTABITEMBOTHEDGE,0,L"TOPTABITEMBOTHEDGE\0",
+TABP_TOPTABITEMBOTHEDGE,TTIBES_NORMAL,L"NORMAL\0",
+TABP_TOPTABITEMBOTHEDGE,TTIBES_HOT,L"HOT\0",
+TABP_TOPTABITEMBOTHEDGE,TTIBES_SELECTED,L"SELECTED\0",
+TABP_TOPTABITEMBOTHEDGE,TTIBES_DISABLED,L"DISABLED\0",
+TABP_TOPTABITEMBOTHEDGE,TTIBES_FOCUSED,L"FOCUSED\0",
+TABP_PANE,0,L"PANE\0",
+TABP_BODY,0,L"BODY\0",
+0,0,L"\0"
+END
+
+TASKBAND RCDATA
+BEGIN
+TDP_GROUPCOUNT,0,L"GROUPCOUNT\0",
+TDP_FLASHBUTTON,0,L"FLASHBUTTON\0",
+TDP_FLASHBUTTONGROUPMENU,0,L"FLASHBUTTONGROUPMENU\0",
+0,0,L"\0"
+END
+
+TASKBAR RCDATA
+BEGIN
+TBP_BACKGROUNDBOTTOM,0,L"BACKGROUNDBOTTOM\0",
+TBP_BACKGROUNDRIGHT,0,L"BACKGROUNDRIGHT\0",
+TBP_BACKGROUNDTOP,0,L"BACKGROUNDTOP\0",
+TBP_BACKGROUNDLEFT,0,L"BACKGROUNDLEFT\0",
+TBP_SIZINGBARBOTTOM,0,L"SIZINGBARBOTTOM\0",
+TBP_SIZINGBARRIGHT,0,L"SIZINGBARRIGHT\0",
+TBP_SIZINGBARTOP,0,L"SIZINGBARTOP\0",
+TBP_SIZINGBARLEFT,0,L"SIZINGBARLEFT\0",
+0,0,L"\0"
+END
+
+TOOLBAR RCDATA
+BEGIN
+TP_BUTTON,0,L"BUTTON\0",
+TP_BUTTON,TS_NORMAL,L"NORMAL\0",
+TP_BUTTON,TS_HOT,L"HOT\0",
+TP_BUTTON,TS_PRESSED,L"PRESSED\0",
+TP_BUTTON,TS_DISABLED,L"DISABLED\0",
+TP_BUTTON,TS_CHECKED,L"CHECKED\0",
+TP_BUTTON,TS_HOTCHECKED,L"HOTCHECKED\0",
+TP_DROPDOWNBUTTON,0,L"DROPDOWNBUTTON\0",
+TP_DROPDOWNBUTTON,TS_NORMAL,L"NORMAL\0",
+TP_DROPDOWNBUTTON,TS_HOT,L"HOT\0",
+TP_DROPDOWNBUTTON,TS_PRESSED,L"PRESSED\0",
+TP_DROPDOWNBUTTON,TS_DISABLED,L"DISABLED\0",
+TP_DROPDOWNBUTTON,TS_CHECKED,L"CHECKED\0",
+TP_DROPDOWNBUTTON,TS_HOTCHECKED,L"HOTCHECKED\0",
+TP_SPLITBUTTON,0,L"SPLITBUTTON\0",
+TP_SPLITBUTTON,TS_NORMAL,L"NORMAL\0",
+TP_SPLITBUTTON,TS_HOT,L"HOT\0",
+TP_SPLITBUTTON,TS_PRESSED,L"PRESSED\0",
+TP_SPLITBUTTON,TS_DISABLED,L"DISABLED\0",
+TP_SPLITBUTTON,TS_CHECKED,L"CHECKED\0",
+TP_SPLITBUTTON,TS_HOTCHECKED,L"HOTCHECKED\0",
+TP_SPLITBUTTONDROPDOWN,0,L"SPLITBUTTONDROPDOWN\0",
+TP_SPLITBUTTONDROPDOWN,TS_NORMAL,L"NORMAL\0",
+TP_SPLITBUTTONDROPDOWN,TS_HOT,L"HOT\0",
+TP_SPLITBUTTONDROPDOWN,TS_PRESSED,L"PRESSED\0",
+TP_SPLITBUTTONDROPDOWN,TS_DISABLED,L"DISABLED\0",
+TP_SPLITBUTTONDROPDOWN,TS_CHECKED,L"CHECKED\0",
+TP_SPLITBUTTONDROPDOWN,TS_HOTCHECKED,L"HOTCHECKED\0",
+TP_SEPARATOR,0,L"SEPARATOR\0",
+TP_SEPARATOR,TS_NORMAL,L"NORMAL\0",
+TP_SEPARATOR,TS_HOT,L"HOT\0",
+TP_SEPARATOR,TS_PRESSED,L"PRESSED\0",
+TP_SEPARATOR,TS_DISABLED,L"DISABLED\0",
+TP_SEPARATOR,TS_CHECKED,L"CHECKED\0",
+TP_SEPARATOR,TS_HOTCHECKED,L"HOTCHECKED\0",
+TP_SEPARATORVERT,0,L"SEPARATORVERT\0",
+TP_SEPARATORVERT,TS_NORMAL,L"NORMAL\0",
+TP_SEPARATORVERT,TS_HOT,L"HOT\0",
+TP_SEPARATORVERT,TS_PRESSED,L"PRESSED\0",
+TP_SEPARATORVERT,TS_DISABLED,L"DISABLED\0",
+TP_SEPARATORVERT,TS_CHECKED,L"CHECKED\0",
+TP_SEPARATORVERT,TS_HOTCHECKED,L"HOTCHECKED\0",
+0,0,L"\0"
+END
+
+TOOLTIP RCDATA
+BEGIN
+TTP_STANDARD,0,L"STANDARD\0",
+TTP_STANDARD,TTSS_NORMAL,L"NORMAL\0",
+TTP_STANDARD,TTSS_LINK,L"LINK\0",
+TTP_STANDARDTITLE,0,L"STANDARDTITLE\0",
+TTP_STANDARDTITLE,TTSS_NORMAL,L"NORMAL\0",
+TTP_STANDARDTITLE,TTSS_LINK,L"LINK\0",
+TTP_BALLOON,0,L"BALLOON\0",
+TTP_BALLOON,TTBS_NORMAL,L"NORMAL\0",
+TTP_BALLOON,TTBS_LINK,L"LINK\0",
+TTP_BALLOONTITLE,0,L"BALLOONTITLE\0",
+TTP_BALLOONTITLE,TTBS_NORMAL,L"NORMAL\0",
+TTP_BALLOONTITLE,TTBS_LINK,L"LINK\0",
+TTP_CLOSE,0,L"CLOSE\0",
+TTP_CLOSE,TTCS_NORMAL,L"NORMAL\0",
+TTP_CLOSE,TTCS_HOT,L"HOT\0",
+TTP_CLOSE,TTCS_PRESSED,L"PRESSED\0",
+0,0,L"\0"
+END
+
+TRACKBAR RCDATA
+BEGIN
+TKP_TRACK,0,L"TRACK\0",
+TKP_TRACK,TRS_NORMAL,L"NORMAL\0",
+TKP_TRACKVERT,0,L"TRACKVERT\0",
+TKP_TRACKVERT,TRVS_NORMAL,L"NORMAL\0",
+TKP_THUMB,0,L"THUMB\0",
+TKP_THUMB,TUS_NORMAL,L"NORMAL\0",
+TKP_THUMB,TUS_HOT,L"HOT\0",
+TKP_THUMB,TUS_PRESSED,L"PRESSED\0",
+TKP_THUMB,TUS_FOCUSED,L"FOCUSED\0",
+TKP_THUMB,TUS_DISABLED,L"DISABLED\0",
+TKP_THUMBBOTTOM,0,L"THUMBBOTTOM\0",
+TKP_THUMBBOTTOM,TUBS_NORMAL,L"NORMAL\0",
+TKP_THUMBBOTTOM,TUBS_HOT,L"HOT\0",
+TKP_THUMBBOTTOM,TUBS_PRESSED,L"PRESSED\0",
+TKP_THUMBBOTTOM,TUBS_FOCUSED,L"FOCUSED\0",
+TKP_THUMBBOTTOM,TUBS_DISABLED,L"DISABLED\0",
+TKP_THUMBTOP,0,L"THUMBTOP\0",
+TKP_THUMBTOP,TUTS_NORMAL,L"NORMAL\0",
+TKP_THUMBTOP,TUTS_HOT,L"HOT\0",
+TKP_THUMBTOP,TUTS_PRESSED,L"PRESSED\0",
+TKP_THUMBTOP,TUTS_FOCUSED,L"FOCUSED\0",
+TKP_THUMBTOP,TUTS_DISABLED,L"DISABLED\0",
+TKP_THUMBVERT,0,L"THUMBVERT\0",
+TKP_THUMBVERT,TUVS_NORMAL,L"NORMAL\0",
+TKP_THUMBVERT,TUVS_HOT,L"HOT\0",
+TKP_THUMBVERT,TUVS_PRESSED,L"PRESSED\0",
+TKP_THUMBVERT,TUVS_FOCUSED,L"FOCUSED\0",
+TKP_THUMBVERT,TUVS_DISABLED,L"DISABLED\0",
+TKP_THUMBLEFT,0,L"THUMBLEFT\0",
+TKP_THUMBLEFT,TUVLS_NORMAL,L"NORMAL\0",
+TKP_THUMBLEFT,TUVLS_HOT,L"HOT\0",
+TKP_THUMBLEFT,TUVLS_PRESSED,L"PRESSED\0",
+TKP_THUMBLEFT,TUVLS_FOCUSED,L"FOCUSED\0",
+TKP_THUMBLEFT,TUVLS_DISABLED,L"DISABLED\0",
+TKP_THUMBRIGHT,0,L"THUMBRIGHT\0",
+TKP_THUMBRIGHT,TUVRS_NORMAL,L"NORMAL\0",
+TKP_THUMBRIGHT,TUVRS_HOT,L"HOT\0",
+TKP_THUMBRIGHT,TUVRS_PRESSED,L"PRESSED\0",
+TKP_THUMBRIGHT,TUVRS_FOCUSED,L"FOCUSED\0",
+TKP_THUMBRIGHT,TUVRS_DISABLED,L"DISABLED\0",
+TKP_TICS,0,L"TICS\0",
+TKP_TICS,TSS_NORMAL,L"NORMAL\0",
+TKP_TICSVERT,0,L"TICSVERT\0",
+TKP_TICSVERT,TSVS_NORMAL,L"NORMAL\0",
+0,0,L"\0"
+END
+
+TRAYNOTIFY RCDATA
+BEGIN
+TNP_BACKGROUND,0,L"BACKGROUND\0",
+TNP_ANIMBACKGROUND,0,L"ANIMBACKGROUND\0",
+0,0,L"\0"
+END
+
+TREEVIEW RCDATA
+BEGIN
+TVP_TREEITEM,0,L"TREEITEM\0",
+TVP_TREEITEM,TREIS_NORMAL,L"NORMAL\0",
+TVP_TREEITEM,TREIS_HOT,L"HOT\0",
+TVP_TREEITEM,TREIS_SELECTED,L"SELECTED\0",
+TVP_TREEITEM,TREIS_DISABLED,L"DISABLED\0",
+TVP_TREEITEM,TREIS_SELECTEDNOTFOCUS,L"SELECTEDNOTFOCUS\0",
+TVP_GLYPH,0,L"GLYPH\0",
+TVP_GLYPH,GLPS_CLOSED,L"CLOSED\0",
+TVP_GLYPH,GLPS_OPENED,L"OPENED\0",
+TVP_BRANCH,0,L"BRANCH\0",
+0,0,L"\0"
+END
+
+WINDOW RCDATA
+BEGIN
+WP_CAPTION,0,L"CAPTION\0",
+WP_CAPTION,CS_ACTIVE,L"ACTIVE\0",
+WP_CAPTION,CS_INACTIVE,L"INACTIVE\0",
+WP_CAPTION,CS_DISABLED,L"DISABLED\0",
+WP_SMALLCAPTION,0,L"SMALLCAPTION\0",
+WP_SMALLCAPTION,CS_ACTIVE,L"ACTIVE\0",
+WP_SMALLCAPTION,CS_INACTIVE,L"INACTIVE\0",
+WP_SMALLCAPTION,CS_DISABLED,L"DISABLED\0",
+WP_MINCAPTION,0,L"MINCAPTION\0",
+WP_MINCAPTION,MNCS_ACTIVE,L"ACTIVE\0",
+WP_MINCAPTION,MNCS_INACTIVE,L"INACTIVE\0",
+WP_MINCAPTION,MNCS_DISABLED,L"DISABLED\0",
+WP_SMALLMINCAPTION,0,L"SMALLMINCAPTION\0",
+WP_SMALLMINCAPTION,MNCS_ACTIVE,L"ACTIVE\0",
+WP_SMALLMINCAPTION,MNCS_INACTIVE,L"INACTIVE\0",
+WP_SMALLMINCAPTION,MNCS_DISABLED,L"DISABLED\0",
+WP_MAXCAPTION,0,L"MAXCAPTION\0",
+WP_MAXCAPTION,MXCS_ACTIVE,L"ACTIVE\0",
+WP_MAXCAPTION,MXCS_INACTIVE,L"INACTIVE\0",
+WP_MAXCAPTION,MXCS_DISABLED,L"DISABLED\0",
+WP_SMALLMAXCAPTION,0,L"SMALLMAXCAPTION\0",
+WP_SMALLMAXCAPTION,MXCS_ACTIVE,L"ACTIVE\0",
+WP_SMALLMAXCAPTION,MXCS_INACTIVE,L"INACTIVE\0",
+WP_SMALLMAXCAPTION,MXCS_DISABLED,L"DISABLED\0",
+WP_FRAMELEFT,0,L"FRAMELEFT\0",
+WP_FRAMELEFT,FS_ACTIVE,L"ACTIVE\0",
+WP_FRAMELEFT,FS_INACTIVE,L"INACTIVE\0",
+WP_FRAMERIGHT,0,L"FRAMERIGHT\0",
+WP_FRAMERIGHT,FS_ACTIVE,L"ACTIVE\0",
+WP_FRAMERIGHT,FS_INACTIVE,L"INACTIVE\0",
+WP_FRAMEBOTTOM,0,L"FRAMEBOTTOM\0",
+WP_FRAMEBOTTOM,FS_ACTIVE,L"ACTIVE\0",
+WP_FRAMEBOTTOM,FS_INACTIVE,L"INACTIVE\0",
+WP_SMALLFRAMELEFT,0,L"SMALLFRAMELEFT\0",
+WP_SMALLFRAMELEFT,FS_ACTIVE,L"ACTIVE\0",
+WP_SMALLFRAMELEFT,FS_INACTIVE,L"INACTIVE\0",
+WP_SMALLFRAMERIGHT,0,L"SMALLFRAMERIGHT\0",
+WP_SMALLFRAMERIGHT,FS_ACTIVE,L"ACTIVE\0",
+WP_SMALLFRAMERIGHT,FS_INACTIVE,L"INACTIVE\0",
+WP_SMALLFRAMEBOTTOM,0,L"SMALLFRAMEBOTTOM\0",
+WP_SMALLFRAMEBOTTOM,FS_ACTIVE,L"ACTIVE\0",
+WP_SMALLFRAMEBOTTOM,FS_INACTIVE,L"INACTIVE\0",
+WP_SYSBUTTON,0,L"SYSBUTTON\0",
+WP_SYSBUTTON,SBS_NORMAL,L"NORMAL\0",
+WP_SYSBUTTON,SBS_HOT,L"HOT\0",
+WP_SYSBUTTON,SBS_PUSHED,L"PUSHED\0",
+WP_SYSBUTTON,SBS_DISABLED,L"DISABLED\0",
+WP_MDISYSBUTTON,0,L"MDISYSBUTTON\0",
+WP_MDISYSBUTTON,SBS_NORMAL,L"NORMAL\0",
+WP_MDISYSBUTTON,SBS_HOT,L"HOT\0",
+WP_MDISYSBUTTON,SBS_PUSHED,L"PUSHED\0",
+WP_MDISYSBUTTON,SBS_DISABLED,L"DISABLED\0",
+WP_MINBUTTON,0,L"MINBUTTON\0",
+WP_MINBUTTON,MINBS_NORMAL,L"NORMAL\0",
+WP_MINBUTTON,MINBS_HOT,L"HOT\0",
+WP_MINBUTTON,MINBS_PUSHED,L"PUSHED\0",
+WP_MINBUTTON,MINBS_DISABLED,L"DISABLED\0",
+WP_MDIMINBUTTON,0,L"MDIMINBUTTON\0",
+WP_MDIMINBUTTON,MINBS_NORMAL,L"NORMAL\0",
+WP_MDIMINBUTTON,MINBS_HOT,L"HOT\0",
+WP_MDIMINBUTTON,MINBS_PUSHED,L"PUSHED\0",
+WP_MDIMINBUTTON,MINBS_DISABLED,L"DISABLED\0",
+WP_MAXBUTTON,0,L"MAXBUTTON\0",
+WP_MAXBUTTON,MAXBS_NORMAL,L"NORMAL\0",
+WP_MAXBUTTON,MAXBS_HOT,L"HOT\0",
+WP_MAXBUTTON,MAXBS_PUSHED,L"PUSHED\0",
+WP_MAXBUTTON,MAXBS_DISABLED,L"DISABLED\0",
+WP_CLOSEBUTTON,0,L"CLOSEBUTTON\0",
+WP_CLOSEBUTTON,CBS_NORMAL,L"NORMAL\0",
+WP_CLOSEBUTTON,CBS_HOT,L"HOT\0",
+WP_CLOSEBUTTON,CBS_PUSHED,L"PUSHED\0",
+WP_CLOSEBUTTON,CBS_DISABLED,L"DISABLED\0",
+WP_SMALLCLOSEBUTTON,0,L"SMALLCLOSEBUTTON\0",
+WP_SMALLCLOSEBUTTON,CBS_NORMAL,L"NORMAL\0",
+WP_SMALLCLOSEBUTTON,CBS_HOT,L"HOT\0",
+WP_SMALLCLOSEBUTTON,CBS_PUSHED,L"PUSHED\0",
+WP_SMALLCLOSEBUTTON,CBS_DISABLED,L"DISABLED\0",
+WP_MDICLOSEBUTTON,0,L"MDICLOSEBUTTON\0",
+WP_MDICLOSEBUTTON,CBS_NORMAL,L"NORMAL\0",
+WP_MDICLOSEBUTTON,CBS_HOT,L"HOT\0",
+WP_MDICLOSEBUTTON,CBS_PUSHED,L"PUSHED\0",
+WP_MDICLOSEBUTTON,CBS_DISABLED,L"DISABLED\0",
+WP_RESTOREBUTTON,0,L"RESTOREBUTTON\0",
+WP_RESTOREBUTTON,RBS_NORMAL,L"NORMAL\0",
+WP_RESTOREBUTTON,RBS_HOT,L"HOT\0",
+WP_RESTOREBUTTON,RBS_PUSHED,L"PUSHED\0",
+WP_RESTOREBUTTON,RBS_DISABLED,L"DISABLED\0",
+WP_MDIRESTOREBUTTON,0,L"MDIRESTOREBUTTON\0",
+WP_MDIRESTOREBUTTON,RBS_NORMAL,L"NORMAL\0",
+WP_MDIRESTOREBUTTON,RBS_HOT,L"HOT\0",
+WP_MDIRESTOREBUTTON,RBS_PUSHED,L"PUSHED\0",
+WP_MDIRESTOREBUTTON,RBS_DISABLED,L"DISABLED\0",
+WP_HELPBUTTON,0,L"HELPBUTTON\0",
+WP_HELPBUTTON,HBS_NORMAL,L"NORMAL\0",
+WP_HELPBUTTON,HBS_HOT,L"HOT\0",
+WP_HELPBUTTON,HBS_PUSHED,L"PUSHED\0",
+WP_HELPBUTTON,HBS_DISABLED,L"DISABLED\0",
+WP_MDIHELPBUTTON,0,L"MDIHELPBUTTON\0",
+WP_MDIHELPBUTTON,HBS_NORMAL,L"NORMAL\0",
+WP_MDIHELPBUTTON,HBS_HOT,L"HOT\0",
+WP_MDIHELPBUTTON,HBS_PUSHED,L"PUSHED\0",
+WP_MDIHELPBUTTON,HBS_DISABLED,L"DISABLED\0",
+WP_HORZSCROLL,0,L"HORZSCROLL\0",
+WP_HORZSCROLL,HSS_NORMAL,L"NORMAL\0",
+WP_HORZSCROLL,HSS_HOT,L"HOT\0",
+WP_HORZSCROLL,HSS_PUSHED,L"PUSHED\0",
+WP_HORZSCROLL,HSS_DISABLED,L"DISABLED\0",
+WP_HORZTHUMB,0,L"HORZTHUMB\0",
+WP_HORZTHUMB,HTS_NORMAL,L"NORMAL\0",
+WP_HORZTHUMB,HTS_HOT,L"HOT\0",
+WP_HORZTHUMB,HTS_PUSHED,L"PUSHED\0",
+WP_HORZTHUMB,HTS_DISABLED,L"DISABLED\0",
+WP_VERTSCROLL,0,L"VERTSCROLL\0",
+WP_VERTSCROLL,VSS_NORMAL,L"NORMAL\0",
+WP_VERTSCROLL,VSS_HOT,L"HOT\0",
+WP_VERTSCROLL,VSS_PUSHED,L"PUSHED\0",
+WP_VERTSCROLL,VSS_DISABLED,L"DISABLED\0",
+WP_VERTTHUMB,0,L"VERTTHUMB\0",
+WP_VERTTHUMB,VTS_NORMAL,L"NORMAL\0",
+WP_VERTTHUMB,VTS_HOT,L"HOT\0",
+WP_VERTTHUMB,VTS_PUSHED,L"PUSHED\0",
+WP_VERTTHUMB,VTS_DISABLED,L"DISABLED\0",
+WP_DIALOG,0,L"DIALOG\0",
+WP_CAPTIONSIZINGTEMPLATE,0,L"CAPTIONSIZINGTEMPLATE\0",
+WP_SMALLCAPTIONSIZINGTEMPLATE,0,L"SMALLCAPTIONSIZINGTEMPLATE\0",
+WP_FRAMELEFTSIZINGTEMPLATE,0,L"FRAMELEFTSIZINGTEMPLATE\0",
+WP_SMALLFRAMELEFTSIZINGTEMPLATE,0,L"SMALLFRAMELEFTSIZINGTEMPLATE\0",
+WP_FRAMERIGHTSIZINGTEMPLATE,0,L"FRAMERIGHTSIZINGTEMPLATE\0",
+WP_SMALLFRAMERIGHTSIZINGTEMPLATE,0,L"SMALLFRAMERIGHTSIZINGTEMPLATE\0",
+WP_FRAMEBOTTOMSIZINGTEMPLATE,0,L"FRAMEBOTTOMSIZINGTEMPLATE\0",
+WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE,0,L"SMALLFRAMEBOTTOMSIZINGTEMPLATE\0",
+0,0,L"\0"
+END
--- /dev/null	1969-12-31 19:00:00.000000000 -0500
+++ dlls/uxtheme/uxini.c	2004-01-10 20:06:16.487612488 -0500
@@ -0,0 +1,310 @@
+/*
+ * Win32 5.1 uxtheme ini file processing
+ *
+ * Copyright (C) 2004 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 <stdarg.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winnls.h"
+
+#include "uxthemedll.h"
+#include "msstyles.h"
+
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(uxtheme);
+
+/***********************************************************************
+ * Defines and global variables
+ */
+
+WCHAR szTextFileResource[] = {
+    'T','E','X','T','F','I','L','E','\0'
+};
+
+/***********************************************************************/
+
+/**********************************************************************
+ *      UXINI_LoadINI
+ *
+ * Load a theme INI file out of resources from the specified
+ * theme
+ *
+ * PARAMS
+ *     tf                  Theme to load INI file out of resources
+ *     lpName              Resource name of the INI file
+ *
+ * RETURNS
+ *     INI file, or NULL if not found
+ */
+PUXINI_FILE UXINI_LoadINI(PTHEME_FILE tf, LPCWSTR lpName) {
+    HRSRC hrsc;
+    LPCWSTR lpThemesIni = NULL;
+    PUXINI_FILE uf;
+    DWORD dwIniSize;
+
+    if((hrsc = FindResourceW(tf->hTheme, lpName, szTextFileResource))) {
+        if(!(lpThemesIni = (LPCWSTR)LoadResource(tf->hTheme, hrsc))) {
+            TRACE("%s resource not found\n", debugstr_w(lpName));
+            return NULL;
+        }
+    }
+
+    dwIniSize = SizeofResource(tf->hTheme, hrsc) / sizeof(WCHAR);
+    uf = HeapAlloc(GetProcessHeap(), 0, sizeof(UXINI_FILE));
+    uf->lpIni = lpThemesIni;
+    uf->lpCurLoc = lpThemesIni;
+    uf->lpEnd = lpThemesIni + dwIniSize;
+    return uf;
+}
+
+/**********************************************************************
+ *      UXINI_CloseINI
+ *
+ * Close an open theme INI file
+ *
+ * PARAMS
+ *     uf                  Theme INI file to close
+ */
+void UXINI_CloseINI(PUXINI_FILE uf)
+{
+    HeapFree(GetProcessHeap(), 0, uf);
+}
+
+/**********************************************************************
+ *      UXINI_ResetINI
+ *
+ * Reset the current pointer into INI file to the beginning of the file
+ *
+ * PARAMS
+ *     uf                  Theme INI file to reset
+ */
+void UXINI_ResetINI(PUXINI_FILE uf)
+{
+    uf->lpCurLoc = uf->lpIni;
+}
+
+/**********************************************************************
+ *      UXINI_eof
+ *
+ * Determines if we are at the end of the INI file
+ *
+ * PARAMS
+ *     uf                  Theme INI file to test
+ */
+static inline BOOL UXINI_eof(PUXINI_FILE uf)
+{
+    return uf->lpCurLoc >= uf->lpEnd;
+}
+
+/**********************************************************************
+ *      UXINI_isspace
+ *
+ * Check if a character is a space character
+ *
+ * PARAMS
+ *     c                   Character to test
+ */
+static inline BOOL UXINI_isspace(WCHAR c)
+{
+    if (isspace(c)) return TRUE;
+    if (c=='\r') return TRUE;
+    return FALSE;
+}
+
+/**********************************************************************
+ *      UXINI_GetNextLine
+ *
+ * Get the next line in the INI file, non NULL terminated
+ * removes whitespace at beginning and end of line, and removes comments
+ *
+ * PARAMS
+ *     uf                  INI file to retrieve next line
+ *     dwLen               Location to store pointer to line length
+ *
+ * RETURNS
+ *     The section name, non NULL terminated
+ */
+LPCWSTR UXINI_GetNextLine(PUXINI_FILE uf, DWORD *dwLen)
+{
+    LPCWSTR lpLineEnd;
+    LPCWSTR lpLineStart;
+    DWORD len;
+    do {
+        if(UXINI_eof(uf)) return NULL;
+        /* Skip whitespace and empty lines */
+        while(!UXINI_eof(uf) && (UXINI_isspace(*uf->lpCurLoc) || *uf->lpCurLoc == '\n')) uf->lpCurLoc++;
+        lpLineStart = uf->lpCurLoc;
+        lpLineEnd = uf->lpCurLoc;
+        while(!UXINI_eof(uf) && *uf->lpCurLoc != '\n' && *uf->lpCurLoc != ';') lpLineEnd = uf->lpCurLoc++;
+        /* If comment was found, skip the rest of the line */
+        if(*uf->lpCurLoc == ';')
+            while(!UXINI_eof(uf) && *uf->lpCurLoc != '\n') uf->lpCurLoc++;
+        len = (lpLineEnd - lpLineStart);
+        if(len == 0)
+            return NULL;
+    } while(*lpLineStart == ';');
+    /* Remove whitespace from end of line */
+    while(UXINI_isspace(lpLineStart[len-1])) len--;
+    *dwLen = len;
+
+    return lpLineStart;
+}
+
+void UXINI_UnGetToLine(PUXINI_FILE uf, LPCWSTR lpLine)
+{
+    uf->lpCurLoc = lpLine;
+}
+
+/**********************************************************************
+ *      UXINI_GetNextSection
+ *
+ * Locate the next section in the ini file, and return pointer to
+ * section name, non NULL terminated. Use dwLen to determine length
+ *
+ * PARAMS
+ *     uf                  INI file to search, search starts at current location
+ *     dwLen               Location to store pointer to section name length
+ *
+ * RETURNS
+ *     The section name, non NULL terminated
+ */
+LPCWSTR UXINI_GetNextSection(PUXINI_FILE uf, DWORD *dwLen)
+{
+    LPCWSTR lpLine;
+    while((lpLine = UXINI_GetNextLine(uf, dwLen))) {
+        /* Assuming a ']' ending to the section name */
+        if(lpLine[0] == '[') {
+            lpLine++;
+            *dwLen -= 2;
+            break;
+        }
+    }
+    return lpLine;
+}
+
+/**********************************************************************
+ *      UXINI_FindSection
+ *
+ * Locate a section with the specified name, search starts
+ * at current location in ini file
+ * to start search from start, call UXINI_ResetINI
+ *
+ * PARAMS
+ *     uf                  INI file to search, search starts at current location
+ *     lpName              Name of the section to locate
+ *
+ * RETURNS
+ *     TRUE if section was found, FALSE otherwise
+ */
+BOOL UXINI_FindSection(PUXINI_FILE uf, LPCWSTR lpName)
+{
+    LPCWSTR lpSection;
+    DWORD dwLen;
+    while((lpSection = UXINI_GetNextSection(uf, &dwLen))) {
+        if(CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE, lpSection, dwLen, lpName, -1) == CSTR_EQUAL) {
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+/**********************************************************************
+ *      UXINI_GetNextValue
+ *
+ * Locate the next value in the current section
+ *
+ * PARAMS
+ *     uf                  INI file to search, search starts at current location
+ *     dwNameLen            Location to store pointer to value name length
+ *     lpValue              Location to store pointer to the value
+ *     dwValueLen           Location to store pointer to value length
+ *
+ * RETURNS
+ *     The value name, non NULL terminated
+ */
+LPCWSTR UXINI_GetNextValue(PUXINI_FILE uf, DWORD *dwNameLen, LPCWSTR *lpValue, DWORD *dwValueLen)
+{
+    LPCWSTR lpLine;
+    LPCWSTR lpLineEnd;
+    LPCWSTR name = NULL;
+    LPCWSTR value = NULL;
+    DWORD vallen = 0;
+    DWORD namelen = 0;
+    DWORD dwLen;
+    lpLine = UXINI_GetNextLine(uf, &dwLen);
+    if(!lpLine)
+        return NULL;
+    if(lpLine[0] == '[') {
+        UXINI_UnGetToLine(uf, lpLine);
+        return NULL;
+    }
+    lpLineEnd = lpLine + dwLen;
+
+    name = lpLine;
+    while(namelen < dwLen && *lpLine != '=') {
+        lpLine++;
+        namelen++;
+    }
+    if(*lpLine != '=') return NULL;
+    lpLine++;
+
+    /* Remove whitespace from end of name */
+    while(UXINI_isspace(name[namelen-1])) namelen--;
+    /* Remove whitespace from beginning of value */
+    while(UXINI_isspace(*lpLine) && lpLine < lpLineEnd) lpLine++;
+    value = lpLine;
+    vallen = dwLen-(value-name);
+
+    *dwNameLen = namelen;
+    *dwValueLen = vallen;
+    *lpValue = value;
+
+    return name;
+}
+
+/**********************************************************************
+ *      UXINI_FindValue
+ *
+ * Locate a value by name
+ *
+ * PARAMS
+ *     uf                   INI file to search, search starts at current location
+ *     lpName               Value name to locate
+ *     lpValue              Location to store pointer to the value
+ *     dwValueLen           Location to store pointer to value length
+ *
+ * RETURNS
+ *     The value name, non NULL terminated
+ */
+BOOL UXINI_FindValue(PUXINI_FILE uf, LPCWSTR lpName, LPCWSTR *lpValue, DWORD *dwValueLen)
+{
+    LPCWSTR name;
+    DWORD namelen;
+
+    while((name = UXINI_GetNextValue(uf, &namelen, lpValue, dwValueLen))) {
+        if(CompareStringW(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE, name, namelen, lpName, -1) == CSTR_EQUAL) {
+            return TRUE;
+        }
+    }
+    return FALSE;
+}

[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux