ReactOS  0.4.14-dev-614-gbfd8a84
themedump.cpp
Go to the documentation of this file.
1 #include <cstdlib>
2 #include <cstdio>
3 #include <cwchar>
4 #include <iostream>
5 #include <exception>
6 #include <algorithm>
7 #include <functional>
8 #include <list>
9 #include <string>
10 #include <map>
11 
12 #define WIN32_LEAN_AND_MEAN
13 #define UNICODE
14 #include <windows.h>
15 #include <commctrl.h>
16 #include <uxtheme.h>
17 #include <tmschema.h>
18 
19 #ifdef __BORLANDC__
20 #pragma hdrstop
21 #endif
22 
23 #define SCHEMA_STRINGS
24 #define TMT_ENUMDEF (0x0D) // undocumented
25 #define TMT_ENUMVAL (0x0E) // undocumented
26 #define TMT_ENUM (0x0F) // undocumented
27 #include <tmschema.h>
28 
29 namespace tmdump
30 {
31  typedef std::map<int, std::wstring> tm_enum_t;
32  typedef std::map<std::wstring, tm_enum_t> tm_enums_t;
33 
35  {
36  std::wstring name;
37  int id;
38  int type;
39  tm_enums_t::iterator enum_type;
40  };
41 
43 
44  typedef std::list<tm_property_t> tm_properties_t;
45 
47 
48  typedef std::map<int, std::wstring> tm_states_t;
49  typedef std::map<std::wstring, tm_states_t> tm_state_enums_t;
50 
52 
53  struct tm_part_t
54  {
55  std::wstring name;
56  tm_state_enums_t::iterator states;
57  };
58 
59  typedef std::map<int, tm_part_t> tm_parts_t;
60 
61  typedef std::map<std::wstring, tm_parts_t> tm_classes_t;
62 
64 
65  class print
66  {
67  protected:
69 
70  public:
71  print(std::FILE * out_): m_out(out_) { }
72  };
73 
75  public print,
76  public std::unary_function<tm_property_t, void>
77  {
78  private:
79  wchar_t const * type_name(const tm_property_t& property_)
80  {
81  switch(property_.type)
82  {
83  case TMT_STRING: return L"LPWSTR";
84  case TMT_INT: return L"int";
85  case TMT_BOOL: return L"BOOL";
86  case TMT_COLOR: return L"COLORREF";
87  case TMT_MARGINS: return L"MARGINS";
88  case TMT_FILENAME: return L"LPWSTR";
89  case TMT_SIZE: return L"SIZE";
90  case TMT_POSITION: return L"POINT";
91  case TMT_RECT: return L"RECT";
92  case TMT_FONT: return L"LOGFONT";
93  case TMT_INTLIST: return L"INTLIST";
94  case TMT_ENUM: return property_.enum_type->first.c_str();
95  default: return L"<unknown>";
96  }
97  }
98 
99  public:
100  property_print(std::FILE * out_): print(out_) { }
101 
102  void operator()(const tm_property_t& property_)
103  {
105  (
106  m_out,
107  L"%s\t%s\t%d\n",
108  type_name(property_),
109  property_.name.c_str(),
110  property_.id
111  );
112  }
113  };
114 
115  class part_print:
116  public print,
117  public std::unary_function<tm_parts_t::value_type, void>
118  {
119  public:
120  part_print(std::FILE * out_): print(out_) { }
121 
122  void operator()(const tm_parts_t::value_type& part_)
123  {
125  (
126  m_out,
127  L"\t%s\t%d\t%s\n",
128  part_.second.name.c_str(),
129  part_.first,
130  part_.second.states == tm_state_enums.end() ?
131  L"-" :
132  part_.second.states->first.c_str()
133  );
134  }
135  };
136 
137  class class_print:
138  public print,
139  public std::unary_function<tm_classes_t::value_type, void>
140  {
141  public:
142  class_print(std::FILE * out_): print(out_) { }
143 
144  void operator()(const tm_classes_t::value_type& class_)
145  {
146  std::fwprintf(m_out, L"%s\n", class_.first.c_str());
147 
149  (
150  class_.second.begin(),
151  class_.second.end(),
153  );
154  }
155  };
156 
157  class schema_scan: public std::unary_function<struct TMPROPINFO, void>
158  {
159  private:
160  enum
161  {
166  }
167  m_state;
168 
169  union
170  {
171  void * p_none;
175  }
176  m_cur;
177 
178  bool has_suffix(const std::wstring& name_, const std::wstring& suffix_)
179  {
180  if(name_.length() <= suffix_.length()) return false;
181 
182  return std::equal
183  (
184  name_.end() - suffix_.length(),
185  name_.end(),
186  suffix_.begin()
187  );
188  }
189 
190  public:
192 
193  void operator()(const struct TMPROPINFO& prop_)
194  {
195  static const std::wstring parts_suffix(L"PARTS");
196  static const std::wstring states_suffix(L"STATES");
197 
198  std::wstring name(prop_.pszName);
199 
200  // Compound declaration
201  if(prop_.sEnumVal == TMT_ENUMDEF && prop_.bPrimVal == TMT_ENUMDEF)
202  {
203  // class
204  if(has_suffix(name, parts_suffix))
205  {
206  m_state = at_parts;
207  m_cur.p_class = &
208  (
209  tm_classes
210  [
211  std::wstring(name.begin(), name.end() - parts_suffix.length())
212  ] = tm_parts_t()
213  );
214  }
215  // states
216  else if(has_suffix(name, states_suffix))
217  {
218  m_state = at_states;
219  m_cur.p_states = &
220  (
222  [
223  std::wstring(name.begin(), name.end() - states_suffix.length())
224  ] = tm_states_t()
225  );
226  }
227  // enumeration
228  else
229  {
230  m_state = at_enum;
231  m_cur.p_enum = &(tm_enums[name] = tm_enum_t());
232  }
233  }
234  // Enumeration member
235  else if(prop_.bPrimVal == TMT_ENUMVAL) switch(m_state)
236  {
237  // enumeration member
238  case at_enum:
239  {
240  (*m_cur.p_enum)[prop_.sEnumVal] = name;
241  break;
242  }
243 
244  // class part
245  case at_parts:
246  {
247  tm_part_t part;
248  part.name = name;
249  part.states = tm_state_enums.end();
250  (*m_cur.p_class)[prop_.sEnumVal] = part;
251  break;
252  }
253 
254  // state
255  case at_states:
256  {
257  (*m_cur.p_states)[prop_.sEnumVal] = name;
258  break;
259  }
260  }
261  // Primitive type
262  else if(prop_.sEnumVal == prop_.bPrimVal)
263  {
264  m_state = at_none;
265  m_cur.p_none = NULL;
266  }
267  // Property
268  else
269  {
270  m_state = at_none;
271  m_cur.p_none = NULL;
272 
274 
275  property.name = name;
276  property.id = prop_.sEnumVal;
277  property.type = prop_.bPrimVal;
278 
279  if(prop_.bPrimVal == TMT_ENUM)
280  property.enum_type = tm_enums.find(name);
281 
282  tm_properties.push_back(property);
283  }
284  }
285  };
286 
288  {
290  int partid;
292  };
293 
295  {
296  { L"BUTTON", 0, NULL },
297  { NULL, BP_CHECKBOX, L"CHECKBOX" },
298  { NULL, BP_GROUPBOX, L"GROUPBOX" },
299  { NULL, BP_PUSHBUTTON, L"PUSHBUTTON" },
300  { NULL, BP_RADIOBUTTON, L"RADIOBUTTON" },
301  { L"CLOCK", CLP_TIME, L"CLOCK" },
302  { L"COMBOBOX", CP_DROPDOWNBUTTON, L"COMBOBOX" },
303  { L"EDIT", EP_EDITTEXT, L"EDITTEXT" },
304  { L"EXPLORERBAR", 0, NULL },
305  { NULL, EBP_HEADERCLOSE, L"HEADERCLOSE" },
306  { NULL, EBP_HEADERPIN, L"HEADERPIN" },
307  { NULL, EBP_IEBARMENU, L"IEBARMENU" },
308  { NULL, EBP_NORMALGROUPCOLLAPSE, L"NORMALGROUPCOLLAPSE" },
309  { NULL, EBP_NORMALGROUPEXPAND, L"NORMALGROUPEXPAND" },
310  { NULL, EBP_SPECIALGROUPCOLLAPSE, L"SPECIALGROUPCOLLAPSE"},
311  { NULL, EBP_SPECIALGROUPEXPAND, L"SPECIALGROUPEXPAND" },
312  { L"HEADER", 0, NULL },
313  { NULL, HP_HEADERITEM, L"HEADERITEM" },
314  { NULL, HP_HEADERITEMLEFT, L"HEADERITEMLEFT" },
315  { NULL, HP_HEADERITEMRIGHT, L"HEADERITEMRIGHT" },
316  { NULL, HP_HEADERSORTARROW, L"HEADERSORTARROW" },
317  { L"LISTVIEW", LVP_LISTITEM, L"LISTITEM " },
318  { L"MENU", 0, NULL },
319  { NULL, MP_MENUBARDROPDOWN, L"MENU" },
320  { NULL, MP_MENUBARITEM, L"MENU" },
321  { NULL, MP_CHEVRON, L"MENU" },
322  { NULL, MP_MENUDROPDOWN, L"MENU" },
323  { NULL, MP_MENUITEM, L"MENU" },
324  { NULL, MP_SEPARATOR, L"MENU" },
325  { L"MENUBAND", MDP_NEWAPPBUTTON, L"MENUBAND" },
326  { L"PAGE", 0, NULL },
327  { NULL, PGRP_DOWN, L"DOWN" },
328  { NULL, PGRP_DOWNHORZ, L"DOWNHORZ" },
329  { NULL, PGRP_UP, L"UP" },
330  { NULL, PGRP_UPHORZ, L"UPHORZ" },
331  { L"REBAR", RP_CHEVRON, L"CHEVRON" },
332  { L"SCROLLBAR", 0, NULL },
333  { NULL, SBP_ARROWBTN, L"ARROWBTN" },
334  { NULL, SBP_LOWERTRACKHORZ, L"SCROLLBAR" },
335  { NULL, SBP_LOWERTRACKVERT, L"SCROLLBAR" },
336  { NULL, SBP_THUMBBTNHORZ, L"SCROLLBAR" },
337  { NULL, SBP_THUMBBTNVERT, L"SCROLLBAR" },
338  { NULL, SBP_UPPERTRACKHORZ, L"SCROLLBAR" },
339  { NULL, SBP_UPPERTRACKVERT, L"SCROLLBAR" },
340  { NULL, SBP_SIZEBOX, L"SIZEBOX" },
341  { L"SPIN", 0, NULL },
342  { NULL, SPNP_DOWN, L"DOWN" },
343  { NULL, SPNP_DOWNHORZ, L"DOWNHORZ" },
344  { NULL, SPNP_UP, L"UP" },
345  { NULL, SPNP_UPHORZ, L"UPHORZ" },
346  { L"STARTPANEL", 0, NULL },
347  { NULL, SPP_LOGOFFBUTTONS, L"LOGOFFBUTTONS" },
348  { NULL, SPP_MOREPROGRAMSARROW, L"MOREPROGRAMSARROW" },
349  { L"TAB", 0, NULL },
350  { NULL, TABP_TABITEM, L"TABITEM" },
351  { NULL, TABP_TABITEMBOTHEDGE, L"TABITEMBOTHEDGE" },
352  { NULL, TABP_TABITEMLEFTEDGE, L"TABITEMLEFTEDGE" },
353  { NULL, TABP_TABITEMRIGHTEDGE, L"TABITEMRIGHTEDGE" },
354  { NULL, TABP_TOPTABITEM, L"TOPTABITEM" },
355  { NULL, TABP_TOPTABITEMBOTHEDGE, L"TOPTABITEMBOTHEDGE" },
356  { NULL, TABP_TOPTABITEMLEFTEDGE, L"TOPTABITEMLEFTEDGE" },
357  { NULL, TABP_TOPTABITEMRIGHTEDGE, L"TOPTABITEMRIGHTEDGE" },
358  { L"TOOLBAR", 0, NULL },
359  { NULL, TP_BUTTON, L"TOOLBAR" },
360  { NULL, TP_DROPDOWNBUTTON, L"TOOLBAR" },
361  { NULL, TP_SPLITBUTTON, L"TOOLBAR" },
362  { NULL, TP_SPLITBUTTONDROPDOWN, L"TOOLBAR" },
363  { NULL, TP_SEPARATOR, L"TOOLBAR" },
364  { NULL, TP_SEPARATORVERT, L"TOOLBAR" },
365  { L"TOOLTIP", 0, NULL },
366  { NULL, TTP_BALLOON, L"BALLOON" },
367  { NULL, TTP_BALLOONTITLE, L"BALLOON" },
368  { NULL, TTP_CLOSE, L"CLOSE" },
369  { NULL, TTP_STANDARD, L"STANDARD" },
370  { NULL, TTP_STANDARDTITLE, L"STANDARD" },
371  { L"TRACKBAR", 0, NULL },
372  { NULL, TKP_THUMB, L"THUMB" },
373  { NULL, TKP_THUMBBOTTOM, L"THUMBBOTTOM" },
374  { NULL, TKP_THUMBLEFT, L"THUMBLEFT" },
375  { NULL, TKP_THUMBRIGHT, L"THUMBRIGHT" },
376  { NULL, TKP_THUMBTOP, L"THUMBTOP" },
377  { NULL, TKP_THUMBVERT, L"THUMBVERT" },
378  { NULL, TKP_TICS, L"TICS" },
379  { NULL, TKP_TICSVERT, L"TICSVERT" },
380  { NULL, TKP_TRACK, L"TRACK" },
381  { NULL, TKP_TRACKVERT, L"TRACKVERT" },
382  { L"TREEVIEW", 0, NULL },
383  { NULL, TVP_GLYPH, L"GLYPH" },
384  { NULL, TVP_TREEITEM, L"TREEITEM" },
385  { L"WINDOW", 0, NULL },
386  { NULL, WP_CAPTION, L"CAPTION" },
387  { NULL, WP_CLOSEBUTTON, L"CLOSEBUTTON" },
388  { NULL, WP_FRAMEBOTTOM, L"FRAME" },
389  { NULL, WP_FRAMELEFT, L"FRAME" },
390  { NULL, WP_FRAMERIGHT, L"FRAME" },
391  { NULL, WP_HELPBUTTON, L"HELPBUTTON" },
392  { NULL, WP_HORZSCROLL, L"HORZSCROLL" },
393  { NULL, WP_HORZTHUMB, L"HORZTHUMB" },
394  { NULL, WP_MAXBUTTON, L"MAXBUTTON" },
395  { NULL, WP_MAXCAPTION, L"MAXCAPTION" },
396  { NULL, WP_MDICLOSEBUTTON, L"CLOSEBUTTON" },
397  { NULL, WP_MDIHELPBUTTON, L"HELPBUTTON" },
398  { NULL, WP_MDIMINBUTTON, L"MINBUTTON" },
399  { NULL, WP_MDIRESTOREBUTTON, L"RESTOREBUTTON" },
400  { NULL, WP_MDISYSBUTTON, L"SYSBUTTON" },
401  { NULL, WP_MINBUTTON, L"MINBUTTON" },
402  { NULL, WP_MINCAPTION, L"MINCAPTION" },
403  { NULL, WP_RESTOREBUTTON, L"RESTOREBUTTON" },
404  { NULL, WP_SMALLCAPTION, L"CAPTION" },
405  { NULL, WP_SMALLCLOSEBUTTON, L"CLOSEBUTTON" },
406  { NULL, WP_SMALLFRAMEBOTTOM, L"FRAME" },
407  { NULL, WP_SMALLFRAMELEFT, L"FRAME" },
408  { NULL, WP_SMALLFRAMERIGHT, L"FRAME" },
409  { NULL, WP_SMALLMAXCAPTION, L"MAXCAPTION" },
410  { NULL, WP_SMALLMINCAPTION, L"MINCAPTION" },
411  { NULL, WP_SYSBUTTON, L"SYSBUTTON" },
412  { NULL, WP_VERTSCROLL, L"HORZSCROLL" },
413  { NULL, WP_VERTTHUMB, L"HORZTHUMB" },
414  };
415 
416  class state_link: public std::unary_function<struct state_mapping_t, void>
417  {
418  private:
419  tm_classes_t::iterator m_class;
420 
421  public:
422  void operator()(const struct state_mapping_t& mapping_)
423  {
424  // switch to a new class
425  if(mapping_.classname)
426  m_class = tm_classes.find(std::wstring(mapping_.classname));
427 
428  // no mapping, or class not found
429  if(mapping_.states == NULL || m_class == tm_classes.end()) return;
430 
431  tm_state_enums_t::iterator states =
432  tm_state_enums.find(std::wstring(mapping_.states));
433 
434  // unknown set of states
435  if(states == tm_state_enums.end()) return;
436 
437  tm_parts_t::iterator part = m_class->second.find(mapping_.partid);
438 
439  // unknown part
440  if(part == m_class->second.end()) return;
441 
442  // success
443  part->second.states = states;
444  }
445  };
446 }
447 
448 int main(int argc, char * argv[])
449 {
450  try
451  {
452  struct TMSCHEMAINFO const & schema = *GetSchemaInfo();
453 
454  // build the tables of properties, classes, parts and states
456  (
457  schema.pPropTable,
458  schema.pPropTable + schema.iPropCount,
460  );
461 
462  // link parts to states
464  (
468  );
469 
471  ::SetThemeAppProperties(STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS);
472 
473  // dump the current values of all properties
474  for
475  (
476  tmdump::tm_classes_t::iterator p = tmdump::tm_classes.begin();
477  p != tmdump::tm_classes.end();
478  ++ p
479  )
480  {
481  const std::wstring& class_name = p->first;
482 
483  // open the theme data for the current class
484  class htheme_t
485  {
486  public:
487  HTHEME m_handle;
488 
489  htheme_t(HTHEME handle_): m_handle(handle_) { }
490  ~htheme_t() { ::CloseThemeData(m_handle); }
491 
492  operator HTHEME() { return m_handle; }
493  }
494  data = ::OpenThemeData(NULL, class_name.c_str());
495 
496  // failure
497  if(data == NULL)
498  {
500  (
501  stderr,
502  L"OpenThemeData(\"%s\") failed, error %d\n",
503  class_name.c_str(),
504  GetLastError()
505  );
506 
507  continue;
508  }
509 
510  // class name
511  std::fwprintf(stdout, L"%s\n", p->first.c_str());
512 
513  // dump system properties
514  for
515  (
516  tmdump::tm_properties_t::iterator p = tmdump::tm_properties.begin();
517  p != tmdump::tm_properties.end();
518  ++ p
519  )
520  {
521  switch(p->type)
522  {
523  case TMT_POSITION:
524  case TMT_MARGINS:
525  case TMT_RECT:
526  case TMT_INTLIST:
527  continue;
528  }
529 
530  // property name
531  std::fwprintf(stdout, L"\t%s = ", p->name.c_str());
532 
533  HRESULT hres;
534 
535  switch(p->type)
536  {
537  // string
538  case TMT_STRING:
539  case TMT_FILENAME: // FIXME
540  {
541  WCHAR buffer[256];
542  if(FAILED(hres = GetThemeSysString(data, p->id, buffer, 256))) break;
543  std::fwprintf(stdout, L"string: \"%s\"", buffer);
544  break;
545  }
546 
547  // integer
548  case TMT_INT:
549  {
550  int val;
551  if(FAILED(hres = GetThemeSysInt(data, p->id, &val))) break;
552  std::fwprintf(stdout, L"int: %d", val);
553  break;
554  }
555 
556  // boolean
557  case TMT_BOOL:
558  {
559  SetLastError(0);
560  BOOL val = GetThemeSysBool(data, p->id);
561  if(FAILED(hres = GetLastError())) break;
562  std::fwprintf(stdout, L"bool: %s", val ? L"true" : L"false");
563  break;
564  }
565 
566  // color
567  case TMT_COLOR:
568  {
569  SetLastError(0);
570 
572 
573  if(FAILED(hres = GetLastError())) break;
574 
576  (
577  stdout,
578  L"rgb: %d, %d, %d",
579  GetRValue(val),
580  GetGValue(val),
581  GetBValue(val)
582  );
583 
584  break;
585  }
586 
587  // size
588  case TMT_SIZE:
589  {
590  SetLastError(0);
591  int val = GetThemeSysSize(data, p->id);
592  if(FAILED(hres = GetLastError())) break;
593  std::fwprintf(stdout, L"size: %d", val);
594  break;
595  }
596 
597  // font
598  case TMT_FONT:
599  {
600  LOGFONTW val;
601  if(FAILED(hres = GetThemeSysFont(data, p->id, &val))) break;
602  std::fwprintf(stdout, L"font: %s", val.lfFaceName);
603  break;
604  }
605 
606  // enumerated integer
607  case TMT_ENUM:
608  {
609  int val;
610  if(FAILED(hres = GetThemeSysInt(data, p->id, &val))) break;
611 
612  std::fwprintf(stdout, L"enum(%s): ", p->enum_type->first.c_str());
613 
614  tmdump::tm_enum_t::iterator enumval = p->enum_type->second.find(val);
615 
616  if(enumval == p->enum_type->second.end())
617  std::fwprintf(stdout, L"<%d>", val);
618  else
619  std::fwprintf(stdout, L"%s", enumval->second.c_str());
620 
621  break;
622  }
623  }
624 
625  if(FAILED(hres)) std::fwprintf(stdout, L"<error %08X>", hres);
626 
627  std::fputwc(L'\n', stdout);
628  }
629 
630  }
631  }
632  catch(std::exception e)
633  {
634  std::cerr << e.what() << std::endl;
635  return EXIT_FAILURE;
636  }
637 
638  return EXIT_SUCCESS;
639 }
640 
641 // EOF
642 
tm_enums_t::iterator enum_type
Definition: themedump.cpp:39
bool has_suffix(const std::wstring &name_, const std::wstring &suffix_)
Definition: themedump.cpp:178
tm_states_t * p_states
Definition: themedump.cpp:174
int WINAPI GetThemeSysSize(HTHEME hTheme, int iSizeID)
Definition: metric.c:154
static int argc
Definition: ServiceArgs.c:12
#define TMT_BOOL
Definition: vssym32.h:137
std::map< int, tm_part_t > tm_parts_t
Definition: themedump.cpp:59
#define TMT_ENUM
Definition: themedump.cpp:26
#define exception
Definition: math.h:26
#define TMT_INTLIST
Definition: vssym32.h:145
void operator()(const tm_classes_t::value_type &class_)
Definition: themedump.cpp:144
HRESULT WINAPI GetThemeSysInt(HTHEME hTheme, int iIntID, int *piValue)
Definition: metric.c:134
#define GetRValue(rgb)
Definition: wingdi.h:2934
#define equal(x, y)
Definition: reader.cc:56
std::FILE * m_out
Definition: themedump.cpp:68
static HTHEME(WINAPI *pOpenThemeDataEx)(HWND
static tm_properties_t tm_properties
Definition: themedump.cpp:46
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
GLuint buffer
Definition: glext.h:5915
#define TMT_ENUMDEF
Definition: themedump.cpp:24
static const tmdump::state_mapping_t state_map[]
Definition: themedump.cpp:294
#define argv
Definition: mplay32.c:18
#define TMT_MARGINS
Definition: vssym32.h:139
FILE * stdout
tm_enum_t * p_enum
Definition: themedump.cpp:172
wchar_t const * type_name(const tm_property_t &property_)
Definition: themedump.cpp:79
#define GetGValue(rgb)
Definition: wingdi.h:2935
#define EXIT_SUCCESS
Definition: rdjpgcom.c:55
basic_ostream< _CharT, _Traits > &_STLP_CALL endl(basic_ostream< _CharT, _Traits > &__os)
Definition: _ostream.h:357
class_print(std::FILE *out_)
Definition: themedump.cpp:142
unsigned int BOOL
Definition: ntddk_ex.h:94
HRESULT WINAPI GetThemeSysFont(HTHEME hTheme, int iFontID, LOGFONTW *plf)
Definition: metric.c:91
#define e
Definition: ke_i.h:82
#define TMT_STRING
Definition: vssym32.h:135
void WINAPI SetThemeAppProperties(DWORD dwFlags)
Definition: system.c:941
_Check_return_opt_ _CRTIMP int __cdecl fwprintf(_Inout_ FILE *_File, _In_z_ _Printf_format_string_ const wchar_t *_Format,...)
static tm_enums_t tm_enums
Definition: themedump.cpp:42
smooth NULL
Definition: ftsmooth.c:416
#define TMT_FONT
Definition: vssym32.h:144
static tm_classes_t tm_classes
Definition: themedump.cpp:63
void operator()(const tm_parts_t::value_type &part_)
Definition: themedump.cpp:122
std::list< tm_property_t > tm_properties_t
Definition: themedump.cpp:44
#define TMT_RECT
Definition: vssym32.h:143
static clock_t begin
Definition: xmllint.c:466
GLuint GLfloat * val
Definition: glext.h:7180
std::map< std::wstring, tm_parts_t > tm_classes_t
Definition: themedump.cpp:61
HRESULT hres
Definition: protocol.c:465
property_print(std::FILE *out_)
Definition: themedump.cpp:100
__wchar_t WCHAR
Definition: xmlstorage.h:180
_STLP_DECLSPEC _Stl_aligned_buffer< ostream > cerr
Definition: iostream.cpp:102
LONG HRESULT
Definition: typedefs.h:77
DWORD COLORREF
Definition: windef.h:300
_STLP_BEGIN_NAMESPACE _STLP_INLINE_LOOP _Function for_each(_InputIter __first, _InputIter __last, _Function __f)
Definition: _algo.h:59
union tmdump::schema_scan::@1552 m_cur
#define EXIT_FAILURE
Definition: jerror.c:33
#define SetLastError(x)
Definition: compat.h:417
HTHEME WINAPI OpenThemeData(HWND hwnd, LPCWSTR classlist)
Definition: system.c:835
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define TMT_FILENAME
Definition: vssym32.h:140
static const WCHAR L[]
Definition: oid.c:1250
COLORREF WINAPI GetThemeSysColor(HTHEME hTheme, int iColorID)
Definition: metric.c:58
std::map< std::wstring, tm_states_t > tm_state_enums_t
Definition: themedump.cpp:49
std::map< int, std::wstring > tm_states_t
Definition: themedump.cpp:48
int main(int argc, char *argv[])
Definition: themedump.cpp:448
tm_parts_t * p_class
Definition: themedump.cpp:173
BSTR name
Definition: locator.c:107
tm_state_enums_t::iterator states
Definition: themedump.cpp:56
#define TMT_ENUMVAL
Definition: themedump.cpp:25
std::wstring name
Definition: themedump.cpp:36
#define TMT_INT
Definition: vssym32.h:136
void operator()(const tm_property_t &property_)
Definition: themedump.cpp:102
enum tmdump::schema_scan::@1551 m_state
const WCHAR * schema
print(std::FILE *out_)
Definition: themedump.cpp:71
void operator()(const struct TMPROPINFO &prop_)
Definition: themedump.cpp:193
part_print(std::FILE *out_)
Definition: themedump.cpp:120
#define TMT_POSITION
Definition: vssym32.h:142
#define TMT_COLOR
Definition: vssym32.h:138
Definition: name.c:38
FILE * stderr
#define const
Definition: zconf.h:230
HRESULT WINAPI GetThemeSysString(HTHEME hTheme, int iStringID, LPWSTR pszStringBuff, int cchMaxStringChars)
Definition: metric.c:205
#define GetBValue(rgb)
Definition: wingdi.h:2936
std::map< std::wstring, tm_enum_t > tm_enums_t
Definition: themedump.cpp:32
#define FILE
Definition: nsiface.idl:2609
VOID WINAPI InitCommonControls(void)
Definition: commctrl.c:863
GLfloat GLfloat p
Definition: glext.h:8902
WCHAR * LPWSTR
Definition: xmlstorage.h:184
_Check_return_opt_ _CRTIMP wint_t __cdecl fputwc(_In_ wchar_t _Ch, _Inout_ FILE *_File)
static tm_state_enums_t tm_state_enums
Definition: themedump.cpp:51
BOOL WINAPI GetThemeSysBool(HTHEME hTheme, int iBoolID)
Definition: metric.c:26
std::map< int, std::wstring > tm_enum_t
Definition: themedump.cpp:31
std::wstring name
Definition: themedump.cpp:55
HRESULT WINAPI CloseThemeData(HTHEME hTheme)
Definition: system.c:950
#define TMT_SIZE
Definition: vssym32.h:141
GLuint const GLchar * name
Definition: glext.h:6031