windows-nt/Source/XPSP1/NT/shell/themes/themedir/schema.txt
2020-09-26 16:20:57 +08:00

145 lines
5.1 KiB
Plaintext

Theme Schema File - 07/20/00
----------------------------
1. Description: the theme schema file is a "C" header file that uses special macros defined by
the file "SchemaDef.h"
2. The system schema file (for uxtheme.dll and comctl32.dll) is named "TmSchema.h".
3. Purpose: the schema file defines a common set of enums, properties, class parts, and class states
to be shared between the Theme Manager drawing/info routines, the theme authoring file, and the
theme-aware controls
4. File layout:
a. file start
- the first part of the file contains some fixed information:
//-----------------------------------------------------------------
#if (defined(SCHEMA_STRINGS)) || (! defined(TMSCHEMA_H))
//-----------------------------------------------------------------
#define TMSCHEMA_H
//-----------------------------------------------------------------
#include "SchemaDef.h"
//-----------------------------------------------------------------
#define THEMEMGR_VERSION 1 // increment if order of props changes or
// any props are deleted (will prevent loading
// of controlsets that use older version
//-----------------------------------------------------------------
BEGIN_TM_SCHEMA(xxx)
(where "xxx" is the schema name)
b. enums section
- this section contains one or more enum definitions
- each enum definition defines an enum name and a set of named values
- example:
BEGIN_TM_ENUM(BGTYPE)
TM_ENUM(BT, IMAGEFILE)
TM_ENUM(BT, BORDERFILL)
TM_ENUM(BT, NTLFILE)
END_TM_ENUM()
The above example declares an enum called "BGTYPE". It has 3 named
values: IMAGEFILE (value=0), BORDERFILL (value=1), and NTLFILE (value=2)
c. properties section
- this section defines a set of properties based on the primitive
property types or a previously declared enum
- section starts with the line:
BEGIN_TM_PROPS()
- section ends with the line:
END_TM_PROPS()
- example property:
TM_PROP(TMT, BORDERSIZE, INT)
(declares a "BorderSize" property of type "int")
- example property:
TM_PROP(TMT, BGTYPE, ENUM)
(declares a "BgType" property of type enum)
d. parts/states section
- this section contains one or more parts/states declarations
- example:
BEGIN_TM_CLASS_PARTS(BUTTON)
TM_PART(BP, PUSHBUTTON)
TM_PART(BP, RADIOBUTTON)
TM_PART(BP, CHECKBOX)
TM_PART(BP, GROUPBOX)
TM_PART(BP, USERBUTTON)
END_TM_CLASS_PARTS()
(the above defines a class called "button" that
has the 5 specified parts)
- example:
BEGIN_TM_PART_STATES(PUSHBUTTON)
TM_STATE(PBS, NORMAL)
TM_STATE(PBS, HOT)
TM_STATE(PBS, PRESSED)
TM_STATE(PBS, DISABLED)
TM_STATE(PBS, DEFAULTED)
END_TM_PART_STATES()
(the above defines a part called "pushbutton" that has
the 5 specified states)
e. file ending
- this section should look like:
END_TM_SCHEMA(xxx)
//---------------------------------------------------------------------------
#endif // TMSCHEMA_H
//---------------------------------------------------------------------------
(where "xxx" is the schema name)
5. The system schema file (TmSchema.h) is compiled into:
- uxtheme.dll (theme manager code)
- comctl32.dll (common controls code)
- packthem.exe (theme packaging utility)
- <theme-aware custom controls>
6. custom controls can define their own schema file that extend the system schema. This
schema file should be compiled into the control's DLL and the DLL should be registered
as "Path" values under the registry key:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\ThemeManager\CustomControls
example: Path = "c:\program files\acme\keypad.dll"
7. during theme packaging, the "packthem.exe" will attempt to call each registered DLL to get its
schema info. This call is automatically implemented when the schema file is built using the
format described in this document.
8. uxtheme.dll will also load registered control DLL's for the schema during every theme load