📄 themedump.cpp
字号:
{ NULL, MP_MENUITEM, L"MENU" },
{ NULL, MP_SEPARATOR, L"MENU" },
{ L"MENUBAND", MDP_NEWAPPBUTTON, L"MENUBAND" },
{ L"PAGE", 0, NULL },
{ NULL, PGRP_DOWN, L"DOWN" },
{ NULL, PGRP_DOWNHORZ, L"DOWNHORZ" },
{ NULL, PGRP_UP, L"UP" },
{ NULL, PGRP_UPHORZ, L"UPHORZ" },
{ L"REBAR", RP_CHEVRON, L"CHEVRON" },
{ L"SCROLLBAR", 0, NULL },
{ NULL, SBP_ARROWBTN, L"ARROWBTN" },
{ NULL, SBP_LOWERTRACKHORZ, L"SCROLLBAR" },
{ NULL, SBP_LOWERTRACKVERT, L"SCROLLBAR" },
{ NULL, SBP_THUMBBTNHORZ, L"SCROLLBAR" },
{ NULL, SBP_THUMBBTNVERT, L"SCROLLBAR" },
{ NULL, SBP_UPPERTRACKHORZ, L"SCROLLBAR" },
{ NULL, SBP_UPPERTRACKVERT, L"SCROLLBAR" },
{ NULL, SBP_SIZEBOX, L"SIZEBOX" },
{ L"SPIN", 0, NULL },
{ NULL, SPNP_DOWN, L"DOWN" },
{ NULL, SPNP_DOWNHORZ, L"DOWNHORZ" },
{ NULL, SPNP_UP, L"UP" },
{ NULL, SPNP_UPHORZ, L"UPHORZ" },
{ L"STARTPANEL", 0, NULL },
{ NULL, SPP_LOGOFFBUTTONS, L"LOGOFFBUTTONS" },
{ NULL, SPP_MOREPROGRAMSARROW, L"MOREPROGRAMSARROW" },
{ L"TAB", 0, NULL },
{ NULL, TABP_TABITEM, L"TABITEM" },
{ NULL, TABP_TABITEMBOTHEDGE, L"TABITEMBOTHEDGE" },
{ NULL, TABP_TABITEMLEFTEDGE, L"TABITEMLEFTEDGE" },
{ NULL, TABP_TABITEMRIGHTEDGE, L"TABITEMRIGHTEDGE" },
{ NULL, TABP_TOPTABITEM, L"TOPTABITEM" },
{ NULL, TABP_TOPTABITEMBOTHEDGE, L"TOPTABITEMBOTHEDGE" },
{ NULL, TABP_TOPTABITEMLEFTEDGE, L"TOPTABITEMLEFTEDGE" },
{ NULL, TABP_TOPTABITEMRIGHTEDGE, L"TOPTABITEMRIGHTEDGE" },
{ L"TOOLBAR", 0, NULL },
{ NULL, TP_BUTTON, L"TOOLBAR" },
{ NULL, TP_DROPDOWNBUTTON, L"TOOLBAR" },
{ NULL, TP_SPLITBUTTON, L"TOOLBAR" },
{ NULL, TP_SPLITBUTTONDROPDOWN, L"TOOLBAR" },
{ NULL, TP_SEPARATOR, L"TOOLBAR" },
{ NULL, TP_SEPARATORVERT, L"TOOLBAR" },
{ L"TOOLTIP", 0, NULL },
{ NULL, TTP_BALLOON, L"BALLOON" },
{ NULL, TTP_BALLOONTITLE, L"BALLOON" },
{ NULL, TTP_CLOSE, L"CLOSE" },
{ NULL, TTP_STANDARD, L"STANDARD" },
{ NULL, TTP_STANDARDTITLE, L"STANDARD" },
{ L"TRACKBAR", 0, NULL },
{ NULL, TKP_THUMB, L"THUMB" },
{ NULL, TKP_THUMBBOTTOM, L"THUMBBOTTOM" },
{ NULL, TKP_THUMBLEFT, L"THUMBLEFT" },
{ NULL, TKP_THUMBRIGHT, L"THUMBRIGHT" },
{ NULL, TKP_THUMBTOP, L"THUMBTOP" },
{ NULL, TKP_THUMBVERT, L"THUMBVERT" },
{ NULL, TKP_TICS, L"TICS" },
{ NULL, TKP_TICSVERT, L"TICSVERT" },
{ NULL, TKP_TRACK, L"TRACK" },
{ NULL, TKP_TRACKVERT, L"TRACKVERT" },
{ L"TREEVIEW", 0, NULL },
{ NULL, TVP_GLYPH, L"GLYPH" },
{ NULL, TVP_TREEITEM, L"TREEITEM" },
{ L"WINDOW", 0, NULL },
{ NULL, WP_CAPTION, L"CAPTION" },
{ NULL, WP_CLOSEBUTTON, L"CLOSEBUTTON" },
{ NULL, WP_FRAMEBOTTOM, L"FRAME" },
{ NULL, WP_FRAMELEFT, L"FRAME" },
{ NULL, WP_FRAMERIGHT, L"FRAME" },
{ NULL, WP_HELPBUTTON, L"HELPBUTTON" },
{ NULL, WP_HORZSCROLL, L"HORZSCROLL" },
{ NULL, WP_HORZTHUMB, L"HORZTHUMB" },
{ NULL, WP_MAXBUTTON, L"MAXBUTTON" },
{ NULL, WP_MAXCAPTION, L"MAXCAPTION" },
{ NULL, WP_MDICLOSEBUTTON, L"CLOSEBUTTON" },
{ NULL, WP_MDIHELPBUTTON, L"HELPBUTTON" },
{ NULL, WP_MDIMINBUTTON, L"MINBUTTON" },
{ NULL, WP_MDIRESTOREBUTTON, L"RESTOREBUTTON" },
{ NULL, WP_MDISYSBUTTON, L"SYSBUTTON" },
{ NULL, WP_MINBUTTON, L"MINBUTTON" },
{ NULL, WP_MINCAPTION, L"MINCAPTION" },
{ NULL, WP_RESTOREBUTTON, L"RESTOREBUTTON" },
{ NULL, WP_SMALLCAPTION, L"CAPTION" },
{ NULL, WP_SMALLCLOSEBUTTON, L"CLOSEBUTTON" },
{ NULL, WP_SMALLFRAMEBOTTOM, L"FRAME" },
{ NULL, WP_SMALLFRAMELEFT, L"FRAME" },
{ NULL, WP_SMALLFRAMERIGHT, L"FRAME" },
{ NULL, WP_SMALLMAXCAPTION, L"MAXCAPTION" },
{ NULL, WP_SMALLMINCAPTION, L"MINCAPTION" },
{ NULL, WP_SYSBUTTON, L"SYSBUTTON" },
{ NULL, WP_VERTSCROLL, L"HORZSCROLL" },
{ NULL, WP_VERTTHUMB, L"HORZTHUMB" },
};
class state_link: public std::unary_function<struct state_mapping_t, void>
{
private:
tm_classes_t::iterator m_class;
public:
void operator()(const struct state_mapping_t& mapping_)
{
// switch to a new class
if(mapping_.classname)
m_class = tm_classes.find(std::wstring(mapping_.classname));
// no mapping, or class not found
if(mapping_.states == NULL || m_class == tm_classes.end()) return;
tm_state_enums_t::iterator states =
tm_state_enums.find(std::wstring(mapping_.states));
// unknown set of states
if(states == tm_state_enums.end()) return;
tm_parts_t::iterator part = m_class->second.find(mapping_.partid);
// unknown part
if(part == m_class->second.end()) return;
// success
part->second.states = states;
}
};
}
int main(int argc, char * argv[])
{
try
{
struct TMSCHEMAINFO const & schema = *GetSchemaInfo();
// build the tables of properties, classes, parts and states
std::for_each
(
schema.pPropTable,
schema.pPropTable + schema.iPropCount,
tmdump::schema_scan()
);
// link parts to states
std::for_each
(
tmdump::state_map,
tmdump::state_map + sizeof(tmdump::state_map) / sizeof(tmdump::state_map[0]),
tmdump::state_link()
);
::InitCommonControls();
::SetThemeAppProperties(STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS);
// dump the current values of all properties
for
(
tmdump::tm_classes_t::iterator p = tmdump::tm_classes.begin();
p != tmdump::tm_classes.end();
++ p
)
{
const std::wstring& class_name = p->first;
// open the theme data for the current class
class htheme_t
{
public:
HTHEME m_handle;
htheme_t(HTHEME handle_): m_handle(handle_) { }
~htheme_t() { ::CloseThemeData(m_handle); }
operator HTHEME() { return m_handle; }
}
data = ::OpenThemeData(NULL, class_name.c_str());
// failure
if(data == NULL)
{
std::fwprintf
(
stderr,
L"OpenThemeData(\"%s\") failed, error %d\n",
class_name.c_str(),
GetLastError()
);
continue;
}
// class name
std::fwprintf(stdout, L"%s\n", p->first.c_str());
// dump system properties
for
(
tmdump::tm_properties_t::iterator p = tmdump::tm_properties.begin();
p != tmdump::tm_properties.end();
++ p
)
{
switch(p->type)
{
case TMT_POSITION:
case TMT_MARGINS:
case TMT_RECT:
case TMT_INTLIST:
continue;
}
// property name
std::fwprintf(stdout, L"\t%s = ", p->name.c_str());
HRESULT hres;
switch(p->type)
{
// string
case TMT_STRING:
case TMT_FILENAME: // FIXME
{
WCHAR buffer[256];
if(FAILED(hres = GetThemeSysString(data, p->id, buffer, 256))) break;
std::fwprintf(stdout, L"string: \"%s\"", buffer);
break;
}
// integer
case TMT_INT:
{
int val;
if(FAILED(hres = GetThemeSysInt(data, p->id, &val))) break;
std::fwprintf(stdout, L"int: %d", val);
break;
}
// boolean
case TMT_BOOL:
{
SetLastError(0);
BOOL val = GetThemeSysBool(data, p->id);
if(FAILED(hres = GetLastError())) break;
std::fwprintf(stdout, L"bool: %s", val ? L"true" : L"false");
break;
}
// color
case TMT_COLOR:
{
SetLastError(0);
COLORREF val = GetThemeSysColor(data, p->id);
if(FAILED(hres = GetLastError())) break;
std::fwprintf
(
stdout,
L"rgb: %d, %d, %d",
GetRValue(val),
GetGValue(val),
GetBValue(val)
);
break;
}
// size
case TMT_SIZE:
{
SetLastError(0);
int val = GetThemeSysSize(data, p->id);
if(FAILED(hres = GetLastError())) break;
std::fwprintf(stdout, L"size: %d", val);
break;
}
// font
case TMT_FONT:
{
LOGFONTW val;
if(FAILED(hres = GetThemeSysFont(data, p->id, &val))) break;
std::fwprintf(stdout, L"font: %s", val.lfFaceName);
break;
}
// enumerated integer
case TMT_ENUM:
{
int val;
if(FAILED(hres = GetThemeSysInt(data, p->id, &val))) break;
std::fwprintf(stdout, L"enum(%s): ", p->enum_type->first.c_str());
tmdump::tm_enum_t::iterator enumval = p->enum_type->second.find(val);
if(enumval == p->enum_type->second.end())
std::fwprintf(stdout, L"<%d>", val);
else
std::fwprintf(stdout, L"%s", enumval->second.c_str());
break;
}
}
if(FAILED(hres)) std::fwprintf(stdout, L"<error %08X>", hres);
std::fputwc(L'\n', stdout);
}
}
}
catch(std::exception e)
{
std::cerr << e.what() << std::endl;
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
// EOF
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -