In this article, you will see a wrapper class for the HTHEME handle used in connection with the Visual Styles API available in Windows XP. The class is heavily based on the CVisualStylesXP class by David Yuheng Zhao.
|
//-----------------------------------------------------------------
// SchemaDef.h - defines needed to build a Theme Manager schema
// file
//-----------------------------------------------------------------
#ifndef SCHEMA_STRINGS // FIRST PASS of this hdr file
//-----------------------------------------------------------------
#ifndef SCHEMADEF_H
#define SCHEMADEF_H
//-----------------------------------------------------------------
#define SCHEMADEF_VERSION 1 // defines the exported func(s) implemented
//-----------------------------------------------------------------
struct TMPROPINFO
{
LPCWSTR pszName;
SHORT sEnumVal;
BYTE bPrimVal;
};
//-----------------------------------------------------------------
struct TMSCHEMAINFO
{
DWORD dwSize; // size of this struct
int iSchemaDefVersion; // version number from this file
int iThemeMgrVersion; // version number from "thschema.h"
int iPropCount; // # of entries in prop table
const struct TMPROPINFO *pPropTable; // ptr to prop table
};
//---------------------------------------------------------------------------
#define BEGIN_TM_SCHEMA(name)
#define BEGIN_TM_PROPS() enum PropValues { DummyProp = 49,
#define BEGIN_TM_ENUM(name) enum name {
#define BEGIN_TM_CLASS_PARTS(name) enum name##PARTS { name##PartFiller0,
#define BEGIN_TM_PART_STATES(name) enum name##STATES { name##StateFiller0,
#define TM_PROP(val, prefix, name, primval) prefix##_##name = val,
#define TM_ENUM(val, prefix, name) prefix##_##name = val,
#define TM_PART(val, prefix, name) prefix##_##name = val,
#define TM_STATE(val, prefix, name) prefix##_##name = val,
#define END_TM_CLASS_PARTS() };
#define END_TM_PART_STATES() };
#define END_TM_PROPS() };
#define END_TM_ENUM() };
#define END_TM_SCHEMA(name)
//---------------------------------------------------------------------------
#endif // SCHEMADEF_H
//---------------------------------------------------------------------------
#else // SECOND PASS of this hdr file
//---------------------------------------------------------------------------
#undef BEGIN_TM_SCHEMA
#undef BEGIN_TM_PROPS
#undef BEGIN_TM_ENUM
#undef BEGIN_TM_CLASS_PARTS
#undef BEGIN_TM_PART_STATES
#undef TM_PROP
#undef TM_PART
#undef TM_STATE
#undef TM_ENUM
#undef END_TM_CLASS_PARTS
#undef END_TM_PART_STATES
#undef END_TM_PROPS
#undef END_TM_ENUM
#undef END_TM_SCHEMA
//---------------------------------------------------------------------------
#define BEGIN_TM_SCHEMA(name) static const TMPROPINFO name[] = {
#define BEGIN_TM_PROPS()
#define BEGIN_TM_ENUM(name) {L#name, TMT_ENUMDEF, TMT_ENUMDEF},
#define BEGIN_TM_CLASS_PARTS(name) {L#name L"PARTS", TMT_ENUMDEF, TMT_ENUMDEF},
#define BEGIN_TM_PART_STATES(name) {L#name L"STATES", TMT_ENUMDEF, TMT_ENUMDEF},
#define TM_PROP(val, prefix, name, primval) {L#name, prefix##_##name, TMT_##primval},
#define TM_PART(val, prefix, name) {L#name, prefix##_##name, TMT_ENUMVAL},
#define TM_STATE(val, prefix, name) {L#name, prefix##_##name, TMT_ENUMVAL},
#define TM_ENUM(val, prefix, name) {L#name, prefix##_##name, TMT_ENUMVAL},
#define END_TM_CLASS_PARTS()
#define END_TM_PART_STATES()
#define END_TM_PROPS()
#define END_TM_ENUM()
#define END_TM_SCHEMA(name) }; \
static const TMSCHEMAINFO *GetSchemaInfo() \
{ \
static TMSCHEMAINFO si = {sizeof(si)}; \
si.iSchemaDefVersion = SCHEMADEF_VERSION; \
si.iThemeMgrVersion = THEMEMGR_VERSION; \
si.iPropCount = sizeof(name)/sizeof(name[0]); \
si.pPropTable = name; \
\
return &si; \
}
//-----------------------------------------------------------------
#endif
//-----------------------------------------------------------------
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.