Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
d2c4cf14
Commit
d2c4cf14
authored
Dec 08, 2003
by
Kevin Koltzau
Committed by
Alexandre Julliard
Dec 08, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Load, validate and retrieve a few properties from an msstyles theme.
parent
cc8c205a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
386 additions
and
21 deletions
+386
-21
Makefile.in
dlls/uxtheme/Makefile.in
+2
-1
msstyles.c
dlls/uxtheme/msstyles.c
+172
-0
msstyles.h
dlls/uxtheme/msstyles.h
+37
-0
system.c
dlls/uxtheme/system.c
+175
-20
No files found.
dlls/uxtheme/Makefile.in
View file @
d2c4cf14
...
...
@@ -3,13 +3,14 @@ TOPOBJDIR = ../..
SRCDIR
=
@srcdir@
VPATH
=
@srcdir@
MODULE
=
uxtheme.dll
IMPORTS
=
gdi32 user
32 advapi32 kernel32 ntdll
IMPORTS
=
shlwapi user32 gdi
32 advapi32 kernel32 ntdll
EXTRALIBS
=
$(LIBUNICODE)
C_SRCS
=
\
draw.c
\
main.c
\
metric.c
\
msstyles.c
\
property.c
\
system.c
...
...
dlls/uxtheme/msstyles.c
0 → 100644
View file @
d2c4cf14
/*
* Win32 5.1 msstyles theme format
*
* 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 <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "wingdi.h"
#include "uxtheme.h"
#include "uxthemedll.h"
#include "msstyles.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
uxtheme
);
#define MSSTYLES_VERSION 0x0003
/**********************************************************************
* MSSTYLES_OpenThemeFile
*
* Load and validate a theme
*
* PARAMS
* lpThemeFile Path to theme file to load
* pszColorName Color name wanted, can be NULL
* pszSizeName Size name wanted, can be NULL
*
* NOTES
* If pszColorName or pszSizeName are NULL, the default color/size will be used.
* If one/both are provided, they are validated against valid color/sizes and if
* a match is not found, the function fails.
*/
HRESULT
MSSTYLES_OpenThemeFile
(
LPCWSTR
lpThemeFile
,
LPCWSTR
pszColorName
,
LPCWSTR
pszSizeName
,
PTHEME_FILE
*
tf
)
{
HMODULE
hTheme
;
HRSRC
hrsc
;
HRESULT
hr
=
S_OK
;
WCHAR
szPackThemVersionResource
[]
=
{
'P'
,
'A'
,
'C'
,
'K'
,
'T'
,
'H'
,
'E'
,
'M'
,
'_'
,
'V'
,
'E'
,
'R'
,
'S'
,
'I'
,
'O'
,
'N'
,
'\0'
};
WCHAR
szColorNamesResource
[]
=
{
'C'
,
'O'
,
'L'
,
'O'
,
'R'
,
'N'
,
'A'
,
'M'
,
'E'
,
'S'
,
'\0'
};
WCHAR
szSizeNamesResource
[]
=
{
'S'
,
'I'
,
'Z'
,
'E'
,
'N'
,
'A'
,
'M'
,
'E'
,
'S'
,
'\0'
};
WORD
version
;
DWORD
versize
;
LPWSTR
pszColors
;
LPWSTR
pszSelectedColor
=
NULL
;
LPWSTR
pszSizes
;
LPWSTR
pszSelectedSize
=
NULL
;
LPWSTR
tmp
;
TRACE
(
"Opening %s
\n
"
,
debugstr_w
(
lpThemeFile
));
hTheme
=
LoadLibraryExW
(
lpThemeFile
,
NULL
,
LOAD_LIBRARY_AS_DATAFILE
);
/* Validate that this is really a theme */
if
(
!
hTheme
)
goto
invalid_theme
;
if
(
!
(
hrsc
=
FindResourceW
(
hTheme
,
MAKEINTRESOURCEW
(
1
),
szPackThemVersionResource
)))
{
TRACE
(
"No version resource found
\n
"
);
goto
invalid_theme
;
}
if
((
versize
=
SizeofResource
(
hTheme
,
hrsc
))
!=
2
)
{
TRACE
(
"Version resource found, but wrong size: %ld
\n
"
,
versize
);
goto
invalid_theme
;
}
version
=
*
(
WORD
*
)
LoadResource
(
hTheme
,
hrsc
);
if
(
version
!=
MSSTYLES_VERSION
)
{
TRACE
(
"Version of theme file is unsupported: 0x%04x
\n
"
,
version
);
goto
invalid_theme
;
}
if
(
!
(
hrsc
=
FindResourceW
(
hTheme
,
MAKEINTRESOURCEW
(
1
),
szColorNamesResource
)))
{
TRACE
(
"Color names resource not found
\n
"
);
goto
invalid_theme
;
}
pszColors
=
(
LPWSTR
)
LoadResource
(
hTheme
,
hrsc
);
if
(
!
(
hrsc
=
FindResourceW
(
hTheme
,
MAKEINTRESOURCEW
(
1
),
szSizeNamesResource
)))
{
TRACE
(
"Size names resource not found
\n
"
);
goto
invalid_theme
;
}
pszSizes
=
(
LPWSTR
)
LoadResource
(
hTheme
,
hrsc
);
/* Validate requested color against whats available from the theme */
if
(
pszColorName
)
{
tmp
=
pszColors
;
while
(
*
tmp
)
{
if
(
!
lstrcmpiW
(
pszColorName
,
tmp
))
{
pszSelectedColor
=
tmp
;
break
;
}
tmp
+=
lstrlenW
(
tmp
)
+
1
;
}
}
else
pszSelectedColor
=
pszColors
;
/* Use the default color */
/* Validate requested size against whats available from the theme */
if
(
pszSizeName
)
{
tmp
=
pszSizes
;
while
(
*
tmp
)
{
if
(
!
lstrcmpiW
(
pszSizeName
,
tmp
))
{
pszSelectedSize
=
tmp
;
break
;
}
tmp
+=
lstrlenW
(
tmp
)
+
1
;
}
}
else
pszSelectedSize
=
pszSizes
;
/* Use the default size */
if
(
!
pszSelectedColor
||
!
pszSelectedSize
)
{
TRACE
(
"Requested color/size (%s/%s) not found in theme
\n
"
,
debugstr_w
(
pszColorName
),
debugstr_w
(
pszSizeName
));
hr
=
E_PROP_ID_UNSUPPORTED
;
goto
invalid_theme
;
}
*
tf
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
THEME_FILE
));
(
*
tf
)
->
hTheme
=
hTheme
;
(
*
tf
)
->
pszAvailColors
=
pszColors
;
(
*
tf
)
->
pszAvailSizes
=
pszSizes
;
(
*
tf
)
->
pszSelectedColor
=
pszSelectedColor
;
(
*
tf
)
->
pszSelectedSize
=
pszSelectedSize
;
return
S_OK
;
invalid_theme:
if
(
hTheme
)
FreeLibrary
(
hTheme
);
if
(
!
hr
)
hr
=
HRESULT_FROM_WIN32
(
GetLastError
());
return
hr
;
}
/***********************************************************************
* MSSTYLES_CloseThemeFile
*
* Close theme file and free resources
*/
void
MSSTYLES_CloseThemeFile
(
PTHEME_FILE
tf
)
{
if
(
tf
)
{
if
(
tf
->
hTheme
)
FreeLibrary
(
tf
->
hTheme
);
HeapFree
(
GetProcessHeap
(),
0
,
tf
);
}
}
dlls/uxtheme/msstyles.h
0 → 100644
View file @
d2c4cf14
/*
* Internal msstyles related 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_MSSTYLES_H
#define __WINE_MSSTYLES_H
typedef
struct
_THEME_FILE
{
HMODULE
hTheme
;
LPWSTR
pszAvailColors
;
LPWSTR
pszAvailSizes
;
LPWSTR
pszSelectedColor
;
LPWSTR
pszSelectedSize
;
}
THEME_FILE
,
*
PTHEME_FILE
;
HRESULT
MSSTYLES_OpenThemeFile
(
LPCWSTR
lpThemeFile
,
LPCWSTR
pszColorName
,
LPCWSTR
pszSizeName
,
PTHEME_FILE
*
tf
);
void
MSSTYLES_CloseThemeFile
(
PTHEME_FILE
tf
);
#endif
dlls/uxtheme/system.c
View file @
d2c4cf14
...
...
@@ -26,9 +26,12 @@
#include "winbase.h"
#include "winuser.h"
#include "wingdi.h"
#include "winreg.h"
#include "shlwapi.h"
#include "uxtheme.h"
#include "uxthemedll.h"
#include "msstyles.h"
#include "wine/debug.h"
...
...
@@ -38,11 +41,28 @@ WINE_DEFAULT_DEBUG_CHANNEL(uxtheme);
* Defines and global variables
*/
static
const
WCHAR
szThemeManager
[]
=
{
'S'
,
'o'
,
'f'
,
't'
,
'w'
,
'a'
,
'r'
,
'e'
,
'\\'
,
'M'
,
'i'
,
'c'
,
'r'
,
'o'
,
's'
,
'o'
,
'f'
,
't'
,
'\\'
,
'W'
,
'i'
,
'n'
,
'd'
,
'o'
,
'w'
,
's'
,
'\\'
,
'C'
,
'u'
,
'r'
,
'r'
,
'e'
,
'n'
,
't'
,
'V'
,
'e'
,
'r'
,
's'
,
'i'
,
'o'
,
'n'
,
'\\'
,
'T'
,
'h'
,
'e'
,
'm'
,
'e'
,
'M'
,
'a'
,
'n'
,
'a'
,
'g'
,
'e'
,
'r'
,
'\0'
};
static
const
WCHAR
szThemeActive
[]
=
{
'T'
,
'h'
,
'e'
,
'm'
,
'e'
,
'A'
,
'c'
,
't'
,
'i'
,
'v'
,
'e'
,
'\0'
};
static
const
WCHAR
szSizeName
[]
=
{
'S'
,
'i'
,
'z'
,
'e'
,
'N'
,
'a'
,
'm'
,
'e'
,
'\0'
};
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'
};
DWORD
dwThemeAppProperties
=
STAP_ALLOW_NONCLIENT
|
STAP_ALLOW_CONTROLS
;
ATOM
atWindowTheme
;
ATOM
atSubAppName
;
ATOM
atSubIdList
;
BOOL
bThemeActive
=
FALSE
;
WCHAR
szCurrentTheme
[
MAX_PATH
];
WCHAR
szCurrentColor
[
64
];
WCHAR
szCurrentSize
[
64
];
/***********************************************************************/
/***********************************************************************
...
...
@@ -59,10 +79,65 @@ void UXTHEME_InitSystem()
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
"
);
buffsize
=
sizeof
(
tmp
)
/
sizeof
(
tmp
[
0
]);
if
(
!
RegQueryValueExW
(
hKey
,
szThemeActive
,
NULL
,
NULL
,
(
LPBYTE
)
tmp
,
&
buffsize
))
{
bThemeActive
=
(
tmp
[
0
]
!=
'0'
);
}
else
{
bThemeActive
=
FALSE
;
TRACE
(
"Failed to get ThemeActive: %ld
\n
"
,
GetLastError
());
}
buffsize
=
sizeof
(
szCurrentColor
)
/
sizeof
(
szCurrentColor
[
0
]);
if
(
RegQueryValueExW
(
hKey
,
szColorName
,
NULL
,
NULL
,
(
LPBYTE
)
szCurrentColor
,
&
buffsize
))
szCurrentColor
[
0
]
=
'\0'
;
buffsize
=
sizeof
(
szCurrentSize
)
/
sizeof
(
szCurrentSize
[
0
]);
if
(
RegQueryValueExW
(
hKey
,
szSizeName
,
NULL
,
NULL
,
(
LPBYTE
)
szCurrentSize
,
&
buffsize
))
szCurrentSize
[
0
]
=
'\0'
;
if
(
SHRegGetPathW
(
hKey
,
NULL
,
szDllName
,
szCurrentTheme
,
0
))
szCurrentTheme
[
0
]
=
'\0'
;
RegCloseKey
(
hKey
);
}
else
TRACE
(
"Failed to open theme registry key
\n
"
);
if
(
bThemeActive
)
{
/* Make sure the theme requested is actually valid */
hr
=
MSSTYLES_OpenThemeFile
(
szCurrentTheme
,
szCurrentColor
[
0
]
?
szCurrentColor
:
NULL
,
szCurrentSize
[
0
]
?
szCurrentSize
:
NULL
,
&
pt
);
if
(
FAILED
(
hr
))
{
bThemeActive
=
FALSE
;
szCurrentTheme
[
0
]
=
'\0'
;
szCurrentColor
[
0
]
=
'\0'
;
szCurrentSize
[
0
]
=
'\0'
;
}
else
{
/* 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_CloseThemeFile
(
pt
);
}
}
if
(
!
bThemeActive
)
TRACE
(
"Themeing not active
\n
"
);
else
TRACE
(
"Theme active: %s %s %s
\n
"
,
debugstr_w
(
szCurrentTheme
),
debugstr_w
(
szCurrentColor
),
debugstr_w
(
szCurrentSize
));
}
/***********************************************************************
...
...
@@ -70,8 +145,7 @@ void UXTHEME_InitSystem()
*/
BOOL
WINAPI
IsAppThemed
(
void
)
{
FIXME
(
"stub
\n
"
);
return
FALSE
;
return
IsThemeActive
();
}
/***********************************************************************
...
...
@@ -79,8 +153,8 @@ BOOL WINAPI IsAppThemed(void)
*/
BOOL
WINAPI
IsThemeActive
(
void
)
{
FIXME
(
"stub
\n
"
);
return
FALSE
;
TRACE
(
"
\n
"
);
return
bThemeActive
;
}
/***********************************************************************
...
...
@@ -91,8 +165,21 @@ BOOL WINAPI IsThemeActive(void)
*/
HRESULT
WINAPI
EnableTheming
(
BOOL
fEnable
)
{
FIXME
(
"%d: stub
\n
"
,
fEnable
);
return
ERROR_CALL_NOT_IMPLEMENTED
;
HKEY
hKey
;
WCHAR
szEnabled
[]
=
{
'0'
,
'\0'
};
TRACE
(
"(%d)
\n
"
,
fEnable
);
if
(
fEnable
!=
bThemeActive
)
{
bThemeActive
=
fEnable
;
if
(
bThemeActive
)
szEnabled
[
0
]
=
'1'
;
if
(
!
RegOpenKeyW
(
HKEY_CURRENT_USER
,
szThemeManager
,
&
hKey
))
{
RegSetValueExW
(
hKey
,
szThemeActive
,
0
,
REG_SZ
,
(
LPBYTE
)
szEnabled
,
sizeof
(
WCHAR
));
RegCloseKey
(
hKey
);
}
PostMessageW
(
HWND_BROADCAST
,
WM_THEMECHANGED
,
0
,
0
);
}
return
S_OK
;
}
/***********************************************************************
...
...
@@ -151,7 +238,9 @@ HRESULT WINAPI SetWindowTheme(HWND hwnd, LPCWSTR pszSubAppName,
debugstr_w
(
pszSubIdList
));
hr
=
UXTHEME_SetWindowProperty
(
hwnd
,
atSubAppName
,
pszSubAppName
);
if
(
SUCCEEDED
(
hr
))
hr
=
UXTHEME_SetWindowProperty
(
hwnd
,
atSubIdList
,
pszSubIdList
);
hr
=
UXTHEME_SetWindowProperty
(
hwnd
,
atSubIdList
,
pszSubIdList
);
if
(
SUCCEEDED
(
hr
))
PostMessageW
(
hwnd
,
WM_THEMECHANGED
,
0
,
0
);
return
hr
;
}
...
...
@@ -162,8 +251,12 @@ HRESULT WINAPI GetCurrentThemeName(LPWSTR pszThemeFileName, int dwMaxNameChars,
LPWSTR
pszColorBuff
,
int
cchMaxColorChars
,
LPWSTR
pszSizeBuff
,
int
cchMaxSizeChars
)
{
FIXME
(
"stub
\n
"
);
return
ERROR_CALL_NOT_IMPLEMENTED
;
if
(
!
bThemeActive
)
return
E_PROP_ID_UNSUPPORTED
;
if
(
pszThemeFileName
)
lstrcpynW
(
pszThemeFileName
,
szCurrentTheme
,
dwMaxNameChars
);
if
(
pszColorBuff
)
lstrcpynW
(
pszColorBuff
,
szCurrentColor
,
cchMaxColorChars
);
if
(
pszSizeBuff
)
lstrcpynW
(
pszSizeBuff
,
szCurrentSize
,
cchMaxSizeChars
);
return
S_OK
;
}
/***********************************************************************
...
...
@@ -249,10 +342,10 @@ 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
;
TRACE
(
"(%s,%s,%s,%p,%ld)
\n
"
,
debugstr_w
(
pszThemeFileName
),
debugstr_w
(
pszColorName
),
debugstr_w
(
pszSizeName
),
hThemeFile
,
unknown
);
return
MSSTYLES_OpenThemeFile
(
pszThemeFileName
,
pszColorName
,
pszSizeName
,
(
PTHEME_FILE
*
)
hThemeFile
)
;
}
/**********************************************************************
...
...
@@ -265,7 +358,8 @@ HRESULT WINAPI OpenThemeFile(LPCWSTR pszThemeFileName, LPCWSTR pszColorName,
*/
HRESULT
WINAPI
CloseThemeFile
(
HTHEMEFILE
hThemeFile
)
{
FIXME
(
"stub
\n
"
);
TRACE
(
"(%p)
\n
"
,
hThemeFile
);
MSSTYLES_CloseThemeFile
(
hThemeFile
);
return
S_OK
;
}
...
...
@@ -311,8 +405,20 @@ 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
;
PTHEME_FILE
pt
;
HRESULT
hr
;
TRACE
(
"(%s,%p,%ld,%p,%ld)
\n
"
,
debugstr_w
(
pszThemeFileName
),
pszColorName
,
dwColorNameLen
,
pszSizeName
,
dwSizeNameLen
);
hr
=
MSSTYLES_OpenThemeFile
(
pszThemeFileName
,
NULL
,
NULL
,
&
pt
);
if
(
FAILED
(
hr
))
return
hr
;
lstrcpynW
(
pszColorName
,
pt
->
pszSelectedColor
,
dwColorNameLen
);
lstrcpynW
(
pszSizeName
,
pt
->
pszSelectedSize
,
dwSizeNameLen
);
MSSTYLES_CloseThemeFile
(
pt
);
return
S_OK
;
}
/**********************************************************************
...
...
@@ -354,13 +460,37 @@ HRESULT WINAPI EnumThemes(LPCWSTR pszThemePath, EnumThemeProc callback,
* NOTES
* XP fails with E_POINTER when pszColorName points to a buffer smaller then 605
* characters
*
* Not very efficient that I'm opening & validating the theme every call, but
* this is undocumented and almost never called..
* (and this is how windows works too)
*/
HRESULT
WINAPI
EnumThemeColors
(
LPWSTR
pszThemeFileName
,
LPWSTR
pszSizeName
,
DWORD
dwColorNum
,
LPWSTR
pszColorName
)
{
FIXME
(
"%s %s %ld: stub
\n
"
,
debugstr_w
(
pszThemeFileName
),
PTHEME_FILE
pt
;
HRESULT
hr
;
LPWSTR
tmp
;
TRACE
(
"(%s,%s,%ld)
\n
"
,
debugstr_w
(
pszThemeFileName
),
debugstr_w
(
pszSizeName
),
dwColorNum
);
return
ERROR_CALL_NOT_IMPLEMENTED
;
hr
=
MSSTYLES_OpenThemeFile
(
pszThemeFileName
,
NULL
,
pszSizeName
,
&
pt
);
if
(
FAILED
(
hr
))
return
hr
;
tmp
=
pt
->
pszAvailColors
;
while
(
dwColorNum
&&
*
tmp
)
{
dwColorNum
--
;
tmp
+=
lstrlenW
(
tmp
)
+
1
;
}
if
(
!
dwColorNum
&&
*
tmp
)
{
TRACE
(
"%s
\n
"
,
debugstr_w
(
tmp
));
lstrcpyW
(
pszColorName
,
tmp
);
}
else
hr
=
E_PROP_ID_UNSUPPORTED
;
MSSTYLES_CloseThemeFile
(
pt
);
return
hr
;
}
/**********************************************************************
...
...
@@ -383,12 +513,37 @@ HRESULT WINAPI EnumThemeColors(LPWSTR pszThemeFileName, LPWSTR pszSizeName,
* NOTES
* XP fails with E_POINTER when pszSizeName points to a buffer smaller then 605
* characters
*
* Not very efficient that I'm opening & validating the theme every call, but
* this is undocumented and almost never called..
* (and this is how windows works too)
*/
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
;
PTHEME_FILE
pt
;
HRESULT
hr
;
LPWSTR
tmp
;
TRACE
(
"(%s,%s,%ld)
\n
"
,
debugstr_w
(
pszThemeFileName
),
debugstr_w
(
pszColorName
),
dwSizeNum
);
hr
=
MSSTYLES_OpenThemeFile
(
pszThemeFileName
,
pszColorName
,
NULL
,
&
pt
);
if
(
FAILED
(
hr
))
return
hr
;
tmp
=
pt
->
pszAvailSizes
;
while
(
dwSizeNum
&&
*
tmp
)
{
dwSizeNum
--
;
tmp
+=
lstrlenW
(
tmp
)
+
1
;
}
if
(
!
dwSizeNum
&&
*
tmp
)
{
TRACE
(
"%s
\n
"
,
debugstr_w
(
tmp
));
lstrcpyW
(
pszSizeName
,
tmp
);
}
else
hr
=
E_PROP_ID_UNSUPPORTED
;
MSSTYLES_CloseThemeFile
(
pt
);
return
hr
;
}
/**********************************************************************
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment