├── AUTHORS ├── CMakeLists.txt ├── README.md ├── .github └── workflows │ └── ci-build.yml ├── src ├── res │ └── manifest.xml ├── CMakeLists.txt ├── themeview.h ├── compat.h ├── resource.h ├── db.h ├── misc.h ├── resource.rc ├── themeview.c ├── misc.c ├── main.c └── db.c └── LICENSE.md /AUTHORS: -------------------------------------------------------------------------------- 1 | Martin Mitas (aka Morous) 2 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | cmake_minimum_required(VERSION 3.1) 3 | project(ThemeExplorer C) 4 | 5 | 6 | set(CMAKE_CONFIGURATION_TYPES Debug Release RelWithDebInfo MinSizeRel) 7 | if ("${CMAKE_BUILD_TYPE}" STREQUAL "") 8 | set(CMAKE_BUILD_TYPE $ENV{CMAKE_BUILD_TYPE}) 9 | endif() 10 | 11 | 12 | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) 13 | 14 | add_subdirectory(src) 15 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Theme Explorer 3 | 4 | 5 | ## What is it? 6 | 7 | This is a small tool to explore visual styles (aka themes) on Windows XP and 8 | later, as provided by `UXTHEME.DLL`. 9 | 10 | It has been developed as an auxiliary tool to be used during the development 11 | of the [mCtrl project](http://mctrl.org) but possibly other UI developers can 12 | find it useful too. 13 | 14 | The tool as well as its sources can be downloaded from mCtrl website: 15 | 16 | * http://mctrl.org/tools.php 17 | 18 | 19 | ## License 20 | 21 | Theme Explorer is covered with MIT license, see the file `LICENSE.md`. 22 | 23 | 24 | ## System requirements 25 | 26 | To run it, you need MS Windows XP or newer (because of `UXTHEME.DLL`), and to 27 | be really useful, you must have visual styles enabled in your Windows. 28 | -------------------------------------------------------------------------------- /.github/workflows/ci-build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | - pull_request 5 | - push 6 | 7 | jobs: 8 | windows-32: 9 | runs-on: windows-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | - uses: microsoft/setup-msbuild@v1.3.1 13 | - name: Configure 14 | run: cmake -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 17 2022" -A Win32 . 15 | - name: Build 16 | run: msbuild.exe c-reusables.sln /p:Configuration=Debug /p:Platform=Win32 17 | 18 | windows-64: 19 | runs-on: windows-latest 20 | steps: 21 | - uses: actions/checkout@v4 22 | - uses: microsoft/setup-msbuild@v1.3.1 23 | - name: Configure 24 | run: cmake -DCMAKE_BUILD_TYPE=Debug -G "Visual Studio 17 2022" -A x64 . 25 | - name: Build 26 | run: msbuild.exe c-reusables.sln /p:Configuration=Debug /p:Platform=x64 27 | -------------------------------------------------------------------------------- /src/res/manifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Theme Explorer 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | add_definitions(-DUNICODE -D_UNICODE) 3 | add_definitions(-D_WIN32_IE=0x0601 -D_WIN32_WINNT=0x0601 -DWINVER=_WIN32_WINNT) 4 | 5 | 6 | if("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU") 7 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -municode") 8 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mwindows -static-libgcc") 9 | elseif("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC") 10 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO /SUBSYSTEM:WINDOWS") 11 | add_definitions(/D_CRT_SECURE_NO_WARNINGS) 12 | set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd") 13 | set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT") 14 | set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} /MT") 15 | set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_RELEASE} /MT") 16 | endif() 17 | 18 | 19 | add_executable("ThemeExplorer" WIN32 20 | compat.h 21 | db.c 22 | db.h 23 | main.c 24 | misc.c 25 | misc.h 26 | resource.h 27 | resource.rc 28 | themeview.c 29 | themeview.h 30 | ) 31 | 32 | target_link_libraries("ThemeExplorer" comctl32 uxtheme) 33 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | 2 | # The MIT License (MIT) 3 | 4 | Copyright © 2012-2018 Martin Mitáš 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a 7 | copy of this software and associated documentation files (the “Software”), 8 | to deal in the Software without restriction, including without limitation 9 | the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 | and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included 14 | in all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS 17 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 22 | IN THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /src/themeview.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #ifndef TE_THEMEVIEW_H 26 | #define TE_THEMEVIEW_H 27 | 28 | 29 | void themeview_init(void); 30 | 31 | void themeview_setup(HWND win, const WCHAR* cls_name, const WCHAR* subcls_name, int part, int state); 32 | 33 | 34 | #endif /* TE_THEMEVIEW_H */ 35 | -------------------------------------------------------------------------------- /src/compat.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | #ifndef TE_COMPAT_H 25 | #define TE_COMPAT_H 26 | 27 | 28 | #include 29 | #include 30 | #include 31 | 32 | 33 | #ifndef BS_SPLITBUTTON 34 | #define BS_SPLITBUTTON 0x0000000CL 35 | #endif 36 | 37 | #ifndef TMT_DIBDATA 38 | #define TMT_DIBDATA 2 39 | #endif 40 | 41 | #ifndef TMT_GLYPHDIBDATA 42 | #define TMT_GLYPHDIBDATA 8 43 | #endif 44 | 45 | #ifndef GBF_DIRECT 46 | #define GBF_DIRECT 0x00000001 47 | #endif 48 | 49 | #ifndef GBF_COPY 50 | #define GBF_COPY 0x00000002 51 | #endif 52 | 53 | 54 | #endif /* TE_COMPAT_H */ 55 | -------------------------------------------------------------------------------- /src/resource.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #ifndef TE_RESOURCE_H 26 | #define TE_RESOURCE_H 27 | 28 | 29 | #define THEMEVIEW_CLASS "ThemeExplorer::ThemeView" 30 | #define THEMEVIEW_STYLE_DRAWTEXT 0x0001 31 | 32 | 33 | #define IDR_MAIN 100 34 | #define IDM_FILE_EXIT 200 35 | 36 | #define IDD_MAIN 500 37 | #define IDC_MAIN_TREEVIEW 501 38 | #define IDC_MAIN_CLASS 502 39 | #define IDC_MAIN_PART 503 40 | #define IDC_MAIN_STATE 504 41 | #define IDC_MAIN_THEMEVIEW_1 505 42 | #define IDC_MAIN_THEMEVIEW_2 506 43 | #define IDC_MAIN_THEMEVIEW_3 507 44 | #define IDC_MAIN_THEMEVIEW_4 508 45 | #define IDC_MAIN_THEMEVIEW_5 509 46 | #define IDC_MAIN_THEMEVIEW_6 510 47 | #define IDC_MAIN_THEMEVIEW_7 511 48 | #define IDC_MAIN_THEMEVIEW_8 512 49 | #define IDC_MAIN_THEMEVIEW_9 513 50 | #define IDC_MAIN_BITMAP_BKG 514 51 | #define IDC_MAIN_BITMAP_GLYPH 515 52 | #define IDC_MAIN_PROPSLIST 516 53 | #define IDC_MAIN_DUMMY 517 54 | 55 | #define IDC_MAIN_THEMEVIEW_FIRST IDC_MAIN_THEMEVIEW_1 56 | #define IDC_MAIN_THEMEVIEW_LAST IDC_MAIN_THEMEVIEW_9 57 | 58 | 59 | #endif /* TE_RESOURCE_H */ 60 | 61 | -------------------------------------------------------------------------------- /src/db.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #ifndef TE_DB_H 26 | #define TE_DB_H 27 | 28 | #include "misc.h" 29 | 30 | 31 | /****************************** 32 | *** Classes, parts, states *** 33 | ******************************/ 34 | 35 | typedef struct db_class_tag db_class_t; 36 | typedef struct db_part_tag db_part_t; 37 | typedef struct db_state_tag db_state_t; 38 | 39 | struct db_class_tag { 40 | const TCHAR* name; 41 | const TCHAR* subclass; 42 | const db_part_t* parts; 43 | int n_parts; 44 | }; 45 | 46 | struct db_part_tag { 47 | int id; 48 | const TCHAR* name; 49 | const TCHAR* display_name; 50 | const db_state_t* states; 51 | int n_states; 52 | }; 53 | 54 | struct db_state_tag { 55 | int id; 56 | const TCHAR* name; 57 | const TCHAR* display_name; 58 | }; 59 | 60 | extern const db_class_t* db_classes; 61 | extern int db_n_classes; 62 | 63 | 64 | void db_class_display_name(const db_class_t* cls, TCHAR* buffer, UINT bufsize); 65 | 66 | 67 | /****************** 68 | *** Properties *** 69 | ******************/ 70 | 71 | typedef struct db_type_tag db_type_t; 72 | typedef struct db_prop_tag db_prop_t; 73 | 74 | struct db_type_tag { 75 | int id; 76 | const TCHAR* name; 77 | const TCHAR* display_name; 78 | 79 | void (*to_string)(HTHEME /*theme*/, int /*part*/, int /*state*/, int /*prop*/, 80 | TCHAR* /*buffer*/, DWORD /*bufsize*/); 81 | }; 82 | 83 | struct db_prop_tag { 84 | const db_type_t* type; 85 | int id; 86 | const TCHAR* name; 87 | const TCHAR* display_name; 88 | }; 89 | 90 | extern const db_prop_t* db_props; 91 | extern int db_n_props; 92 | 93 | 94 | #endif /* TE_DB_H */ 95 | -------------------------------------------------------------------------------- /src/misc.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #ifndef TE_MISC_H 26 | #define TE_MISC_H 27 | 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | 34 | 35 | #include "resource.h" 36 | #include "compat.h" 37 | #include "themeview.h" 38 | 39 | 40 | #define TE_ARRAY_SIZE(array) (sizeof((array)) / sizeof((array)[0])) 41 | 42 | 43 | extern HINSTANCE te_instance; 44 | extern DWORD te_win_version; 45 | 46 | 47 | /* Checking OS version (compare with normal operators: ==, <, <= etc.) */ 48 | #define TE_WIN_VER(platform, major, minor) \ 49 | (((platform) << 16) | ((major) << 8) | ((minor) << 0)) 50 | 51 | #define TE_WIN_95 TE_WIN_VER(1, 4, 0) 52 | #define TE_WIN_98 TE_WIN_VER(1, 4, 10) 53 | #define TE_WIN_ME TE_WIN_VER(1, 4, 90) 54 | #define TE_WIN_NT4 TE_WIN_VER(2, 4, 0) 55 | #define TE_WIN_2000 TE_WIN_VER(2, 5, 0) 56 | #define TE_WIN_XP TE_WIN_VER(2, 5, 1) 57 | #define TE_WIN_S2003 TE_WIN_VER(2, 5, 2) 58 | #define TE_WIN_VISTA TE_WIN_VER(2, 6, 0) 59 | #define TE_WIN_S2008 TE_WIN_VER(2, 6, 0) 60 | #define TE_WIN_7 TE_WIN_VER(2, 6, 1) 61 | #define TE_WIN_S2008R2 TE_WIN_VER(2, 6, 1) 62 | #define TE_WIN_8 TE_WIN_VER(2, 6, 2) 63 | 64 | 65 | void te_init(HINSTANCE instance); 66 | 67 | INT_PTR te_dlgbox(const TCHAR* dlg_name, HWND parent, DLGPROC proc); 68 | 69 | 70 | /* Some UXTHEME.DLL functions are only available since more recent Windows 71 | * versions. So we wrapper them to keep compatibility with Windows XP. */ 72 | HRESULT te_GetThemeBitmap(HTHEME hTheme, int iPartId, int iStateId, int iPropId, ULONG dwFlags, HBITMAP *phBitmap); 73 | HRESULT te_GetThemeStream(HTHEME hTheme, int iPartId, int iStateId, int iPropId, void** ppvStream, DWORD *pcbStream, HINSTANCE hInst); 74 | 75 | #define GetThemeBitmap te_GetThemeBitmap 76 | #define GetThemeStream te_GetThemeStream 77 | 78 | 79 | #endif /* TE_MISC_H */ 80 | -------------------------------------------------------------------------------- /src/resource.rc: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #include 26 | #include "resource.h" 27 | #include "compat.h" 28 | 29 | 30 | /* Manifest enabling XP theme on Win XP */ 31 | 1 RT_MANIFEST res/manifest.xml 32 | 33 | 34 | /* Main menu */ 35 | IDR_MAIN MENU 36 | BEGIN 37 | POPUP "&File" 38 | BEGIN 39 | MENUITEM "E&xit", IDM_FILE_EXIT 40 | END 41 | END 42 | 43 | 44 | /* Main dialog */ 45 | IDD_MAIN DIALOGEX 100, 100, 500, 350 46 | STYLE WS_OVERLAPPEDWINDOW 47 | EXSTYLE WS_EX_DLGMODALFRAME 48 | CAPTION "Theme Explorer" 49 | MENU IDR_MAIN 50 | BEGIN 51 | CONTROL "", IDC_MAIN_TREEVIEW, WC_TREEVIEW, WS_TABSTOP | TVS_DISABLEDRAGDROP | TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_SHOWSELALWAYS, 5, 5, 180, 340, WS_EX_CLIENTEDGE 52 | CONTROL "Class:", -1, "STATIC", SS_LEFT, 190, 10, 20, 10 53 | CONTROL "", IDC_MAIN_CLASS, "STATIC", SS_LEFT, 225, 10, 170, 10 54 | CONTROL "Part:", -1, "STATIC", SS_LEFT, 190, 20, 20, 10 55 | CONTROL "", IDC_MAIN_PART, "STATIC", SS_LEFT, 225, 20, 170, 10 56 | CONTROL "State:", -1, "STATIC", SS_LEFT, 190, 30, 20, 10 57 | CONTROL "", IDC_MAIN_STATE, "STATIC", SS_LEFT, 225, 30, 170, 10 58 | CONTROL "", IDC_MAIN_THEMEVIEW_1, THEMEVIEW_CLASS, 0, 190, 45, 10, 10 59 | CONTROL "", IDC_MAIN_THEMEVIEW_2, THEMEVIEW_CLASS, 0, 235, 45, 20, 10 60 | CONTROL "", IDC_MAIN_THEMEVIEW_7, THEMEVIEW_CLASS, THEMEVIEW_STYLE_DRAWTEXT, 320, 45, 20, 10 61 | CONTROL "", IDC_MAIN_THEMEVIEW_3, THEMEVIEW_CLASS, 0, 190, 60, 20, 20 62 | CONTROL "", IDC_MAIN_THEMEVIEW_4, THEMEVIEW_CLASS, 0, 235, 60, 40, 20 63 | CONTROL "", IDC_MAIN_THEMEVIEW_8, THEMEVIEW_CLASS, THEMEVIEW_STYLE_DRAWTEXT, 320, 60, 40, 20 64 | CONTROL "", IDC_MAIN_THEMEVIEW_5, THEMEVIEW_CLASS, 0, 190, 85, 40, 40 65 | CONTROL "", IDC_MAIN_THEMEVIEW_6, THEMEVIEW_CLASS, 0, 235, 85, 80, 40 66 | CONTROL "", IDC_MAIN_THEMEVIEW_9, THEMEVIEW_CLASS, THEMEVIEW_STYLE_DRAWTEXT, 320, 85, 80, 40 67 | CONTROL "", IDC_MAIN_BITMAP_BKG, "STATIC", SS_BITMAP, 410, 10, 40, 120 68 | CONTROL "", IDC_MAIN_BITMAP_GLYPH, "STATIC", SS_BITMAP, 500, 10, 40, 120 69 | CONTROL "", IDC_MAIN_PROPSLIST, WC_LISTVIEW, WS_TABSTOP | WS_BORDER | LVS_REPORT, 190, 135, 305, 210 70 | CONTROL "", IDC_MAIN_DUMMY, "STATIC", WS_DISABLED, -100, -100, 1, 1 71 | END 72 | -------------------------------------------------------------------------------- /src/themeview.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #include "misc.h" 26 | #include "themeview.h" 27 | 28 | 29 | static const TCHAR themeview_class[] = _T(THEMEVIEW_CLASS); 30 | 31 | 32 | typedef struct themeview_tag themeview_t; 33 | struct themeview_tag { 34 | HWND win; 35 | HFONT font; 36 | const TCHAR* cls_name; 37 | int part_id; 38 | int state_id; 39 | }; 40 | 41 | 42 | void 43 | themeview_setup(HWND win, const WCHAR* cls_name, const WCHAR* subcls_name, int part, int state) 44 | { 45 | themeview_t* tv = (themeview_t*) GetWindowLongPtr(win, 0); 46 | 47 | tv->cls_name = cls_name; 48 | tv->part_id = part; 49 | tv->state_id = state; 50 | 51 | SetWindowTheme(win, subcls_name, NULL); 52 | 53 | InvalidateRect(win, NULL, TRUE); 54 | } 55 | 56 | 57 | static void 58 | themeview_paint(themeview_t* tv, HDC dc) 59 | { 60 | HTHEME theme; 61 | RECT rect; 62 | 63 | if(tv->cls_name == NULL) 64 | return; 65 | theme = OpenThemeData(tv->win, tv->cls_name); 66 | if(theme == NULL) 67 | return; 68 | 69 | GetClientRect(tv->win, &rect); 70 | 71 | SelectObject(dc, tv->font); 72 | 73 | if(IsThemeBackgroundPartiallyTransparent(theme, tv->part_id, tv->state_id)) 74 | DrawThemeParentBackground(tv->win, dc, &rect); 75 | DrawThemeBackground(theme, dc, tv->part_id, tv->state_id, &rect, &rect); 76 | 77 | if(GetWindowLong(tv->win, GWL_STYLE) & THEMEVIEW_STYLE_DRAWTEXT) { 78 | DrawThemeText(theme, dc, tv->part_id, tv->state_id, _T("Foo Bar"), -1, 79 | DT_CENTER | DT_VCENTER | DT_SINGLELINE, 0, &rect); 80 | } 81 | 82 | CloseThemeData(theme); 83 | } 84 | 85 | 86 | static LRESULT CALLBACK 87 | themeview_proc(HWND win, UINT msg, WPARAM wp, LPARAM lp) 88 | { 89 | themeview_t* tv = (themeview_t*) GetWindowLongPtr(win, 0); 90 | 91 | switch(msg) { 92 | case WM_PAINT: 93 | case WM_PRINTCLIENT: 94 | { 95 | HDC dc = (HDC)wp; 96 | PAINTSTRUCT ps; 97 | 98 | if(wp == 0) 99 | dc = BeginPaint(win, &ps); 100 | themeview_paint(tv, dc); 101 | if(wp == 0) 102 | EndPaint(win, &ps); 103 | return 0; 104 | } 105 | 106 | case WM_SETFONT: 107 | tv->font = (HFONT) wp; 108 | if(LOWORD(lp)) 109 | InvalidateRect(win, NULL, TRUE); 110 | break; 111 | 112 | case WM_NCCREATE: 113 | tv = (themeview_t*) malloc(sizeof(themeview_t)); 114 | if(tv == NULL) 115 | return FALSE; 116 | memset(tv, 0, sizeof(themeview_t)); 117 | tv->win = win; 118 | SetWindowLongPtr(win, 0, (LONG_PTR)tv); 119 | break; 120 | 121 | case WM_NCDESTROY: 122 | if(tv) 123 | free(tv); 124 | break; 125 | } 126 | 127 | return DefWindowProc(win, msg, wp, lp); 128 | } 129 | 130 | 131 | void 132 | themeview_init(void) 133 | { 134 | WNDCLASS wc = { 0 }; 135 | 136 | wc.style = CS_GLOBALCLASS | CS_HREDRAW | CS_VREDRAW; 137 | wc.lpfnWndProc = themeview_proc; 138 | wc.cbWndExtra = sizeof(themeview_t*); 139 | wc.hCursor = LoadCursor(NULL, IDC_ARROW); 140 | wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 141 | wc.hInstance = te_instance; 142 | wc.lpszClassName = themeview_class; 143 | RegisterClass(&wc); 144 | } 145 | 146 | -------------------------------------------------------------------------------- /src/misc.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #include "misc.h" 26 | 27 | 28 | HINSTANCE te_instance; 29 | DWORD te_win_version; 30 | 31 | 32 | static struct { 33 | HRESULT (WINAPI* fn_GetThemeBitmap)(HTHEME, int, int, int, ULONG, HBITMAP*); 34 | HRESULT (WINAPI* fn_GetThemeStream)(HTHEME, int, int, int, void**, DWORD*, HINSTANCE); 35 | } te_uxtheme_wrappers; 36 | 37 | 38 | void 39 | te_init(HINSTANCE instance) 40 | { 41 | HMODULE uxtheme_dll; 42 | OSVERSIONINFOEX ver; 43 | 44 | te_instance = instance; 45 | 46 | ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); 47 | GetVersionEx((OSVERSIONINFO*) &ver); 48 | te_win_version = TE_WIN_VER(ver.dwPlatformId, ver.dwMajorVersion, ver.dwMinorVersion); 49 | 50 | InitCommonControls(); 51 | 52 | themeview_init(); 53 | 54 | uxtheme_dll = GetModuleHandle(_T("UXTHEME.DLL")); 55 | if(uxtheme_dll != NULL) { 56 | #define GPA(name, params) \ 57 | do { \ 58 | te_uxtheme_wrappers.fn_##name = (HRESULT (WINAPI*)params) \ 59 | GetProcAddress(uxtheme_dll, #name); \ 60 | } while(0) 61 | 62 | GPA(GetThemeBitmap, (HTHEME, int, int, int, ULONG, HBITMAP*)); 63 | GPA(GetThemeStream, (HTHEME, int, int, int, void**, DWORD*, HINSTANCE)); 64 | } 65 | } 66 | 67 | 68 | 69 | INT_PTR 70 | te_dlgbox(const TCHAR* dlg_name, HWND parent, DLGPROC proc) 71 | { 72 | HRSRC res; 73 | HGLOBAL glob; 74 | BYTE* data; 75 | BYTE* tmp; 76 | DWORD size; 77 | LRESULT ret; 78 | LOGFONTW lf = {0}; 79 | DWORD lf_facesize; 80 | BYTE charset; 81 | 82 | /* Get the dialog template resource data */ 83 | res = FindResource(te_instance, dlg_name, (const TCHAR*) RT_DIALOG); 84 | if(res == NULL) 85 | goto err; 86 | glob = LoadResource(te_instance, res); 87 | if(glob == NULL) 88 | goto err; 89 | size = SizeofResource(te_instance, res); 90 | data = (BYTE*) LockResource(glob); 91 | if(data == NULL || size <= 2) 92 | goto err; 93 | 94 | /* Determine the appropriate font */ 95 | //GetThemeSysFont(NULL, TMT_MSGBOXFONT, &lf); 96 | if(te_win_version < TE_WIN_VISTA) { 97 | lf.lfHeight = 8; 98 | wcscpy(lf.lfFaceName, L"MS Shell Dlg 2"); 99 | } else { 100 | lf.lfHeight = 9; 101 | wcscpy(lf.lfFaceName, L"Segoe UI"); 102 | } 103 | lf_facesize = (wcslen(lf.lfFaceName) + 1) * sizeof(WCHAR); 104 | 105 | /* Create a temporary template with the proper font */ 106 | #define DATA_WORD(offset) *((WORD*)(data + (offset))) 107 | #define DATA_DWORD(offset) *((DWORD*)(data + (offset))) 108 | #define DATA_STRING(offset) ((WCHAR*)(data + (offset))) 109 | if(size >= 26 && DATA_WORD(0) == 0x0001 && DATA_WORD(2) == 0xffff) { 110 | /* DLGTEMPLATEEX (see http://blogs.msdn.com/b/oldnewthing/archive/2004/06/23/163596.aspx) */ 111 | DWORD style = DATA_DWORD(12); 112 | DWORD n = 26; 113 | DWORD skip = 0; 114 | DWORD off; 115 | 116 | //n += (DATA_WORD(n) == 0xffff) ? 4 : (wcslen(DATA_STRING(n)) + 1) * sizeof(WCHAR); /* dialog menu */ 117 | if(DATA_WORD(n) == 0xffff) 118 | n += 4; 119 | else 120 | n += (wcslen(DATA_STRING(n)) + 1) * sizeof(WCHAR); 121 | n += (wcslen(DATA_STRING(n)) + 1) * sizeof(WCHAR); /* dialog class */ 122 | n += (wcslen(DATA_STRING(n)) + 1) * sizeof(WCHAR); /* dialog caption */ 123 | 124 | if(style & (DS_SHELLFONT | DS_SETFONT)) 125 | skip += 6 + (wcslen(DATA_STRING(n+6)) + 1) * sizeof(WCHAR); 126 | skip = ((n + skip + 3) & 0xfffc) - n; 127 | style |= DS_SHELLFONT; 128 | 129 | tmp = _malloca(size - skip + 64); 130 | if(tmp == NULL) 131 | goto err; 132 | 133 | memcpy(tmp, data, n); 134 | memcpy(tmp + 12, &style, 4); 135 | memcpy(tmp + n, (WORD*) &lf.lfHeight, 2); 136 | memcpy(tmp + n + 2, (WORD*) &lf.lfWeight, 2); 137 | memcpy(tmp + n + 4, &lf.lfItalic, 1); 138 | charset = 1; 139 | memcpy(tmp + n + 5, &charset, 1); 140 | memcpy(tmp + n + 6, lf.lfFaceName, lf_facesize); 141 | 142 | off = n + 6 + lf_facesize; 143 | off = (off + 3) & 0xfffc; 144 | 145 | memcpy(tmp + off, data + n + skip, size - skip - n); 146 | } else if(size >= 18) { 147 | /* DLGTEMPLATE (see http://blogs.msdn.com/b/oldnewthing/archive/2004/06/23/163596.aspx) */ 148 | // TODO 149 | goto err; 150 | } else { 151 | goto err; 152 | } 153 | 154 | ret = DialogBoxIndirect(te_instance, (DLGTEMPLATE*)tmp, parent, proc); 155 | _freea(tmp); 156 | 157 | return ret; 158 | 159 | err: 160 | return DialogBox(te_instance, dlg_name, parent, proc); 161 | } 162 | 163 | 164 | 165 | HRESULT 166 | te_GetThemeBitmap(HTHEME hTheme, int iPartId, int iStateId, int iPropId, ULONG dwFlags, HBITMAP *phBitmap) 167 | { 168 | if(te_uxtheme_wrappers.fn_GetThemeStream != NULL) 169 | return te_uxtheme_wrappers.fn_GetThemeBitmap(hTheme, iPartId, iStateId, iPropId, dwFlags, phBitmap); 170 | 171 | *phBitmap = NULL; 172 | return E_NOTIMPL; 173 | } 174 | 175 | HRESULT 176 | te_GetThemeStream(HTHEME hTheme, int iPartId, int iStateId, int iPropId, void** ppvStream, DWORD *pcbStream, HINSTANCE hInst) 177 | { 178 | if(te_uxtheme_wrappers.fn_GetThemeStream != NULL) 179 | return te_uxtheme_wrappers.fn_GetThemeStream(hTheme, iPartId, iStateId, iPropId, ppvStream, pcbStream, hInst); 180 | 181 | *ppvStream = NULL; 182 | *pcbStream = 0; 183 | return E_NOTIMPL; 184 | } 185 | -------------------------------------------------------------------------------- /src/main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #include "misc.h" 26 | #include "db.h" 27 | 28 | 29 | static void 30 | main_wm_initdialog(HWND win) 31 | { 32 | /* Setup the treeview */ 33 | { 34 | HWND tv_win; 35 | int i, j, k; 36 | const db_class_t* cls; 37 | const db_part_t* part; 38 | const db_state_t* state; 39 | TVINSERTSTRUCT tvis_class = {0}; 40 | TVINSERTSTRUCT tvis_part = {0}; 41 | TVINSERTSTRUCT tvis_state = {0}; 42 | HTREEITEM handle_class; 43 | HTREEITEM handle_part; 44 | TCHAR buffer[128]; 45 | 46 | tv_win = GetDlgItem(win, IDC_MAIN_TREEVIEW); 47 | 48 | tvis_class.hParent = NULL; 49 | tvis_class.hInsertAfter = TVI_LAST; 50 | tvis_class.item.mask = TVIF_PARAM | TVIF_TEXT; 51 | 52 | for(i = 0; i < db_n_classes; i++) { 53 | cls = &db_classes[i]; 54 | db_class_display_name(cls, buffer, TE_ARRAY_SIZE(buffer)); 55 | 56 | tvis_class.item.pszText = buffer; 57 | tvis_class.item.lParam = (LPARAM) cls; 58 | handle_class = (HTREEITEM) SendMessage(tv_win, TVM_INSERTITEM, 0, (LPARAM)&tvis_class); 59 | 60 | 61 | tvis_part.hParent = handle_class; 62 | tvis_part.hInsertAfter = TVI_LAST; 63 | tvis_part.item.mask = TVIF_PARAM | TVIF_TEXT; 64 | 65 | for(j = 0; j < cls->n_parts; j++) { 66 | part = &cls->parts[j]; 67 | 68 | tvis_part.item.pszText = (TCHAR*) part->display_name; 69 | tvis_part.item.lParam = (LPARAM) part; 70 | handle_part = (HTREEITEM) SendMessage(tv_win, TVM_INSERTITEM, 0, (LPARAM)&tvis_part); 71 | 72 | 73 | tvis_state.hParent = handle_part; 74 | tvis_state.hInsertAfter = TVI_LAST; 75 | tvis_state.item.mask = TVIF_PARAM | TVIF_TEXT; 76 | 77 | for(k = 0; k < part->n_states; k++) { 78 | state = &part->states[k]; 79 | 80 | tvis_state.item.pszText = (TCHAR*) state->display_name; 81 | tvis_state.item.lParam = (LPARAM) state; 82 | SendMessage(tv_win, TVM_INSERTITEM, 0, (LPARAM)&tvis_state); 83 | } 84 | } 85 | } 86 | } 87 | 88 | /* Set font of the main labels */ 89 | { 90 | HFONT font; 91 | LOGFONT lf; 92 | 93 | font = (HFONT) SendDlgItemMessage(win, IDC_MAIN_CLASS, WM_GETFONT, 0, 0); 94 | GetObject(font, sizeof(LOGFONT), &lf); 95 | 96 | lf.lfWeight+= 300; 97 | if(lf.lfWeight > 900) 98 | lf.lfWeight = 900; 99 | 100 | font = CreateFontIndirect(&lf); 101 | SendDlgItemMessage(win, IDC_MAIN_CLASS, WM_SETFONT, (WPARAM)font, TRUE); 102 | SendDlgItemMessage(win, IDC_MAIN_PART, WM_SETFONT, (WPARAM)font, TRUE); 103 | SendDlgItemMessage(win, IDC_MAIN_STATE, WM_SETFONT, (WPARAM)font, TRUE); 104 | } 105 | 106 | /* Setup list view */ 107 | { 108 | RECT rect; 109 | LVCOLUMN col = { 0 }; 110 | DWORD lvs_ex_style = LVS_EX_DOUBLEBUFFER | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES; 111 | 112 | GetClientRect(GetDlgItem(win, IDC_MAIN_PROPSLIST), &rect); 113 | 114 | col.mask = LVCF_TEXT | LVCF_SUBITEM | LVCF_WIDTH; 115 | col.pszText = _T("Type"); 116 | col.iSubItem = 2; 117 | col.cx = rect.right * 10 / 100; 118 | SendDlgItemMessage(win, IDC_MAIN_PROPSLIST, LVM_INSERTCOLUMN, 0, (LPARAM)&col); 119 | col.pszText = _T("ID"); 120 | col.iSubItem = 0; 121 | col.cx = rect.right * 10 / 100; 122 | SendDlgItemMessage(win, IDC_MAIN_PROPSLIST, LVM_INSERTCOLUMN, 1, (LPARAM)&col); 123 | col.pszText = _T("Property"); 124 | col.iSubItem = 1; 125 | col.cx = rect.right * 30 / 100; 126 | SendDlgItemMessage(win, IDC_MAIN_PROPSLIST, LVM_INSERTCOLUMN, 2, (LPARAM)&col); 127 | col.pszText = _T("Value"); 128 | col.iSubItem = 2; 129 | col.cx = rect.right * 40 / 100; 130 | SendDlgItemMessage(win, IDC_MAIN_PROPSLIST, LVM_INSERTCOLUMN, 3, (LPARAM)&col); 131 | col.pszText = _T("Origin"); 132 | col.iSubItem = 3; 133 | col.cx = rect.right * 10 / 100; 134 | SendDlgItemMessage(win, IDC_MAIN_PROPSLIST, LVM_INSERTCOLUMN, 4, (LPARAM)&col); 135 | 136 | SendDlgItemMessage(win, IDC_MAIN_PROPSLIST, LVM_SETEXTENDEDLISTVIEWSTYLE, 137 | lvs_ex_style, lvs_ex_style); 138 | } 139 | } 140 | 141 | static void 142 | main_reset(HWND win, const db_class_t* cls, const db_part_t* part, const db_state_t* state) 143 | { 144 | HTHEME theme; 145 | HWND dummy; 146 | 147 | dummy = GetDlgItem(win, IDC_MAIN_DUMMY); 148 | 149 | SetWindowTheme(dummy, cls->subclass, NULL); 150 | theme = OpenThemeData(dummy, cls->name); 151 | 152 | /* Reset titles */ 153 | { 154 | TCHAR buffer[128]; 155 | 156 | db_class_display_name(cls, buffer, 128); 157 | SendDlgItemMessage(win, IDC_MAIN_CLASS, WM_SETTEXT, 0, (LPARAM) buffer); 158 | 159 | _sntprintf(buffer, TE_ARRAY_SIZE(buffer), _T("[%d] %s"), part->id, part->name ? part->name : _T("")); 160 | SendDlgItemMessage(win, IDC_MAIN_PART, WM_SETTEXT, 0, (LPARAM) buffer); 161 | 162 | _sntprintf(buffer, TE_ARRAY_SIZE(buffer), _T("[%d] %s"), state->id, state->name ? state->name : _T("")); 163 | SendDlgItemMessage(win, IDC_MAIN_STATE, WM_SETTEXT, 0, (LPARAM) buffer); 164 | } 165 | 166 | /* Reset theme preview */ 167 | { 168 | HBITMAP bmp; 169 | int i; 170 | 171 | for(i = IDC_MAIN_THEMEVIEW_FIRST; i <= IDC_MAIN_THEMEVIEW_LAST; i++) 172 | themeview_setup(GetDlgItem(win, i), cls->name, cls->subclass, part->id, state->id); 173 | 174 | bmp = NULL; 175 | if(theme) 176 | GetThemeBitmap(theme, part->id, state->id, TMT_DIBDATA, GBF_DIRECT, &bmp); 177 | SendDlgItemMessage(win, IDC_MAIN_BITMAP_BKG, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bmp); 178 | 179 | /* Stupid workaround. Seems there is a bug either in Windows headers 180 | * or GetThemeBitmap() implementation. Headers define TMT_GLYPHDIBDATA 181 | * as 8, but on Windows 7 it always fails. Instead it works for 3. 182 | * One of those seems to be buggy. 183 | */ 184 | if(theme) { 185 | HRESULT hr; 186 | hr = GetThemeBitmap(theme, part->id, state->id, 3, GBF_DIRECT, &bmp); 187 | if(FAILED(hr)) 188 | GetThemeBitmap(theme, part->id, state->id, TMT_GLYPHDIBDATA, GBF_DIRECT, &bmp); 189 | } 190 | SendDlgItemMessage(win, IDC_MAIN_BITMAP_GLYPH, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)bmp); 191 | } 192 | 193 | /* Reset properties */ 194 | { 195 | int i; 196 | HWND lv; 197 | 198 | lv = GetDlgItem(win, IDC_MAIN_PROPSLIST); 199 | 200 | SendMessage(lv, WM_SETREDRAW, 0, 0); 201 | 202 | SendMessage(lv, LVM_DELETEALLITEMS, 0, 0); 203 | 204 | if(theme) { 205 | LVITEM item = {0}; 206 | SendMessage(lv, LVM_SETITEMCOUNT, db_n_props, 0); 207 | for(i = 0; i < db_n_props; i++) { 208 | const db_prop_t* prop = &db_props[i]; 209 | enum PROPERTYORIGIN origin; 210 | TCHAR buffer[256]; 211 | 212 | prop->type->to_string(theme, part->id, state->id, prop->id, 213 | buffer, TE_ARRAY_SIZE(buffer)); 214 | if(GetThemePropertyOrigin(theme, part->id, state->id, prop->id, &origin) != S_OK) 215 | origin = PO_NOTFOUND; 216 | 217 | if(origin == PO_NOTFOUND && buffer[0] == _T('\0')) 218 | continue; 219 | 220 | item.iSubItem = 0; 221 | item.mask = LVIF_TEXT; 222 | item.pszText = (TCHAR*) prop->type->display_name; 223 | SendMessage(lv, LVM_INSERTITEM, 0, (LPARAM) &item); 224 | 225 | item.iSubItem = 3; 226 | item.pszText = buffer; 227 | SendMessage(lv, LVM_SETITEM, 0, (LPARAM) &item); 228 | 229 | item.iSubItem = 1; 230 | item.mask = LVIF_TEXT; 231 | item.pszText = buffer; 232 | _sntprintf(buffer, TE_ARRAY_SIZE(buffer), _T("%d"), prop->id); 233 | SendMessage(lv, LVM_SETITEM, 0, (LPARAM) &item); 234 | 235 | item.iSubItem = 2; 236 | item.pszText = (TCHAR*) prop->name; 237 | SendMessage(lv, LVM_SETITEM, 0, (LPARAM) &item); 238 | 239 | item.iSubItem = 4; 240 | switch((int)origin) { 241 | case PO_STATE: item.pszText = _T("state"); break; 242 | case PO_PART: item.pszText = _T("part"); break; 243 | case PO_CLASS: item.pszText = _T("class"); break; 244 | case PO_GLOBAL: item.pszText = _T("global"); break; 245 | case PO_NOTFOUND: item.pszText = _T("[unknown]"); break; 246 | default: _sntprintf(buffer, TE_ARRAY_SIZE(buffer), _T("Origin #%d"), (int)origin); break; 247 | } 248 | SendMessage(lv, LVM_SETITEM, 0, (LPARAM) &item); 249 | 250 | item.iItem++; 251 | } 252 | } 253 | 254 | SendMessage(lv, WM_SETREDRAW, 1, 0); 255 | InvalidateRect(lv, NULL, TRUE); 256 | } 257 | 258 | CloseThemeData(theme); 259 | } 260 | 261 | static void 262 | main_treeview_wm_notify(HWND win, NMHDR* hdr) 263 | { 264 | static const db_class_t cls_null = {0}; 265 | static const db_part_t part_null = {0}; 266 | static const db_state_t state_null = {0}; 267 | 268 | if(hdr->code == TVN_SELCHANGED) { 269 | int n = 0; 270 | NM_TREEVIEW* nm = (NM_TREEVIEW*) hdr; 271 | HTREEITEM h; 272 | void* ptr[3]; 273 | const db_class_t* cls; 274 | const db_part_t* part; 275 | const db_state_t* state; 276 | 277 | for(h = nm->itemNew.hItem; 278 | h != NULL && n < 3; 279 | h = (HTREEITEM) SendDlgItemMessage(win, IDC_MAIN_TREEVIEW, TVM_GETNEXTITEM, TVGN_PARENT, (LPARAM)h)) 280 | { 281 | TVITEM item; 282 | item.mask = TVIF_HANDLE | TVIF_PARAM; 283 | item.hItem = h; 284 | 285 | SendDlgItemMessage(win, IDC_MAIN_TREEVIEW, TVM_GETITEM, 0, (LPARAM)&item); 286 | ptr[n] = (void*)item.lParam; 287 | n++; 288 | } 289 | 290 | cls = (n >= 1 ? (const db_class_t*)ptr[n - 1] : &cls_null); 291 | part = (n >= 2 ? (const db_part_t*)ptr[n - 2] : &part_null); 292 | state = (n >= 3 ? (const db_state_t*)ptr[n - 3] : &state_null); 293 | 294 | main_reset(win, cls, part, state); 295 | } 296 | } 297 | 298 | 299 | static void 300 | main_wm_command(HWND win, UINT ctl_id) 301 | { 302 | switch(ctl_id) { 303 | case IDM_FILE_EXIT: 304 | EndDialog(win, 0); 305 | break; 306 | } 307 | } 308 | 309 | static void 310 | main_wm_size(HWND win, UINT w, UINT h) 311 | { 312 | static WORD old_w = 0; 313 | static WORD old_h = 0; 314 | 315 | if(old_w != 0 && old_h != 0) { 316 | RECT rect; 317 | 318 | GetWindowRect(GetDlgItem(win, IDC_MAIN_TREEVIEW), &rect); 319 | MapWindowPoints(NULL, win, (POINT*)&rect, 2); 320 | SetWindowPos(GetDlgItem(win, IDC_MAIN_TREEVIEW), NULL, 321 | rect.left, rect.top, rect.right - rect.left, 322 | rect.bottom - rect.top + h - old_h, 323 | SWP_NOZORDER); 324 | 325 | GetWindowRect(GetDlgItem(win, IDC_MAIN_PROPSLIST), &rect); 326 | MapWindowPoints(NULL, win, (POINT*)&rect, 2); 327 | SetWindowPos(GetDlgItem(win, IDC_MAIN_PROPSLIST), NULL, 328 | rect.left, rect.top, 329 | rect.right - rect.left + w - old_w, 330 | rect.bottom - rect.top + h - old_h, 331 | SWP_NOZORDER | SWP_NOMOVE); 332 | } 333 | 334 | old_w = w; 335 | old_h = h; 336 | } 337 | 338 | static void 339 | main_wm_getminmaxinfo(HWND win, MINMAXINFO* mmi) 340 | { 341 | mmi->ptMinTrackSize.x = 600; 342 | mmi->ptMinTrackSize.y = 500; 343 | } 344 | 345 | static INT_PTR CALLBACK 346 | main_proc(HWND win, UINT msg, WPARAM wp, LPARAM lp) 347 | { 348 | switch(msg) { 349 | case WM_NOTIFY: 350 | switch(wp) { 351 | case IDC_MAIN_TREEVIEW: 352 | main_treeview_wm_notify(win, (NMHDR*) lp); 353 | break; 354 | } 355 | break; 356 | 357 | case WM_SIZE: 358 | if(wp == SIZE_MAXIMIZED || wp == SIZE_RESTORED) 359 | main_wm_size(win, LOWORD(lp), HIWORD(lp)); 360 | break; 361 | 362 | case WM_GETMINMAXINFO: 363 | main_wm_getminmaxinfo(win, (MINMAXINFO*)lp); 364 | break; 365 | 366 | case WM_COMMAND: 367 | main_wm_command(win, LOWORD(wp)); 368 | break; 369 | 370 | case WM_INITDIALOG: 371 | main_wm_initdialog(win); 372 | return TRUE; 373 | 374 | case WM_CLOSE: 375 | EndDialog(win, 0); 376 | break; 377 | 378 | default: 379 | return FALSE; 380 | } 381 | 382 | return TRUE; 383 | } 384 | 385 | 386 | int APIENTRY 387 | _tWinMain(HINSTANCE instance, HINSTANCE instance_prev, LPTSTR cmd_line, int cmd_show) 388 | { 389 | te_init(instance); 390 | 391 | //DialogBox(te_instance, MAKEINTRESOURCE(IDD_MAIN), NULL, main_proc); 392 | te_dlgbox(MAKEINTRESOURCE(IDD_MAIN), NULL, main_proc); 393 | 394 | return 0; 395 | } 396 | -------------------------------------------------------------------------------- /src/db.c: -------------------------------------------------------------------------------- 1 | /* 2 | * Theme Explorer 3 | * Copyright (c) 2012 Martin Mitas 4 | * 5 | * Permission is hereby granted, free of charge, to any person obtaining a 6 | * copy of this software and associated documentation files (the "Software"), 7 | * to deal in the Software without restriction, including without limitation 8 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | * and/or sell copies of the Software, and to permit persons to whom the 10 | * Software is furnished to do so, subject to the following conditions: 11 | * 12 | * The above copyright notice and this permission notice shall be included in 13 | * all copies or substantial portions of the Software. 14 | * 15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 | * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 | * IN THE SOFTWARE. 22 | */ 23 | 24 | 25 | #include "db.h" 26 | 27 | 28 | /* This database is an union from MS SDK 7.1 headers and following MSDN pages: 29 | * - http://msdn.microsoft.com/en-us/library/windows/desktop/bb773210%28v=vs.85%29.aspx 30 | * - http://msdn.microsoft.com/en-us/library/windows/desktop/ee453680%28v=vs.85%29.aspx 31 | * - http://msdn.microsoft.com/en-us/library/windows/desktop/bb773218%28v=vs.85%29.aspx 32 | */ 33 | 34 | 35 | #define DB_DEFINE_CLASS(name, parts) { _T(#name), NULL, parts, TE_ARRAY_SIZE(parts) } 36 | #define DB_DEFINE_SUBCLASS(name, subname, parts) { _T(#name), _T(#subname), parts, TE_ARRAY_SIZE(parts) } 37 | #define DB_DEFINE_PART(id, name, display_name, states) { id, _T(#name), _T(#display_name), states, TE_ARRAY_SIZE(states) } 38 | #define DB_DEFINE_PART_(id, name, display_name) { id, _T(#name), _T(#display_name), NULL, 0 } 39 | #define DB_DEFINE_STATE(id, name, display_name) { id, _T(#name), _T(#display_name) } 40 | 41 | 42 | 43 | /****************** 44 | *** AdressBand *** 45 | ******************/ 46 | 47 | static const db_state_t db_states_ABBACKGROUND[] = { 48 | DB_DEFINE_STATE ( 1, xxx_NORMAL, Normal), 49 | DB_DEFINE_STATE ( 2, xxx_HOT, Hot), 50 | DB_DEFINE_STATE ( 3, xxx_DISABLED, Disabled), 51 | DB_DEFINE_STATE ( 4, xxx_FOCUSED, Focused) 52 | }; 53 | 54 | static const db_part_t db_parts_ADDRESSBAND[] = { 55 | DB_DEFINE_PART ( 1, ABBACKGROUND, Background, db_states_ABBACKGROUND) 56 | }; 57 | 58 | 59 | /****************** 60 | *** AeroWizard *** 61 | ******************/ 62 | 63 | static const db_state_t db_states_AW_CONTENTAREA[] = { 64 | DB_DEFINE_STATE ( 1, AW_S_CONTENTAREA_NOMARGIN, NoMargin) 65 | }; 66 | 67 | static const db_state_t db_states_AW_HEADERAREA[] = { 68 | DB_DEFINE_STATE ( 1, AW_S_HEADERAREA_NOMARGIN, NoMargin) 69 | }; 70 | 71 | static const db_state_t db_states_AW_TITLEBAR[] = { 72 | DB_DEFINE_STATE ( 1, AW_S_TITLEBAR_ACTIVE, Active), 73 | DB_DEFINE_STATE ( 2, AW_S_TITLEBAR_INACTIVE, Inactive) 74 | }; 75 | 76 | static const db_part_t db_parts_AEROWIZARD[] = { 77 | DB_DEFINE_PART ( 1, AW_TITLEBAR, TitleBar, db_states_AW_TITLEBAR), 78 | DB_DEFINE_PART ( 2, AW_HEADERAREA, HeaderArea, db_states_AW_HEADERAREA), 79 | DB_DEFINE_PART ( 3, AW_CONTENTAREA, ContentArea, db_states_AW_CONTENTAREA), 80 | DB_DEFINE_PART_ ( 4, AW_COMMANDAREA, CommandArea), 81 | DB_DEFINE_PART_ ( 5, AW_BUTTON, Button), /* TODO: try like button */ 82 | }; 83 | 84 | 85 | /************** 86 | *** Button *** 87 | **************/ 88 | 89 | static const db_state_t db_states_BP_PUSHBUTTON[] = { 90 | DB_DEFINE_STATE ( 1, PBS_NORMAL, Normal), 91 | DB_DEFINE_STATE ( 2, PBS_HOT, Hot), 92 | DB_DEFINE_STATE ( 3, PBS_PRESSED, Pressed), 93 | DB_DEFINE_STATE ( 4, PBS_DISABLED, Disabled), 94 | DB_DEFINE_STATE ( 5, PBS_DEFAULTED, Defaulted), 95 | DB_DEFINE_STATE ( 6, PBS_DEFAULTED_ANIMATING, DefaultedAnimating) 96 | }; 97 | 98 | static const db_state_t db_states_BP_RADIOBUTTON[] = { 99 | DB_DEFINE_STATE ( 1, RBS_UNCHECKEDNORMAL, UncheckedNormal), 100 | DB_DEFINE_STATE ( 2, RBS_UNCHECKEDHOT, UncheckedHot), 101 | DB_DEFINE_STATE ( 3, RBS_UNCHECKEDPRESSED, UncheckedPressed), 102 | DB_DEFINE_STATE ( 4, RBS_UNCHECKEDDISABLED, UncheckedDisabled), 103 | DB_DEFINE_STATE ( 5, RBS_CHECKEDNORMAL, CheckedNormal), 104 | DB_DEFINE_STATE ( 6, RBS_CHECKEDHOT, CheckedHot), 105 | DB_DEFINE_STATE ( 7, RBS_CHECKEDPRESSED, CheckedPressed), 106 | DB_DEFINE_STATE ( 8, RBS_CHECKEDDISABLED, CheckedDisabled) 107 | }; 108 | 109 | static const db_state_t db_states_BP_CHECKBOX[] = { 110 | DB_DEFINE_STATE ( 1, CBS_UNCHECKEDNORMAL, UncheckedNormal), 111 | DB_DEFINE_STATE ( 2, CBS_UNCHECKEDHOT, UncheckedHot), 112 | DB_DEFINE_STATE ( 3, CBS_UNCHECKEDPRESSED, UncheckedPressed), 113 | DB_DEFINE_STATE ( 4, CBS_UNCHECKEDDISABLED, UncheckedDisabled), 114 | DB_DEFINE_STATE ( 5, CBS_CHECKEDNORMAL, CheckedNormal), 115 | DB_DEFINE_STATE ( 6, CBS_CHECKEDHOT, CheckedHot), 116 | DB_DEFINE_STATE ( 7, CBS_CHECKEDPRESSED, CheckedPressed), 117 | DB_DEFINE_STATE ( 8, CBS_CHECKEDDISABLED, CheckedDisabled), 118 | DB_DEFINE_STATE ( 9, CBS_MIXEDNORMAL, MixedNormal), 119 | DB_DEFINE_STATE (10, CBS_MIXEDHOT, MixedHot), 120 | DB_DEFINE_STATE (11, CBS_MIXEDPRESSED, MixedPressed), 121 | DB_DEFINE_STATE (12, CBS_MIXEDDISABLED, MixedDisabled), 122 | DB_DEFINE_STATE (13, CBS_IMPLICITNORMAL, ImplicitNormal), 123 | DB_DEFINE_STATE (14, CBS_IMPLICITHOT, ImplicitHot), 124 | DB_DEFINE_STATE (15, CBS_IMPLICITPRESSED, ImplicitPressed), 125 | DB_DEFINE_STATE (16, CBS_IMPLICITDISABLED, ImplicitDisabled), 126 | DB_DEFINE_STATE (17, CBS_EXCLUDEDNORMAL, ExcludedNormal), 127 | DB_DEFINE_STATE (18, CBS_EXCLUDEDHOT, ExcludedHot), 128 | DB_DEFINE_STATE (19, CBS_EXCLUDEDPRESSED, ExcludedPressed), 129 | DB_DEFINE_STATE (20, CBS_EXCLUDEDDISABLED, ExcludedDisabled) 130 | }; 131 | 132 | static const db_state_t db_states_BP_GROUPBOX[] = { 133 | DB_DEFINE_STATE ( 1, GBS_NORMAL, Normal), 134 | DB_DEFINE_STATE ( 2, GBS_DISABLED, Disabled) 135 | }; 136 | 137 | static const db_state_t db_states_BP_COMMANDLINK[] = { 138 | DB_DEFINE_STATE ( 1, CMDLS_NORMAL, Normal), 139 | DB_DEFINE_STATE ( 2, CMDLS_HOT, Hot), 140 | DB_DEFINE_STATE ( 3, CMDLS_PRESSED, Pressed), 141 | DB_DEFINE_STATE ( 4, CMDLS_DISABLED, Disabled), 142 | DB_DEFINE_STATE ( 5, CMDLS_DEFAULTED, Defaulted), 143 | DB_DEFINE_STATE ( 6, CMDLS_DEFAULTED_ANIMATING, DefaultedAnimating) 144 | }; 145 | 146 | static const db_state_t db_states_BP_COMMANDLINKGLYPH[] = { 147 | DB_DEFINE_STATE ( 1, CMDLGS_NORMAL, Normal), 148 | DB_DEFINE_STATE ( 2, CMDLGS_HOT, Hot), 149 | DB_DEFINE_STATE ( 3, CMDLGS_PRESSED, Pressed), 150 | DB_DEFINE_STATE ( 4, CMDLGS_DISABLED, Disabled), 151 | DB_DEFINE_STATE ( 5, CMDLGS_DEFAULTED, Defaulted) 152 | }; 153 | 154 | static const db_state_t db_states_BP_PUSHBUTTONDROPDOWN[] = { 155 | DB_DEFINE_STATE ( 1, PBDDS_NORMAL, Normal), 156 | DB_DEFINE_STATE ( 2, PBDDS_DISABLED, Disabled) 157 | }; 158 | 159 | static const db_part_t db_parts_BUTTON[] = { 160 | DB_DEFINE_PART ( 1, BP_PUSHBUTTON, PushButton, db_states_BP_PUSHBUTTON), 161 | DB_DEFINE_PART ( 2, BP_RADIOBUTTON, RadioButton, db_states_BP_RADIOBUTTON), 162 | DB_DEFINE_PART ( 3, BP_CHECKBOX, CheckBox, db_states_BP_CHECKBOX), 163 | DB_DEFINE_PART ( 4, BP_GROUPBOX, GroupBox, db_states_BP_GROUPBOX), 164 | DB_DEFINE_PART_ ( 5, BP_USERBUTTON, UserButton), 165 | DB_DEFINE_PART ( 6, BP_COMMANDLINK, CommandLink, db_states_BP_COMMANDLINK), 166 | DB_DEFINE_PART ( 7, BP_COMMANDLINKGLYPH, CommandLinkGlyph, db_states_BP_COMMANDLINKGLYPH), 167 | DB_DEFINE_PART ( 8, BP_RADIOBUTTON_HCDISABLED, RadioButtonLite, db_states_BP_RADIOBUTTON), 168 | DB_DEFINE_PART ( 9, BP_CHECKBOX_HCDISABLED, CheckBoxLite, db_states_BP_CHECKBOX), 169 | DB_DEFINE_PART (10, BP_GROUPBOX_HCDISABLED, GroupBoxLite, db_states_BP_GROUPBOX), 170 | DB_DEFINE_PART (11, BP_PUSHBUTTONDROPDOWN, PushButtonDropDown, db_states_BP_PUSHBUTTONDROPDOWN) 171 | }; 172 | 173 | 174 | /************* 175 | *** Clock *** 176 | *************/ 177 | 178 | static const db_state_t db_states_CLP_TIME[] = { 179 | DB_DEFINE_STATE ( 1, CLS_NORMAL, Normal), 180 | DB_DEFINE_STATE ( 2, CLS_HOT, Hot), 181 | DB_DEFINE_STATE ( 3, CLS_PRESSED, Pressed) 182 | }; 183 | 184 | static const db_part_t db_parts_CLOCK[] = { 185 | DB_DEFINE_PART ( 1, CLP_TIME, Time, db_states_CLP_TIME) 186 | }; 187 | 188 | 189 | /**************** 190 | *** ComboBox *** 191 | ****************/ 192 | 193 | static const db_state_t db_states_CP_DROPDOWNBUTTON[] = { 194 | DB_DEFINE_STATE ( 1, CBXS_NORMAL, Normal), 195 | DB_DEFINE_STATE ( 2, CBXS_HOT, Hot), 196 | DB_DEFINE_STATE ( 3, CBXS_PRESSED, Pressed), 197 | DB_DEFINE_STATE ( 4, CBXS_DISABLED, Disabled) 198 | }; 199 | 200 | static const db_state_t db_states_CP_TRANSPARENTBACKGROUND[] = { 201 | DB_DEFINE_STATE ( 1, CBTBS_NORMAL, Normal), 202 | DB_DEFINE_STATE ( 2, CBTBS_HOT, Hot), 203 | DB_DEFINE_STATE ( 3, CBTBS_DISABLED, Disabled), 204 | DB_DEFINE_STATE ( 4, CBTBS_FOCUSED, Focused) 205 | }; 206 | 207 | static const db_state_t db_states_CP_BORDER[] = { 208 | DB_DEFINE_STATE ( 1, CBB_NORMAL, Normal), 209 | DB_DEFINE_STATE ( 2, CBB_HOT, Hot), 210 | DB_DEFINE_STATE ( 3, CBB_FOCUSED, Focused), 211 | DB_DEFINE_STATE ( 4, CBB_DISABLED, Disabled) 212 | }; 213 | 214 | static const db_state_t db_states_CP_READONLY[] = { 215 | DB_DEFINE_STATE ( 1, CBRO_NORMAL, Normal), 216 | DB_DEFINE_STATE ( 2, CBRO_HOT, Hot), 217 | DB_DEFINE_STATE ( 3, CBRO_PRESSED, Pressed), 218 | DB_DEFINE_STATE ( 4, CBRO_DISABLED, Disabled) 219 | }; 220 | 221 | static const db_state_t db_states_CP_DROPDOWNBUTTONRIGHT[] = { 222 | DB_DEFINE_STATE ( 1, CBXSR_NORMAL, Normal), 223 | DB_DEFINE_STATE ( 2, CBXSR_HOT, Hot), 224 | DB_DEFINE_STATE ( 3, CBXSR_PRESSED, Pressed), 225 | DB_DEFINE_STATE ( 4, CBXSR_DISABLED, Disabled) 226 | }; 227 | 228 | static const db_state_t db_states_CP_DROPDOWNBUTTONLEFT[] = { 229 | DB_DEFINE_STATE ( 1, CBXSL_NORMAL, Normal), 230 | DB_DEFINE_STATE ( 2, CBXSL_HOT, Hot), 231 | DB_DEFINE_STATE ( 3, CBXSL_PRESSED, Pressed), 232 | DB_DEFINE_STATE ( 4, CBXSL_DISABLED, Disabled) 233 | }; 234 | 235 | static const db_state_t db_states_CP_CUEBANNER[] = { 236 | DB_DEFINE_STATE ( 1, CBCB_NORMAL, Normal), 237 | DB_DEFINE_STATE ( 2, CBCB_HOT, Hot), 238 | DB_DEFINE_STATE ( 3, CBCB_PRESSED, Pressed), 239 | DB_DEFINE_STATE ( 4, CBCB_DISABLED, Disabled) 240 | }; 241 | 242 | static const db_state_t db_states_CP_DROPDOWNITEM[] = { 243 | DB_DEFINE_STATE ( 1, CBDI_NORMAL, Normal), 244 | DB_DEFINE_STATE ( 2, CBDI_HIGHLIGHTED, HighLighted) 245 | }; 246 | 247 | static const db_part_t db_parts_COMBOBOX[] = { 248 | DB_DEFINE_PART ( 1, CP_DROPDOWNBUTTON, DropDownButton, db_states_CP_DROPDOWNBUTTON), 249 | DB_DEFINE_PART_ ( 2, CP_BACKGROUND, Background), 250 | DB_DEFINE_PART ( 3, CP_TRANSPARENTBACKGROUND, TransparentBackground, db_states_CP_TRANSPARENTBACKGROUND), 251 | DB_DEFINE_PART ( 4, CP_BORDER, Border, db_states_CP_BORDER), 252 | DB_DEFINE_PART ( 5, CP_READONLY, ReadOnly, db_states_CP_READONLY), 253 | DB_DEFINE_PART ( 6, CP_DROPDOWNBUTTONRIGHT, DropDownButtonRight, db_states_CP_DROPDOWNBUTTONRIGHT), 254 | DB_DEFINE_PART ( 7, CP_DROPDOWNBUTTONLEFT, DropDownButtonLeft, db_states_CP_DROPDOWNBUTTONLEFT), 255 | DB_DEFINE_PART ( 8, CP_CUEBANNER, CueBanner, db_states_CP_CUEBANNER), 256 | DB_DEFINE_PART ( 9, CP_DROPDOWNITEM, DropDownItem, db_states_CP_DROPDOWNITEM) 257 | }; 258 | 259 | 260 | /********************** 261 | *** Communications *** 262 | **********************/ 263 | 264 | static const db_state_t db_states_CSST_TAB[] = { 265 | DB_DEFINE_STATE ( 1, CSTB_NORMAL, Normal), 266 | DB_DEFINE_STATE ( 2, CSTB_HOT, Hot), 267 | DB_DEFINE_STATE ( 3, CSTB_SELECTED, Selected) 268 | }; 269 | 270 | static const db_part_t db_parts_COMMUNICATIONS[] = { 271 | DB_DEFINE_PART ( 1, CSST_TAB, Tab, db_states_CSST_TAB) 272 | }; 273 | 274 | /******************** 275 | *** ControlPanel *** 276 | ********************/ 277 | 278 | static const db_state_t db_states_CPANEL_HELPLINK[] = { 279 | DB_DEFINE_STATE ( 1, CPHL_NORMAL, Normal), 280 | DB_DEFINE_STATE ( 2, CPHL_HOT, Hot), 281 | DB_DEFINE_STATE ( 3, CPHL_PRESSED, Pressed), 282 | DB_DEFINE_STATE ( 4, CPHL_DISABLED, Disabled) 283 | }; 284 | 285 | static const db_state_t db_states_CPANEL_TASKLINK[] = { 286 | DB_DEFINE_STATE ( 1, CPTL_NORMAL, Normal), 287 | DB_DEFINE_STATE ( 2, CPTL_HOT, Hot), 288 | DB_DEFINE_STATE ( 3, CPTL_PRESSED, Pressed), 289 | DB_DEFINE_STATE ( 4, CPTL_DISABLED, Disabled), 290 | DB_DEFINE_STATE ( 5, CPTL_PAGE, Page) 291 | }; 292 | 293 | static const db_state_t db_states_CPANEL_CONTENTLINK[] = { 294 | DB_DEFINE_STATE ( 1, CPCL_NORMAL, Normal), 295 | DB_DEFINE_STATE ( 2, CPCL_HOT, Hot), 296 | DB_DEFINE_STATE ( 3, CPCL_PRESSED, Pressed), 297 | DB_DEFINE_STATE ( 4, CPCL_DISABLED, Disabled) 298 | }; 299 | 300 | static const db_state_t db_states_CPANEL_SECTIONTITLELINK[] = { 301 | DB_DEFINE_STATE ( 1, CPSTL_NORMAL, Normal), 302 | DB_DEFINE_STATE ( 2, CPSTL_HOT, Hot) 303 | }; 304 | 305 | static const db_part_t db_parts_CONTROLPANEL[] = { 306 | DB_DEFINE_PART_ ( 1, CPANEL_NAVIGATIONPANE, NavigationPane), 307 | DB_DEFINE_PART_ ( 2, CPANEL_CONTENTPANE, ContentPane), 308 | DB_DEFINE_PART_ ( 3, CPANEL_NAVIGATIONPANELABEL, NavigationPaneLabel), 309 | DB_DEFINE_PART_ ( 4, CPANEL_CONTENTPANELABEL, ContentPaneLabel), 310 | DB_DEFINE_PART_ ( 5, CPANEL_TITLE, Title), 311 | DB_DEFINE_PART_ ( 6, CPANEL_BODYTEXT, BodyText), 312 | DB_DEFINE_PART ( 7, CPANEL_HELPLINK, HelpLink, db_states_CPANEL_HELPLINK), 313 | DB_DEFINE_PART ( 8, CPANEL_TASKLINK, TaskLink, db_states_CPANEL_TASKLINK), 314 | DB_DEFINE_PART_ ( 9, CPANEL_GROUPTEXT, GroupText), 315 | DB_DEFINE_PART (10, CPANEL_CONTENTLINK, ContentLink, db_states_CPANEL_CONTENTLINK), 316 | DB_DEFINE_PART (11, CPANEL_SECTIONTITLELINK, SectionTitleLink, db_states_CPANEL_SECTIONTITLELINK), 317 | DB_DEFINE_PART_ (12, CPANEL_LARGECOMMANDAREA, LargeCommandArea), 318 | DB_DEFINE_PART_ (13, CPANEL_SMALLCOMMANDAREA, SmallCommandArea), 319 | DB_DEFINE_PART_ (14, CPANEL_BUTTON, Button), 320 | DB_DEFINE_PART_ (15, CPANEL_MESSAGETEXT, MessageText), 321 | DB_DEFINE_PART_ (16, CPANEL_NAVIGATIONPANELINE, NavigationPaneLine), 322 | DB_DEFINE_PART_ (17, CPANEL_CONTENTPANELINE, ContentPaneline), 323 | DB_DEFINE_PART_ (18, CPANEL_BANNERAREA, BannerArea), 324 | DB_DEFINE_PART_ (19, CPANEL_BODYTITLE, BodyTitle) 325 | }; 326 | 327 | 328 | /****************** 329 | *** DatePicker *** 330 | ******************/ 331 | 332 | static const db_state_t db_states_DP_DATETEXT[] = { 333 | DB_DEFINE_STATE ( 1, DPDT_NORMAL, Normal), 334 | DB_DEFINE_STATE ( 2, DPDT_DISABLED, Disabled), 335 | DB_DEFINE_STATE ( 3, DPDT_SELECTED, Selected) 336 | }; 337 | 338 | static const db_state_t db_states_DP_DATEBORDER[] = { 339 | DB_DEFINE_STATE ( 1, DPDB_NORMAL, Normal), 340 | DB_DEFINE_STATE ( 2, DPDB_HOT, Hot), 341 | DB_DEFINE_STATE ( 3, DPDB_FOCUSED, Focused), 342 | DB_DEFINE_STATE ( 4, DPDB_DISABLED, Disabled) 343 | }; 344 | 345 | static const db_state_t db_states_DP_SHOWCALENDARBUTTONRIGHT[] = { 346 | DB_DEFINE_STATE ( 1, DPSCBR_NORMAL, Normal), 347 | DB_DEFINE_STATE ( 2, DPSCBR_HOT, Hot), 348 | DB_DEFINE_STATE ( 3, DPSCBR_PRESSED, Pressed), 349 | DB_DEFINE_STATE ( 4, DPSCBR_DISABLED, Disabled) 350 | }; 351 | 352 | static const db_part_t db_parts_DATEPICKER[] = { 353 | DB_DEFINE_PART ( 1, DP_DATETEXT, DateText, db_states_DP_DATETEXT), 354 | DB_DEFINE_PART ( 2, DP_DATEBORDER, DateBorder, db_states_DP_DATEBORDER), 355 | DB_DEFINE_PART ( 3, DP_SHOWCALENDARBUTTONRIGHT, ShowCalendarButtonRight, db_states_DP_SHOWCALENDARBUTTONRIGHT) 356 | }; 357 | 358 | 359 | /**************** 360 | *** DragDrop *** 361 | ****************/ 362 | 363 | static const db_state_t db_states_DD_COPY[] = { 364 | DB_DEFINE_STATE ( 1, DDCOPY_HIGHLIGHT, Highlight), 365 | DB_DEFINE_STATE ( 2, DDCOPY_NOHIGHLIGHT, NonHighlight) 366 | }; 367 | 368 | static const db_state_t db_states_DD_MOVE[] = { 369 | DB_DEFINE_STATE ( 1, DDMOVE_HIGHLIGHT, Highlight), 370 | DB_DEFINE_STATE ( 2, DDMOVE_NOHIGHLIGHT, NonHighlight) 371 | }; 372 | 373 | static const db_state_t db_states_DD_UPDATEMETADATA[] = { 374 | DB_DEFINE_STATE ( 1, DDUPDATEMETADATA_HIGHLIGHT, Highlight), 375 | DB_DEFINE_STATE ( 2, DDUPDATEMETADATA_NOHIGHLIGHT, NonHighlight) 376 | }; 377 | 378 | static const db_state_t db_states_DD_CREATELINK[] = { 379 | DB_DEFINE_STATE ( 1, DDCREATELINK_HIGHLIGHT, Highlight), 380 | DB_DEFINE_STATE ( 2, DDCREATELINK_NOHIGHLIGHT, NonHighlight) 381 | }; 382 | 383 | static const db_state_t db_states_DD_WARNING[] = { 384 | DB_DEFINE_STATE ( 1, DDWARNING_HIGHLIGHT, Highlight), 385 | DB_DEFINE_STATE ( 2, DDWARNING_NOHIGHLIGHT, NonHighlight) 386 | }; 387 | 388 | static const db_state_t db_states_DD_NONE[] = { 389 | DB_DEFINE_STATE ( 1, DDNONE_HIGHLIGHT, Highlight), 390 | DB_DEFINE_STATE ( 2, DDNONE_NOHIGHLIGHT, NonHighlight) 391 | }; 392 | 393 | static const db_part_t db_parts_DRAGDROP[] = { 394 | DB_DEFINE_PART ( 1, DD_COPY, Copy, db_states_DD_COPY), 395 | DB_DEFINE_PART ( 2, DD_MOVE, Move, db_states_DD_MOVE), 396 | DB_DEFINE_PART ( 3, DD_UPDATEMETADATA, UpdateMetaData, db_states_DD_UPDATEMETADATA), 397 | DB_DEFINE_PART ( 4, DD_CREATELINK, CreateLink, db_states_DD_CREATELINK), 398 | DB_DEFINE_PART ( 5, DD_WARNING, Warning, db_states_DD_WARNING), 399 | DB_DEFINE_PART ( 6, DD_NONE, None, db_states_DD_NONE), 400 | DB_DEFINE_PART_ ( 7, DD_IMAGEBG, ImageBg), 401 | DB_DEFINE_PART_ ( 8, DD_TEXTBG, TextBg) 402 | }; 403 | 404 | 405 | /************ 406 | *** Edit *** 407 | ************/ 408 | 409 | static const db_state_t db_states_EP_EDITTEXT[] = { 410 | DB_DEFINE_STATE ( 1, ETS_NORMAL, Normal), 411 | DB_DEFINE_STATE ( 2, ETS_HOT, Hot), 412 | DB_DEFINE_STATE ( 3, ETS_SELECTED, Selected), 413 | DB_DEFINE_STATE ( 4, ETS_DISABLED, Disabled), 414 | DB_DEFINE_STATE ( 5, ETS_FOCUSED, Focused), 415 | DB_DEFINE_STATE ( 6, ETS_READONLY, ReadOnly), 416 | DB_DEFINE_STATE ( 7, ETS_ASSIST, Assist), 417 | DB_DEFINE_STATE ( 8, ETS_CUEBANNER, CueBanner) 418 | }; 419 | 420 | static const db_state_t db_states_EP_BACKGROUND[] = { 421 | DB_DEFINE_STATE ( 1, EBS_NORMAL, Normal), 422 | DB_DEFINE_STATE ( 2, EBS_HOT, Hot), 423 | DB_DEFINE_STATE ( 3, EBS_DISABLED, Disabled), 424 | DB_DEFINE_STATE ( 4, EBS_FOCUSED, Focused), 425 | DB_DEFINE_STATE ( 5, EBS_READONLY, ReadOnly), 426 | DB_DEFINE_STATE ( 6, EBS_ASSIST, Assist) 427 | }; 428 | 429 | static const db_state_t db_states_EP_BACKGROUNDWITHBORDER[] = { 430 | DB_DEFINE_STATE ( 1, EBWBS_NORMAL, Normal), 431 | DB_DEFINE_STATE ( 2, EBWBS_HOT, Hot), 432 | DB_DEFINE_STATE ( 3, EBWBS_DISABLED, Disabled), 433 | DB_DEFINE_STATE ( 4, EBWBS_FOCUSED, Focused) 434 | }; 435 | 436 | static const db_state_t db_states_EP_EDITBORDER_NOSCROLL[] = { 437 | DB_DEFINE_STATE ( 1, EPSN_NORMAL, Normal), 438 | DB_DEFINE_STATE ( 2, EPSN_HOT, Hot), 439 | DB_DEFINE_STATE ( 3, EPSN_FOCUSED, Focused), 440 | DB_DEFINE_STATE ( 4, EPSN_DISABLED, Disabled) 441 | }; 442 | 443 | static const db_state_t db_states_EP_EDITBORDER_HSCROLL[] = { 444 | DB_DEFINE_STATE ( 1, EPSH_NORMAL, Normal), 445 | DB_DEFINE_STATE ( 2, EPSH_HOT, Hot), 446 | DB_DEFINE_STATE ( 3, EPSH_FOCUSED, Focused), 447 | DB_DEFINE_STATE ( 4, EPSH_DISABLED, Disabled) 448 | }; 449 | 450 | static const db_state_t db_states_EP_EDITBORDER_VSCROLL[] = { 451 | DB_DEFINE_STATE ( 1, EPSV_NORMAL, Normal), 452 | DB_DEFINE_STATE ( 2, EPSV_HOT, Hot), 453 | DB_DEFINE_STATE ( 3, EPSV_FOCUSED, Focused), 454 | DB_DEFINE_STATE ( 4, EPSV_DISABLED, Disabled) 455 | }; 456 | 457 | static const db_state_t db_states_EP_EDITBORDER_HVSCROLL[] = { 458 | DB_DEFINE_STATE ( 1, EPSHV_NORMAL, Normal), 459 | DB_DEFINE_STATE ( 2, EPSHV_HOT, Hot), 460 | DB_DEFINE_STATE ( 3, EPSHV_FOCUSED, Focused), 461 | DB_DEFINE_STATE ( 4, EPSHV_DISABLED, Disabled) 462 | }; 463 | 464 | static const db_part_t db_parts_EDIT[] = { 465 | DB_DEFINE_PART ( 1, EP_EDITTEXT, EditText, db_states_EP_EDITTEXT), 466 | DB_DEFINE_PART_ ( 2, EP_CARET, Caret), 467 | DB_DEFINE_PART ( 3, EP_BACKGROUND, Background, db_states_EP_BACKGROUND), 468 | DB_DEFINE_PART_ ( 4, EP_PASSWORD, Password), 469 | DB_DEFINE_PART ( 5, EP_BACKGROUNDWITHBORDER, BackgroundWithBorder, db_states_EP_BACKGROUNDWITHBORDER), 470 | DB_DEFINE_PART ( 6, EP_EDITBORDER_NOSCROLL, EditBorder_NoScroll, db_states_EP_EDITBORDER_NOSCROLL), 471 | DB_DEFINE_PART ( 7, EP_EDITBORDER_HSCROLL, EditBorder_HScroll, db_states_EP_EDITBORDER_HSCROLL), 472 | DB_DEFINE_PART ( 8, EP_EDITBORDER_VSCROLL, EditBorder_VScroll, db_states_EP_EDITBORDER_VSCROLL), 473 | DB_DEFINE_PART ( 9, EP_EDITBORDER_HVSCROLL, EditBorder_HVScroll, db_states_EP_EDITBORDER_HVSCROLL), 474 | }; 475 | 476 | 477 | /******************* 478 | *** EmptyMarkup *** 479 | *******************/ 480 | 481 | static const db_state_t db_states_EMP_MARKUPTEXT[] = { 482 | DB_DEFINE_STATE ( 1, EMT_NORMALTEXT, NormalText), 483 | DB_DEFINE_STATE ( 2, EMT_LINKTEXT, LinkText) 484 | }; 485 | 486 | static const db_part_t db_parts_EMPTYMARKUP[] = { 487 | DB_DEFINE_PART ( 1, EMP_MARKUPTEXT, MarkupText, db_states_EMP_MARKUPTEXT) 488 | }; 489 | 490 | 491 | /******************* 492 | *** ExplorerBar *** 493 | *******************/ 494 | 495 | static const db_state_t db_states_EBP_HEADERCLOSE[] = { 496 | DB_DEFINE_STATE ( 1, EBHC_NORMAL, Normal), 497 | DB_DEFINE_STATE ( 2, EBHC_HOT, Hot), 498 | DB_DEFINE_STATE ( 3, EBHC_PRESSED, Pressed) 499 | }; 500 | 501 | static const db_state_t db_states_EBP_HEADERPIN[] = { 502 | DB_DEFINE_STATE ( 1, EBHP_NORMAL, Normal), 503 | DB_DEFINE_STATE ( 2, EBHP_HOT, Hot), 504 | DB_DEFINE_STATE ( 3, EBHP_PRESSED, Pressed), 505 | DB_DEFINE_STATE ( 4, EBHP_SELECTEDNORMAL, SelectedNormal), 506 | DB_DEFINE_STATE ( 5, EBHP_SELECTEDHOT, SelectedHot), 507 | DB_DEFINE_STATE ( 6, EBHP_SELECTEDPRESSED, SelectedPressed) 508 | }; 509 | 510 | static const db_state_t db_states_EBP_IEBARMENU[] = { 511 | DB_DEFINE_STATE ( 1, EBM_NORMAL, Normal), 512 | DB_DEFINE_STATE ( 2, EBM_HOT, Hot), 513 | DB_DEFINE_STATE ( 3, EBM_PRESSED, Pressed) 514 | }; 515 | 516 | static const db_state_t db_states_EBP_NORMALGROUPCOLLAPSE[] = { 517 | DB_DEFINE_STATE ( 1, EBNGC_NORMAL, Normal), 518 | DB_DEFINE_STATE ( 2, EBNGC_HOT, Hot), 519 | DB_DEFINE_STATE ( 3, EBNGC_PRESSED, Pressed) 520 | }; 521 | 522 | static const db_state_t db_states_EBP_NORMALGROUPEXPAND[] = { 523 | DB_DEFINE_STATE ( 1, EBNGE_NORMAL, Normal), 524 | DB_DEFINE_STATE ( 2, EBNGE_HOT, Hot), 525 | DB_DEFINE_STATE ( 3, EBNGE_PRESSED, Pressed) 526 | }; 527 | 528 | static const db_state_t db_states_EBP_SPECIALGROUPCOLLAPSE[] = { 529 | DB_DEFINE_STATE ( 1, EBSGC_NORMAL, Normal), 530 | DB_DEFINE_STATE ( 2, EBSGC_HOT, Hot), 531 | DB_DEFINE_STATE ( 3, EBSGC_PRESSED, Pressed) 532 | }; 533 | 534 | static const db_state_t db_states_EBP_SPECIALGROUPEXPAND[] = { 535 | DB_DEFINE_STATE ( 1, EBSGE_NORMAL, Normal), 536 | DB_DEFINE_STATE ( 2, EBSGE_HOT, Hot), 537 | DB_DEFINE_STATE ( 3, EBSGE_PRESSED, Pressed) 538 | }; 539 | 540 | static const db_part_t db_parts_EXPLORERBAR[] = { 541 | DB_DEFINE_PART_ ( 1, EBP_HEADERBACKGROUND, HeaderBackground), 542 | DB_DEFINE_PART ( 2, EBP_HEADERCLOSE, HeaderClose, db_states_EBP_HEADERCLOSE), 543 | DB_DEFINE_PART ( 3, EBP_HEADERPIN, HeaderPin, db_states_EBP_HEADERPIN), 544 | DB_DEFINE_PART ( 4, EBP_IEBARMENU, HeaderIEBarMenu, db_states_EBP_IEBARMENU), 545 | DB_DEFINE_PART_ ( 5, EBP_NORMALGROUPBACKGROUND, NormalGroupBackground), 546 | DB_DEFINE_PART ( 6, EBP_NORMALGROUPCOLLAPSE, NormalGroupCollapse, db_states_EBP_NORMALGROUPCOLLAPSE), 547 | DB_DEFINE_PART ( 7, EBP_NORMALGROUPEXPAND, NormalGroupExpand, db_states_EBP_NORMALGROUPEXPAND), 548 | DB_DEFINE_PART_ ( 8, EBP_NORMALGROUPHEAD, NormalGroupHead), 549 | DB_DEFINE_PART_ ( 9, EBP_SPECIALGROUPBACKGROUND, SpecialGroupBackground), 550 | DB_DEFINE_PART (10, EBP_SPECIALGROUPCOLLAPSE, SpecialGroupCollapse, db_states_EBP_SPECIALGROUPCOLLAPSE), 551 | DB_DEFINE_PART (11, EBP_SPECIALGROUPEXPAND, SpecialGroupExpand, db_states_EBP_SPECIALGROUPEXPAND), 552 | DB_DEFINE_PART_ (12, EBP_SPECIALGROUPHEAD, SpecialGroupHead) 553 | }; 554 | 555 | 556 | /************** 557 | *** Flyout *** 558 | **************/ 559 | 560 | static const db_state_t db_states_FLYOUT_BODY[] = { 561 | DB_DEFINE_STATE ( 1, FBS_NORMAL, Normal), 562 | DB_DEFINE_STATE ( 2, FBS_EMPHASIZED, Emphasized) 563 | }; 564 | 565 | static const db_state_t db_states_FLYOUT_LABEL[] = { 566 | DB_DEFINE_STATE ( 1, FLS_NORMAL, Normal), 567 | DB_DEFINE_STATE ( 2, FLS_SELECTED, Selected), 568 | DB_DEFINE_STATE ( 3, FLS_EMPHASIZED, Emphasized), 569 | DB_DEFINE_STATE ( 4, FLS_DISABLED, Disabled) 570 | }; 571 | 572 | static const db_state_t db_states_FLYOUT_LINK[] = { 573 | DB_DEFINE_STATE ( 1, FLYOUTLINK_NORMAL, Normal), 574 | DB_DEFINE_STATE ( 2, FLYOUTLINK_HOVER, Hover) 575 | }; 576 | 577 | static const db_state_t db_states_FLYOUT_LINKHEADER[] = { 578 | DB_DEFINE_STATE ( 1, FLH_NORMAL, Normal), 579 | DB_DEFINE_STATE ( 2, FLH_HOVER, Hover) 580 | }; 581 | 582 | static const db_part_t db_parts_FLYOUT[] = { 583 | DB_DEFINE_PART_ ( 1, FLYOUT_HEADER, Header), 584 | DB_DEFINE_PART ( 2, FLYOUT_BODY, Body, db_states_FLYOUT_BODY), 585 | DB_DEFINE_PART ( 3, FLYOUT_LABEL, Label, db_states_FLYOUT_LABEL), 586 | DB_DEFINE_PART ( 4, FLYOUT_LINK, Link, db_states_FLYOUT_LINK), 587 | DB_DEFINE_PART_ ( 5, FLYOUT_DIVIDER, Divider), 588 | DB_DEFINE_PART_ ( 6, FLYOUT_WINDOW, Window), 589 | DB_DEFINE_PART_ ( 7, FLYOUT_LINKAREA, LinkArea), 590 | DB_DEFINE_PART ( 8, FLYOUT_LINKHEADER, LinkHeader, db_states_FLYOUT_LINKHEADER), 591 | }; 592 | 593 | 594 | /*************** 595 | *** Globals *** 596 | ***************/ 597 | 598 | /* FIXME: Mostly just guessing, docs is incomplete and missing in SDK headers */ 599 | 600 | static const db_state_t db_states_GP_BORDER[] = { 601 | DB_DEFINE_STATE ( 1, BSS_FLAT, Flat), 602 | DB_DEFINE_STATE ( 2, BSS_RAISED, Raised), 603 | DB_DEFINE_STATE ( 3, BSS_SUNKEN, Sunken), 604 | }; 605 | 606 | static const db_state_t db_states_GP_LINEHORZ[] = { 607 | DB_DEFINE_STATE ( 1, LHS_FLAT, Flat), 608 | DB_DEFINE_STATE ( 2, LHS_RAISED, Raised), 609 | DB_DEFINE_STATE ( 3, LHS_SUNKEN, Sunken), 610 | }; 611 | 612 | static const db_state_t db_states_GP_LINEVERT[] = { 613 | DB_DEFINE_STATE ( 1, LVS_FLAT, Flat), 614 | DB_DEFINE_STATE ( 2, LVS_RAISED, Raised), 615 | DB_DEFINE_STATE ( 3, LVS_SUNKEN, Sunken), 616 | }; 617 | 618 | static const db_part_t db_parts_GLOBALS[] = { 619 | DB_DEFINE_PART ( 1, GP_BORDER, Border, db_states_GP_BORDER), 620 | DB_DEFINE_PART ( 2, GP_LINEHORZ, LineHorz, db_states_GP_LINEHORZ), 621 | DB_DEFINE_PART ( 3, GP_LINEVERT, LineVert, db_states_GP_LINEVERT) 622 | }; 623 | 624 | 625 | /************** 626 | *** Header *** 627 | **************/ 628 | 629 | static const db_state_t db_states_HP_HEADERITEM[] = { 630 | DB_DEFINE_STATE ( 1, HIS_NORMAL, Normal), 631 | DB_DEFINE_STATE ( 2, HIS_HOT, Hot), 632 | DB_DEFINE_STATE ( 3, HIS_PRESSED, Pressed), 633 | DB_DEFINE_STATE ( 4, HIS_SORTEDNORMAL, SortedNormal), 634 | DB_DEFINE_STATE ( 5, HIS_SORTEDHOT, SortedHot), 635 | DB_DEFINE_STATE ( 6, HIS_SORTEDPRESSED, SortedPressed), 636 | DB_DEFINE_STATE ( 7, HIS_ICONNORMAL, IconNormal), 637 | DB_DEFINE_STATE ( 8, HIS_ICONHOT, IconHot), 638 | DB_DEFINE_STATE ( 9, HIS_ICONPRESSED, IconPressed), 639 | DB_DEFINE_STATE (10, HIS_ICONSORTEDNORMAL, IconSortedNormal), 640 | DB_DEFINE_STATE (11, HIS_ICONSORTEDHOT, IconSortedHot), 641 | DB_DEFINE_STATE (12, HIS_ICONSORTEDPRESSED, IconSortedPressed) 642 | }; 643 | 644 | static const db_state_t db_states_HP_HEADERITEMLEFT[] = { 645 | DB_DEFINE_STATE ( 1, HILS_NORMAL, Normal), 646 | DB_DEFINE_STATE ( 2, HILS_HOT, Hot), 647 | DB_DEFINE_STATE ( 3, HILS_PRESSED, Pressed) 648 | }; 649 | 650 | static const db_state_t db_states_HP_HEADERITEMRIGHT[] = { 651 | DB_DEFINE_STATE ( 1, HIRS_NORMAL, Normal), 652 | DB_DEFINE_STATE ( 2, HIRS_HOT, Hot), 653 | DB_DEFINE_STATE ( 3, HIRS_PRESSED, Pressed) 654 | }; 655 | 656 | static const db_state_t db_states_HP_HEADERSORTARROW[] = { 657 | DB_DEFINE_STATE ( 1, HSAS_SORTEDUP, SortedUp), 658 | DB_DEFINE_STATE ( 2, HSAS_SORTEDDOWN, SortedDown) 659 | }; 660 | 661 | static const db_state_t db_states_HP_HEADERDROPDOWN[] = { 662 | DB_DEFINE_STATE ( 1, HDDS_NORMAL, Normal), 663 | DB_DEFINE_STATE ( 2, HDDS_SOFTHOT, SoftHot), 664 | DB_DEFINE_STATE ( 3, HDDS_HOT, Hot) 665 | }; 666 | 667 | static const db_state_t db_states_HP_HEADERDROPDOWNFILTER[] = { 668 | DB_DEFINE_STATE ( 1, HDDFS_NORMAL, Normal), 669 | DB_DEFINE_STATE ( 2, HDDFS_SOFTHOT, SoftHot), 670 | DB_DEFINE_STATE ( 3, HDDFS_HOT, Hot) 671 | }; 672 | 673 | static const db_state_t db_states_HP_HEADEROVERFLOW[] = { 674 | DB_DEFINE_STATE ( 1, HOFS_NORMAL, Normal), 675 | DB_DEFINE_STATE ( 2, HOFS_HOT, Hot) 676 | }; 677 | 678 | static const db_part_t db_parts_HEADER[] = { 679 | DB_DEFINE_PART ( 1, HP_HEADERITEM, HeaderItem, db_states_HP_HEADERITEM), 680 | DB_DEFINE_PART ( 2, HP_HEADERITEMLEFT, HeaderItemLeft, db_states_HP_HEADERITEMLEFT), 681 | DB_DEFINE_PART ( 3, HP_HEADERITEMRIGHT, HeaderItemRight, db_states_HP_HEADERITEMRIGHT), 682 | DB_DEFINE_PART ( 4, HP_HEADERSORTARROW, HeaderSortArrow, db_states_HP_HEADERSORTARROW), 683 | DB_DEFINE_PART ( 5, HP_HEADERDROPDOWN, HeaderDropDown, db_states_HP_HEADERDROPDOWN), 684 | DB_DEFINE_PART ( 6, HP_HEADERDROPDOWNFILTER, HeaderDropDownFilter, db_states_HP_HEADERDROPDOWNFILTER), 685 | DB_DEFINE_PART ( 7, HP_HEADEROVERFLOW, HeaderOverflow, db_states_HP_HEADEROVERFLOW) 686 | }; 687 | 688 | 689 | /************ 690 | *** Link *** 691 | ************/ 692 | 693 | static const db_state_t db_states_LP_HYPERLINK[] = { 694 | DB_DEFINE_STATE ( 1, HLS_NORMALTEXT, NormalText), 695 | DB_DEFINE_STATE ( 2, HLS_LINKTEXT, LinkText) 696 | }; 697 | 698 | static const db_part_t db_parts_LINK[] = { 699 | DB_DEFINE_PART ( 1, LP_HYPERLINK, HyperLink, db_states_LP_HYPERLINK) 700 | }; 701 | 702 | 703 | /*************** 704 | *** ListBox *** 705 | ***************/ 706 | 707 | static const db_state_t db_states_LBCP_BORDER_HSCROLL[] = { 708 | DB_DEFINE_STATE ( 1, LBPSH_NORMAL, Normal), 709 | DB_DEFINE_STATE ( 2, LBPSH_FOCUSED, Focused), 710 | DB_DEFINE_STATE ( 3, LBPSH_HOT, Hot), 711 | DB_DEFINE_STATE ( 4, LBPSH_DISABLED, Disabled) 712 | }; 713 | 714 | static const db_state_t db_states_LBCP_BORDER_HVSCROLL[] = { 715 | DB_DEFINE_STATE ( 1, LBPSHV_NORMAL, Normal), 716 | DB_DEFINE_STATE ( 2, LBPSHV_FOCUSED, Focused), 717 | DB_DEFINE_STATE ( 3, LBPSHV_HOT, Hot), 718 | DB_DEFINE_STATE ( 4, LBPSHV_DISABLED, Disabled) 719 | }; 720 | 721 | static const db_state_t db_states_LBCP_BORDER_NOSCROLL[] = { 722 | DB_DEFINE_STATE ( 1, LBPSN_NORMAL, Normal), 723 | DB_DEFINE_STATE ( 2, LBPSN_FOCUSED, Focused), 724 | DB_DEFINE_STATE ( 3, LBPSN_HOT, Hot), 725 | DB_DEFINE_STATE ( 4, LBPSN_DISABLED, Disabled) 726 | }; 727 | 728 | static const db_state_t db_states_LBCP_BORDER_VSCROLL[] = { 729 | DB_DEFINE_STATE ( 1, LBPSV_NORMAL, Normal), 730 | DB_DEFINE_STATE ( 2, LBPSV_FOCUSED, Focused), 731 | DB_DEFINE_STATE ( 3, LBPSV_HOT, Hot), 732 | DB_DEFINE_STATE ( 4, LBPSV_DISABLED, Disabled) 733 | }; 734 | 735 | static const db_state_t db_states_LBCP_ITEM[] = { 736 | DB_DEFINE_STATE ( 1, LBPSI_HOT, Hot), 737 | DB_DEFINE_STATE ( 2, LBPSI_HOTSELECTED, HotSelected), 738 | DB_DEFINE_STATE ( 3, LBPSI_SELECTED, Selected), 739 | DB_DEFINE_STATE ( 4, LBPSI_SELECTEDNOTFOCUS, SelectedNotFocus) 740 | }; 741 | 742 | static const db_part_t db_parts_LISTBOX[] = { 743 | DB_DEFINE_PART ( 1, LBCP_BORDER_HSCROLL, Border_HScroll, db_states_LBCP_BORDER_HSCROLL), 744 | DB_DEFINE_PART ( 2, LBCP_BORDER_HVSCROLL, Border_HVScroll, db_states_LBCP_BORDER_HVSCROLL), 745 | DB_DEFINE_PART ( 3, LBCP_BORDER_NOSCROLL, Border_NoScroll, db_states_LBCP_BORDER_NOSCROLL), 746 | DB_DEFINE_PART ( 4, LBCP_BORDER_VSCROLL, Border_VScroll, db_states_LBCP_BORDER_VSCROLL), 747 | DB_DEFINE_PART ( 5, LBCP_ITEM, Item, db_states_LBCP_ITEM) 748 | }; 749 | 750 | 751 | /**************** 752 | *** ListView *** 753 | ****************/ 754 | 755 | static const db_state_t db_states_LVP_LISTITEM[] = { 756 | DB_DEFINE_STATE ( 1, LISS_NORMAL, Normal), 757 | DB_DEFINE_STATE ( 2, LISS_HOT, Hot), 758 | DB_DEFINE_STATE ( 3, LISS_SELECTED, Selected), 759 | DB_DEFINE_STATE ( 4, LISS_DISABLED, Disabled), 760 | DB_DEFINE_STATE ( 5, LISS_SELECTEDNOTFOCUS, SelectedNotFocus), 761 | DB_DEFINE_STATE ( 6, LISS_HOTSELECTED, HotSelected) 762 | }; 763 | 764 | static const db_state_t db_states_LVP_GROUPHEADER[] = { 765 | DB_DEFINE_STATE ( 1, LVGH_OPEN, Open), 766 | DB_DEFINE_STATE ( 2, LVGH_OPENHOT, OpenHot), 767 | DB_DEFINE_STATE ( 3, LVGH_OPENSELECTED, OpenSelected), 768 | DB_DEFINE_STATE ( 4, LVGH_OPENSELECTEDHOT, OpenSelectedHot), 769 | DB_DEFINE_STATE ( 5, LVGH_OPENSELECTEDNOTFOCUSED, OpenSelectedNotFocused), 770 | DB_DEFINE_STATE ( 6, LVGH_OPENSELECTEDNOTFOCUSEDHOT, OpenSelectedNotFocusedHot), 771 | DB_DEFINE_STATE ( 7, LVGH_OPENMIXEDSELECTION, OpenMixedSelection), 772 | DB_DEFINE_STATE ( 8, LVGH_OPENMIXEDSELECTIONHOT, OpenMixedSelectionHot), 773 | DB_DEFINE_STATE ( 9, LVGH_CLOSE, Close), 774 | DB_DEFINE_STATE (10, LVGH_CLOSEHOT, CloseHot), 775 | DB_DEFINE_STATE (11, LVGH_CLOSESELECTED, CloseSelected), 776 | DB_DEFINE_STATE (12, LVGH_CLOSESELECTEDHOT, CloseSelectedHot), 777 | DB_DEFINE_STATE (13, LVGH_CLOSESELECTEDNOTFOCUSED, CloseSelectedNotFocused), 778 | DB_DEFINE_STATE (14, LVGH_CLOSESELECTEDNOTFOCUSEDHOT, CloseSelectedNotFocusedHot), 779 | DB_DEFINE_STATE (15, LVGH_CLOSEMIXEDSELECTION, CloseMixedSelection), 780 | DB_DEFINE_STATE (16, LVGH_CLOSEMIXEDSELECTIONHOT, CloseMixedSelectionHot) 781 | }; 782 | 783 | static const db_state_t db_states_LVP_GROUPHEADERLINE[] = { 784 | DB_DEFINE_STATE ( 1, LVGHL_OPEN, Open), 785 | DB_DEFINE_STATE ( 2, LVGHL_OPENHOT, OpenHot), 786 | DB_DEFINE_STATE ( 3, LVGHL_OPENSELECTED, OpenSelected), 787 | DB_DEFINE_STATE ( 4, LVGHL_OPENSELECTEDHOT, OpenSelectedHot), 788 | DB_DEFINE_STATE ( 5, LVGHL_OPENSELECTEDNOTFOCUSED, OpenSelectedNotFocused), 789 | DB_DEFINE_STATE ( 6, LVGHL_OPENSELECTEDNOTFOCUSEDHOT, OpenSelectedNotFocusedHot), 790 | DB_DEFINE_STATE ( 7, LVGHL_OPENMIXEDSELECTION, OpenMixedSelection), 791 | DB_DEFINE_STATE ( 8, LVGHL_OPENMIXEDSELECTIONHOT, OpenMixedSelectionHot), 792 | DB_DEFINE_STATE ( 9, LVGHL_CLOSE, Close), 793 | DB_DEFINE_STATE (10, LVGHL_CLOSEHOT, CloseHot), 794 | DB_DEFINE_STATE (11, LVGHL_CLOSESELECTED, CloseSelected), 795 | DB_DEFINE_STATE (12, LVGHL_CLOSESELECTEDHOT, CloseSelectedHot), 796 | DB_DEFINE_STATE (13, LVGHL_CLOSESELECTEDNOTFOCUSED, CloseSelectedNotFocused), 797 | DB_DEFINE_STATE (14, LVGHL_CLOSESELECTEDNOTFOCUSEDHOT, CloseSelectedNotFocusedHot), 798 | DB_DEFINE_STATE (15, LVGHL_CLOSEMIXEDSELECTION, CloseMixedSelection), 799 | DB_DEFINE_STATE (16, LVGHL_CLOSEMIXEDSELECTIONHOT, CloseMixedSelectionHot) 800 | }; 801 | 802 | static const db_state_t db_states_LVP_EXPANDBUTTON[] = { 803 | DB_DEFINE_STATE ( 1, LVEB_NORMAL, Normal), 804 | DB_DEFINE_STATE ( 2, LVEB_HOVER, Hover), 805 | DB_DEFINE_STATE ( 3, LVEB_PUSHED, Pushed) 806 | }; 807 | 808 | static const db_state_t db_states_LVP_COLLAPSEBUTTON[] = { 809 | DB_DEFINE_STATE ( 1, LVCB_NORMAL, Normal), 810 | DB_DEFINE_STATE ( 2, LVCB_HOVER, Hover), 811 | DB_DEFINE_STATE ( 3, LVCB_PUSHED, Pushed) 812 | }; 813 | 814 | static const db_part_t db_parts_LISTVIEW[] = { 815 | DB_DEFINE_PART ( 1, LVP_LISTITEM, ListItem, db_states_LVP_LISTITEM), 816 | DB_DEFINE_PART_ ( 2, LVP_LISTGROUP, ListGroup), 817 | DB_DEFINE_PART_ ( 3, LVP_LISTDETAIL, ListDetail), 818 | DB_DEFINE_PART_ ( 4, LVP_LISTSORTEDDETAIL, ListSortedDetail), 819 | DB_DEFINE_PART_ ( 5, LVP_EMPTYTEXT, EmptyText), 820 | DB_DEFINE_PART ( 6, LVP_GROUPHEADER, GroupHeader, db_states_LVP_GROUPHEADER), 821 | DB_DEFINE_PART ( 7, LVP_GROUPHEADERLINE, GroupHeaderLine, db_states_LVP_GROUPHEADERLINE), 822 | DB_DEFINE_PART ( 8, LVP_EXPANDBUTTON, ExpandButton, db_states_LVP_EXPANDBUTTON), 823 | DB_DEFINE_PART ( 9, LVP_COLLAPSEBUTTON, CollapseButton, db_states_LVP_COLLAPSEBUTTON), 824 | DB_DEFINE_PART_ (10, LVP_COLUMNDETAIL, ColumnDetail) 825 | }; 826 | 827 | 828 | /************ 829 | *** Menu *** 830 | ************/ 831 | 832 | static const db_state_t db_states_MENU_BARBACKGROUND[] = { 833 | DB_DEFINE_STATE ( 1, MB_ACTIVE, Active), 834 | DB_DEFINE_STATE ( 2, MB_INACTIVE, Inactive) 835 | }; 836 | 837 | static const db_state_t db_states_MENU_BARITEM[] = { 838 | DB_DEFINE_STATE ( 1, MBI_NORMAL, Normal), 839 | DB_DEFINE_STATE ( 2, MBI_HOT, Hot), 840 | DB_DEFINE_STATE ( 3, MBI_PUSHED, Pushed), 841 | DB_DEFINE_STATE ( 4, MBI_DISABLED, Disabled), 842 | DB_DEFINE_STATE ( 5, MBI_DISABLEDHOT, DisabledHot), 843 | DB_DEFINE_STATE ( 6, MBI_DISABLEDPUSHED, DisabledPushed) 844 | }; 845 | 846 | static const db_state_t db_states_MENU_POPUPCHECK[] = { 847 | DB_DEFINE_STATE ( 1, MC_CHECKMARKNORMAL, CheckMarkNormal), 848 | DB_DEFINE_STATE ( 2, MC_CHECKMARKDISABLED, CheckMarkDisabled), 849 | DB_DEFINE_STATE ( 3, MC_BULLETNORMAL, BulletNormal), 850 | DB_DEFINE_STATE ( 4, MC_BULLETDISABLED, BulletDisabled) 851 | }; 852 | 853 | static const db_state_t db_states_MENU_POPUPCHECKBACKGROUND[] = { 854 | DB_DEFINE_STATE ( 1, MCB_DISABLED, Disabled), 855 | DB_DEFINE_STATE ( 2, MCB_NORMAL, Normal), 856 | DB_DEFINE_STATE ( 3, MCB_BITMAP, Bitmap) 857 | }; 858 | 859 | static const db_state_t db_states_MENU_POPUPITEM[] = { 860 | DB_DEFINE_STATE ( 1, MPI_NORMAL, Normal), 861 | DB_DEFINE_STATE ( 2, MPI_HOT, Hot), 862 | DB_DEFINE_STATE ( 3, MPI_DISABLED, Disabled), 863 | DB_DEFINE_STATE ( 4, MPI_DISABLEDHOT, DisabledHot) 864 | }; 865 | 866 | static const db_state_t db_states_MENU_POPUPSUBMENU[] = { 867 | DB_DEFINE_STATE ( 1, MSM_NORMAL, Normal), 868 | DB_DEFINE_STATE ( 2, MSM_DISABLED, Disabled) 869 | }; 870 | 871 | static const db_state_t db_states_MENU_SYSTEMCLOSE[] = { 872 | DB_DEFINE_STATE ( 1, MSYSC_NORMAL, Normal), 873 | DB_DEFINE_STATE ( 2, MSYSC_DISABLED, Disabled) 874 | }; 875 | 876 | static const db_state_t db_states_MENU_SYSTEMMAXIMIZE[] = { 877 | DB_DEFINE_STATE ( 1, MSYSMX_NORMAL, Normal), 878 | DB_DEFINE_STATE ( 2, MSYSMX_DISABLED, Disabled) 879 | }; 880 | 881 | static const db_state_t db_states_MENU_SYSTEMMINIMIZE[] = { 882 | DB_DEFINE_STATE ( 1, MSYSMN_NORMAL, Normal), 883 | DB_DEFINE_STATE ( 2, MSYSMN_DISABLED, Disabled) 884 | }; 885 | 886 | static const db_state_t db_states_MENU_SYSTEMRESTORE[] = { 887 | DB_DEFINE_STATE ( 1, MSYSR_NORMAL, Normal), 888 | DB_DEFINE_STATE ( 2, MSYSR_DISABLED, Disabled) 889 | }; 890 | 891 | static const db_part_t db_parts_MENU[] = { 892 | DB_DEFINE_PART_ ( 1, MENU_MENUITEM_TMSCHEMA, MenuItem), 893 | DB_DEFINE_PART_ ( 2, MENU_MENUDROPDOWN_TMSCHEMA, MenuDropDown), 894 | DB_DEFINE_PART_ ( 3, MENU_MENUBARITEM_TMSCHEMA, MenuBarItem), 895 | DB_DEFINE_PART_ ( 4, MENU_MENUBARDROPDOWN_TMSCHEMA, MenuBarDropDown), 896 | DB_DEFINE_PART_ ( 5, MENU_CHEVRON_TMSCHEMA, Chevron), 897 | DB_DEFINE_PART_ ( 6, MENU_SEPARATOR_TMSCHEMA, Separator), 898 | DB_DEFINE_PART ( 7, MENU_BARBACKGROUND, BarBackground, db_states_MENU_BARBACKGROUND), 899 | DB_DEFINE_PART ( 8, MENU_BARITEM, BarItem, db_states_MENU_BARITEM), 900 | DB_DEFINE_PART_ ( 9, MENU_POPUPBACKGROUND, PopupBackground), 901 | DB_DEFINE_PART_ (10, MENU_POPUPBORDERS, PopupBorders), 902 | DB_DEFINE_PART (11, MENU_POPUPCHECK, PopupCheck, db_states_MENU_POPUPCHECK), 903 | DB_DEFINE_PART (12, MENU_POPUPCHECKBACKGROUND, PopupCheckBackground, db_states_MENU_POPUPCHECKBACKGROUND), 904 | DB_DEFINE_PART_ (13, MENU_POPUPGUTTER, PopupGutter), 905 | DB_DEFINE_PART (14, MENU_POPUPITEM, PopupItem, db_states_MENU_POPUPITEM), 906 | DB_DEFINE_PART_ (15, MENU_POPUPSEPARATOR, PopupSeparator), 907 | DB_DEFINE_PART (16, MENU_POPUPSUBMENU, PopupSubMenu, db_states_MENU_POPUPSUBMENU), 908 | DB_DEFINE_PART (17, MENU_SYSTEMCLOSE, SystemClose, db_states_MENU_SYSTEMCLOSE), 909 | DB_DEFINE_PART (18, MENU_SYSTEMMAXIMIZE, SystemMaximize, db_states_MENU_SYSTEMMAXIMIZE), 910 | DB_DEFINE_PART (19, MENU_SYSTEMMINIMIZE, SystemMinimize, db_states_MENU_SYSTEMMINIMIZE), 911 | DB_DEFINE_PART (20, MENU_SYSTEMRESTORE, SystemRestore, db_states_MENU_SYSTEMRESTORE) 912 | }; 913 | 914 | 915 | /**************** 916 | *** MenuBand *** 917 | ****************/ 918 | 919 | static const db_state_t db_states_MDP_NEWAPPBUTTON[] = { 920 | DB_DEFINE_STATE ( 1, MDS_NORMAL, Normal), 921 | DB_DEFINE_STATE ( 2, MDS_HOT, Hot), 922 | DB_DEFINE_STATE ( 3, MDS_PRESSED, Pressed), 923 | DB_DEFINE_STATE ( 4, MDS_DISABLED, Disabled), 924 | DB_DEFINE_STATE ( 5, MDS_CHECKED, Checked), 925 | DB_DEFINE_STATE ( 6, MDS_HOTCHECKED, HotChecked) 926 | }; 927 | 928 | static const db_part_t db_parts_MENUBAND[] = { 929 | DB_DEFINE_PART ( 1, MDP_NEWAPPBUTTON, NewAppButton, db_states_MDP_NEWAPPBUTTON), 930 | DB_DEFINE_PART_ ( 2, MDP_SEPERATOR, Separator) 931 | }; 932 | 933 | 934 | /**************** 935 | *** MonthCal *** 936 | ****************/ 937 | 938 | static const db_state_t db_states_MC_GRIDCELLBACKGROUND[] = { 939 | DB_DEFINE_STATE ( 1, MCGCB_SELECTED, Selected), 940 | DB_DEFINE_STATE ( 2, MCGCB_HOT, Hot), 941 | DB_DEFINE_STATE ( 3, MCGCB_SELECTEDHOT, SelectedHot), 942 | DB_DEFINE_STATE ( 4, MCGCB_SELECTEDNOTFOCUSED, SelectedNotFocused), 943 | DB_DEFINE_STATE ( 5, MCGCB_TODAY, Today) 944 | }; 945 | 946 | static const db_state_t db_states_MC_GRIDCELL[] = { 947 | DB_DEFINE_STATE ( 1, MCGC_HOT, Hot), 948 | DB_DEFINE_STATE ( 2, MCGC_HASSTATE, HasState), 949 | DB_DEFINE_STATE ( 3, MCGC_HASSTATEHOT, HasStateHot), 950 | DB_DEFINE_STATE ( 4, MCGC_TODAY, Today) 951 | }; 952 | 953 | static const db_state_t db_states_MC_GRIDCELLUPPER[] = { 954 | DB_DEFINE_STATE ( 1, MCGCU_HOT, Hot), 955 | DB_DEFINE_STATE ( 2, MCGCU_HASSTATE, HasState), 956 | DB_DEFINE_STATE ( 3, MCGCU_HASSTATEHOT, HasStateHot) 957 | }; 958 | 959 | static const db_state_t db_states_MC_TRAILINGGRIDCELL[] = { 960 | DB_DEFINE_STATE ( 1, MCTGC_HOT, Hot), 961 | DB_DEFINE_STATE ( 2, MCTGC_HASSTATE, HasState), 962 | DB_DEFINE_STATE ( 3, MCTGC_HASSTATEHOT, HasStateHot), 963 | DB_DEFINE_STATE ( 4, MCTGC_TODAY, Today) 964 | }; 965 | 966 | static const db_state_t db_states_MC_TRAILINGGRIDCELLUPPER[] = { 967 | DB_DEFINE_STATE ( 1, MCTGCU_HOT, Hot), 968 | DB_DEFINE_STATE ( 2, MCTGCU_HASSTATE, HasState), 969 | DB_DEFINE_STATE ( 3, MCTGCU_HASSTATEHOT, HasStateHot) 970 | }; 971 | 972 | static const db_state_t db_states_MC_NAVNEXT[] = { 973 | DB_DEFINE_STATE ( 1, MCNN_NORMAL, Normal), 974 | DB_DEFINE_STATE ( 2, MCNN_HOT, Hot), 975 | DB_DEFINE_STATE ( 3, MCNN_PRESSED, Pressed), 976 | DB_DEFINE_STATE ( 4, MCNN_DISABLED, Disabled) 977 | }; 978 | 979 | static const db_state_t db_states_MC_NAVPREV[] = { 980 | DB_DEFINE_STATE ( 1, MCNP_NORMAL, Normal), 981 | DB_DEFINE_STATE ( 2, MCNP_HOT, Hot), 982 | DB_DEFINE_STATE ( 3, MCNP_PRESSED, Pressed), 983 | DB_DEFINE_STATE ( 4, MCNP_DISABLED, Disabled) 984 | }; 985 | 986 | static const db_part_t db_parts_MONTHCAL[] = { 987 | DB_DEFINE_PART_ ( 1, MC_BACKGROUND, Background), 988 | DB_DEFINE_PART_ ( 2, MC_BORDERS, Borders), 989 | DB_DEFINE_PART_ ( 3, MC_GRIDBACKGROUND, GridBackground), 990 | DB_DEFINE_PART_ ( 4, MC_COLHEADERSPLITTER, ColheaderSplitter), 991 | DB_DEFINE_PART ( 5, MC_GRIDCELLBACKGROUND, GridCellBackground, db_states_MC_GRIDCELLBACKGROUND), 992 | DB_DEFINE_PART ( 6, MC_GRIDCELL, GridCell, db_states_MC_GRIDCELL), 993 | DB_DEFINE_PART ( 7, MC_GRIDCELLUPPER, GridCellUpper, db_states_MC_GRIDCELLUPPER), 994 | DB_DEFINE_PART ( 8, MC_TRAILINGGRIDCELL, TrailingGridCell, db_states_MC_TRAILINGGRIDCELL), 995 | DB_DEFINE_PART ( 9, MC_TRAILINGGRIDCELLUPPER, TrailingGridCellUpper, db_states_MC_TRAILINGGRIDCELLUPPER), 996 | DB_DEFINE_PART (10, MC_NAVNEXT, NavNext, db_states_MC_NAVNEXT), 997 | DB_DEFINE_PART (11, MC_NAVPREV, NavPrev, db_states_MC_NAVPREV) 998 | }; 999 | 1000 | 1001 | /****************** 1002 | *** Navigation *** 1003 | ******************/ 1004 | 1005 | static const db_state_t db_states_NAV_BACKBUTTON[] = { 1006 | DB_DEFINE_STATE ( 1, NAV_BB_NORMAL, Normal), 1007 | DB_DEFINE_STATE ( 2, NAV_BB_HOT, Hot), 1008 | DB_DEFINE_STATE ( 3, NAV_BB_PRESSED, Pressed), 1009 | DB_DEFINE_STATE ( 4, NAV_BB_DISABLED, Disabled) 1010 | }; 1011 | 1012 | static const db_state_t db_states_NAV_FORWARDBUTTON[] = { 1013 | DB_DEFINE_STATE ( 1, NAV_FB_NORMAL, Normal), 1014 | DB_DEFINE_STATE ( 2, NAV_FB_HOT, Hot), 1015 | DB_DEFINE_STATE ( 3, NAV_FB_PRESSED, Pressed), 1016 | DB_DEFINE_STATE ( 4, NAV_FB_DISABLED, Disabled) 1017 | }; 1018 | 1019 | static const db_state_t db_states_NAV_MENUBUTTON[] = { 1020 | DB_DEFINE_STATE ( 1, NAV_MB_NORMAL, Normal), 1021 | DB_DEFINE_STATE ( 2, NAV_MB_HOT, Hot), 1022 | DB_DEFINE_STATE ( 3, NAV_MB_PRESSED, Pressed), 1023 | DB_DEFINE_STATE ( 4, NAV_MB_DISABLED, Disabled) 1024 | }; 1025 | 1026 | static const db_part_t db_parts_NAVIGATION[] = { 1027 | DB_DEFINE_PART ( 1, NAV_BACKBUTTON, BackButton, db_states_NAV_BACKBUTTON), 1028 | DB_DEFINE_PART ( 2, NAV_FORWARDBUTTON, ForwardButton, db_states_NAV_FORWARDBUTTON), 1029 | DB_DEFINE_PART ( 3, NAV_MENUBUTTON, MenuButton, db_states_NAV_MENUBUTTON) 1030 | }; 1031 | 1032 | 1033 | /************ 1034 | *** Page *** 1035 | ************/ 1036 | 1037 | static const db_state_t db_states_PGRP_UP[] = { 1038 | DB_DEFINE_STATE ( 1, UPS_NORMAL, Normal), 1039 | DB_DEFINE_STATE ( 2, UPS_HOT, Hot), 1040 | DB_DEFINE_STATE ( 3, UPS_PRESSED, Pressed), 1041 | DB_DEFINE_STATE ( 4, UPS_DISABLED, Disabled) 1042 | }; 1043 | 1044 | static const db_state_t db_states_PGRP_DOWN[] = { 1045 | DB_DEFINE_STATE ( 1, DNS_NORMAL, Normal), 1046 | DB_DEFINE_STATE ( 2, DNS_HOT, Hot), 1047 | DB_DEFINE_STATE ( 3, DNS_PRESSED, Pressed), 1048 | DB_DEFINE_STATE ( 4, DNS_DISABLED, Disabled) 1049 | }; 1050 | 1051 | static const db_state_t db_states_PGRP_UPHORZ[] = { 1052 | DB_DEFINE_STATE ( 1, UPHZS_NORMAL, Normal), 1053 | DB_DEFINE_STATE ( 2, UPHZS_HOT, Hot), 1054 | DB_DEFINE_STATE ( 3, UPHZS_PRESSED, Pressed), 1055 | DB_DEFINE_STATE ( 4, UPHZS_DISABLED, Disabled) 1056 | }; 1057 | 1058 | static const db_state_t db_states_PGRP_DOWNHORZ[] = { 1059 | DB_DEFINE_STATE ( 1, DNHZS_NORMAL, Normal), 1060 | DB_DEFINE_STATE ( 2, DNHZS_HOT, Hot), 1061 | DB_DEFINE_STATE ( 3, DNHZS_PRESSED, Pressed), 1062 | DB_DEFINE_STATE ( 4, DNHZS_DISABLED, Disabled) 1063 | }; 1064 | 1065 | static const db_part_t db_parts_PAGE[] = { 1066 | DB_DEFINE_PART ( 1, PGRP_UP, Up, db_states_PGRP_UP), 1067 | DB_DEFINE_PART ( 2, PGRP_DOWN, Down, db_states_PGRP_DOWN), 1068 | DB_DEFINE_PART ( 3, PGRP_UPHORZ, UpHorz, db_states_PGRP_UPHORZ), 1069 | DB_DEFINE_PART ( 4, PGRP_DOWNHORZ, DownHorz, db_states_PGRP_DOWNHORZ) 1070 | }; 1071 | 1072 | 1073 | /**************** 1074 | *** Progress *** 1075 | ****************/ 1076 | 1077 | static const db_state_t db_states_PP_FILL[] = { 1078 | DB_DEFINE_STATE ( 1, PBFS_NORMAL, Normal), 1079 | DB_DEFINE_STATE ( 2, PBFS_ERROR, Error), 1080 | DB_DEFINE_STATE ( 3, PBFS_PAUSED, Paused), 1081 | DB_DEFINE_STATE ( 4, PBFS_PARTIAL, Partial) 1082 | }; 1083 | 1084 | static const db_state_t db_states_PP_FILLVERT[] = { 1085 | DB_DEFINE_STATE ( 1, PBFVS_NORMAL, Normal), 1086 | DB_DEFINE_STATE ( 2, PBFVS_ERROR, Error), 1087 | DB_DEFINE_STATE ( 3, PBFVS_PAUSED, Paused), 1088 | DB_DEFINE_STATE ( 4, PBFVS_PARTIAL, Partial) 1089 | }; 1090 | 1091 | static const db_state_t db_states_PP_TRANSPARENTBAR[] = { 1092 | DB_DEFINE_STATE ( 1, PBBS_NORMAL, Normal), 1093 | DB_DEFINE_STATE ( 2, PBBS_PARTIAL, Partial) 1094 | }; 1095 | 1096 | static const db_state_t db_states_PP_TRANSPARENTBARVERT[] = { 1097 | DB_DEFINE_STATE ( 1, PBBVS_NORMAL, Normal), 1098 | DB_DEFINE_STATE ( 2, PBBVS_PARTIAL, Partial) 1099 | }; 1100 | 1101 | static const db_part_t db_parts_PROGRESS[] = { 1102 | DB_DEFINE_PART_ ( 1, PP_BAR, Bar), 1103 | DB_DEFINE_PART_ ( 2, PP_BARVERT, BarVert), 1104 | DB_DEFINE_PART_ ( 3, PP_CHUNK, Chunk), 1105 | DB_DEFINE_PART_ ( 4, PP_CHUNKVERT, ChunkVert), 1106 | DB_DEFINE_PART ( 5, PP_FILL, Fill, db_states_PP_FILL), 1107 | DB_DEFINE_PART ( 6, PP_FILLVERT, FillVert, db_states_PP_FILLVERT), 1108 | DB_DEFINE_PART_ ( 7, PP_PULSEOVERLAY, PulseOverlay), 1109 | DB_DEFINE_PART_ ( 8, PP_MOVEOVERLAY, MoveOverlay), 1110 | DB_DEFINE_PART_ ( 9, PP_PULSEOVERLAYVERT, PulseOverlayVert), 1111 | DB_DEFINE_PART_ (10, PP_MOVEOVERLAYVERT, MoveOverlayVert), 1112 | DB_DEFINE_PART (11, PP_TRANSPARENTBAR, TransparentBar, db_states_PP_TRANSPARENTBAR), 1113 | DB_DEFINE_PART (12, PP_TRANSPARENTBARVERT, TransparentBarVert, db_states_PP_TRANSPARENTBARVERT) 1114 | }; 1115 | 1116 | 1117 | /************* 1118 | *** Rebar *** 1119 | *************/ 1120 | 1121 | static const db_state_t db_states_RP_CHEVRON[] = { 1122 | DB_DEFINE_STATE ( 1, CHEVS_NORMAL, Normal), 1123 | DB_DEFINE_STATE ( 2, CHEVS_HOT, Hot), 1124 | DB_DEFINE_STATE ( 3, CHEVS_PRESSED, Pressed) 1125 | }; 1126 | 1127 | static const db_state_t db_states_RP_CHEVRONVERT[] = { 1128 | DB_DEFINE_STATE ( 1, CHEVSV_NORMAL, Normal), 1129 | DB_DEFINE_STATE ( 2, CHEVSV_HOT, Hot), 1130 | DB_DEFINE_STATE ( 3, CHEVSV_PRESSED, Pressed) 1131 | }; 1132 | 1133 | static const db_state_t db_states_RP_SPLITTER[] = { 1134 | DB_DEFINE_STATE ( 1, SPLITS_NORMAL, Normal), 1135 | DB_DEFINE_STATE ( 2, SPLITS_HOT, Hot), 1136 | DB_DEFINE_STATE ( 3, SPLITS_PRESSED, Pressed) 1137 | }; 1138 | 1139 | static const db_state_t db_states_RP_SPLITTERVERT[] = { 1140 | DB_DEFINE_STATE ( 1, SPLITSV_NORMAL, Normal), 1141 | DB_DEFINE_STATE ( 2, SPLITSV_HOT, Hot), 1142 | DB_DEFINE_STATE ( 3, SPLITSV_PRESSED, Pressed) 1143 | }; 1144 | 1145 | static const db_part_t db_parts_REBAR[] = { 1146 | DB_DEFINE_PART_ ( 1, RP_GRIPPER, Gripper), 1147 | DB_DEFINE_PART_ ( 2, RP_GRIPPERVERT, GripperVert), 1148 | DB_DEFINE_PART_ ( 3, RP_BAND, Band), 1149 | DB_DEFINE_PART ( 4, RP_CHEVRON, Chevron, db_states_RP_CHEVRON), 1150 | DB_DEFINE_PART ( 5, RP_CHEVRONVERT, ChevronVert, db_states_RP_CHEVRONVERT), 1151 | DB_DEFINE_PART_ ( 6, RP_BACKGROUND, Background), 1152 | DB_DEFINE_PART ( 7, RP_SPLITTER, Splitter, db_states_RP_SPLITTER), 1153 | DB_DEFINE_PART ( 8, RP_SPLITTERVERT, SplitterVert, db_states_RP_SPLITTERVERT) 1154 | }; 1155 | 1156 | 1157 | /***************** 1158 | *** Scrollbar *** 1159 | *****************/ 1160 | 1161 | static const db_state_t db_states_SBP_ARROWBTN[] = { 1162 | DB_DEFINE_STATE ( 1, ABS_UPNORMAL, UpNormal), 1163 | DB_DEFINE_STATE ( 2, ABS_UPHOT, UpHot), 1164 | DB_DEFINE_STATE ( 3, ABS_UPPRESSED, UpPressed), 1165 | DB_DEFINE_STATE ( 4, ABS_UPDISABLED, UpDisabled), 1166 | DB_DEFINE_STATE ( 5, ABS_DOWNNORMAL, DownNormal), 1167 | DB_DEFINE_STATE ( 6, ABS_DOWNHOT, DownHot), 1168 | DB_DEFINE_STATE ( 7, ABS_DOWNPRESSED, DownPressed), 1169 | DB_DEFINE_STATE ( 8, ABS_DOWNDISABLED, DownDisabled), 1170 | DB_DEFINE_STATE ( 9, ABS_LEFTNORMAL, LeftNormal), 1171 | DB_DEFINE_STATE (10, ABS_LEFTHOT, LeftHot), 1172 | DB_DEFINE_STATE (11, ABS_LEFTPRESSED, LeftPressed), 1173 | DB_DEFINE_STATE (12, ABS_LEFTDISABLED, LeftDisabled), 1174 | DB_DEFINE_STATE (13, ABS_RIGHTNORMAL, RightNormal), 1175 | DB_DEFINE_STATE (14, ABS_RIGHTHOT, RightHot), 1176 | DB_DEFINE_STATE (15, ABS_RIGHTPRESSED, RightPressed), 1177 | DB_DEFINE_STATE (16, ABS_RIGHTDISABLED, RightDisabled), 1178 | DB_DEFINE_STATE (17, ABS_UPHOVER, UpHover), 1179 | DB_DEFINE_STATE (18, ABS_DOWNHOVER, DownHover), 1180 | DB_DEFINE_STATE (19, ABS_LEFTHOVER, LeftHover), 1181 | DB_DEFINE_STATE (20, ABS_RIGHTHOVER, RightHover) 1182 | }; 1183 | 1184 | static const db_state_t db_states_SBP_shared[] = { 1185 | DB_DEFINE_STATE ( 1, SCRBS_NORMAL, Normal), 1186 | DB_DEFINE_STATE ( 2, SCRBS_HOT, Hot), 1187 | DB_DEFINE_STATE ( 3, SCRBS_PRESSED, Pressed), 1188 | DB_DEFINE_STATE ( 4, SCRBS_DISABLED, Disabled), 1189 | DB_DEFINE_STATE ( 5, SCRBS_HOVER, Hover) 1190 | }; 1191 | 1192 | static const db_state_t db_states_SBP_SIZEBOX[] = { 1193 | DB_DEFINE_STATE ( 1, SZB_RIGHTALIGN, RightAlign), 1194 | DB_DEFINE_STATE ( 2, SZB_LEFTALIGN, LeftAlign), 1195 | DB_DEFINE_STATE ( 3, SZB_TOPRIGHTALIGN, TopRightAlign), 1196 | DB_DEFINE_STATE ( 4, SZB_TOPLEFTALIGN, TopLeftAlign), 1197 | DB_DEFINE_STATE ( 5, SZB_HALFBOTTOMRIGHTALIGN, HalfBottomRightAlign), 1198 | DB_DEFINE_STATE ( 6, SZB_HALFBOTTOMLEFTALIGN, HalfBottomLeftAlign), 1199 | DB_DEFINE_STATE ( 7, SZB_HALFTOPRIGHTALIGN, HalfTopRightAlign), 1200 | DB_DEFINE_STATE ( 8, SZB_HALFTOPLEFTALIGN, HalfTopLeftAlign) 1201 | }; 1202 | 1203 | static const db_part_t db_parts_SCROLLBAR[] = { 1204 | DB_DEFINE_PART ( 1, SBP_ARROWBTN, ArrowBtn, db_states_SBP_ARROWBTN), 1205 | DB_DEFINE_PART ( 2, SBP_THUMBBTNHORZ, ThumbBtnHorz, db_states_SBP_shared), 1206 | DB_DEFINE_PART ( 3, SBP_THUMBBTNVERT, ThumbBtnVert, db_states_SBP_shared), 1207 | DB_DEFINE_PART ( 4, SBP_LOWERTRACKHORZ, LowerTrackHorz, db_states_SBP_shared), 1208 | DB_DEFINE_PART ( 5, SBP_UPPERTRACKHORZ, UpperTrackHorz, db_states_SBP_shared), 1209 | DB_DEFINE_PART ( 6, SBP_LOWERTRACKVERT, LowerTrackVert, db_states_SBP_shared), 1210 | DB_DEFINE_PART ( 7, SBP_UPPERTRACKVERT, UpperTrackVert, db_states_SBP_shared), 1211 | DB_DEFINE_PART ( 8, SBP_GRIPPERHORZ, GripperHorz, db_states_SBP_shared), 1212 | DB_DEFINE_PART ( 9, SBP_GRIPPERVERT, GripperVert, db_states_SBP_shared), 1213 | DB_DEFINE_PART (10, SBP_SIZEBOX, SizeBox, db_states_SBP_SIZEBOX), 1214 | DB_DEFINE_PART_ (11, SBP_SIZEBOXBKGND, SizeBoxBkgnd) 1215 | }; 1216 | 1217 | 1218 | /********************* 1219 | *** SearchEditBox *** 1220 | *********************/ 1221 | 1222 | static const db_state_t db_states_SEBP_SEARCHEDITBOXTEXT[] = { 1223 | DB_DEFINE_STATE ( 1, SEBTS_FORMATTED, Formatted) 1224 | }; 1225 | 1226 | static const db_part_t db_parts_SEARCHEDITBOX[] = { 1227 | DB_DEFINE_PART ( 1, SEBP_SEARCHEDITBOXTEXT, SearchEditBoxText, db_states_SEBP_SEARCHEDITBOXTEXT) 1228 | }; 1229 | 1230 | 1231 | /***************** 1232 | *** SearchBox *** 1233 | *****************/ 1234 | 1235 | static const db_state_t db_states_SBBACKGROUND[] = { 1236 | DB_DEFINE_STATE ( 1, xxx_NORMAL, Normal), 1237 | DB_DEFINE_STATE ( 2, xxx_HOT, Hot), 1238 | DB_DEFINE_STATE ( 3, xxx_DISABLED, Disabled), 1239 | DB_DEFINE_STATE ( 4, xxx_FOCUSED, Focused) 1240 | }; 1241 | 1242 | static const db_part_t db_parts_SEARCHBOX[] = { 1243 | DB_DEFINE_PART ( 1, SBBACKGROUND, Background, db_states_SBBACKGROUND) 1244 | }; 1245 | 1246 | 1247 | /************ 1248 | *** Spin *** 1249 | ************/ 1250 | 1251 | static const db_state_t db_states_SPNP_UP[] = { 1252 | DB_DEFINE_STATE ( 1, UPS_NORMAL, Normal), 1253 | DB_DEFINE_STATE ( 2, UPS_HOT, Hot), 1254 | DB_DEFINE_STATE ( 3, UPS_PRESSED, Pressed), 1255 | DB_DEFINE_STATE ( 4, UPS_DISABLED, Disabled) 1256 | }; 1257 | 1258 | static const db_state_t db_states_SPNP_DOWN[] = { 1259 | DB_DEFINE_STATE ( 1, DNS_NORMAL, Normal), 1260 | DB_DEFINE_STATE ( 2, DNS_HOT, Hot), 1261 | DB_DEFINE_STATE ( 3, DNS_PRESSED, Pressed), 1262 | DB_DEFINE_STATE ( 4, DNS_DISABLED, Disabled) 1263 | }; 1264 | 1265 | static const db_state_t db_states_SPNP_UPHORZ[] = { 1266 | DB_DEFINE_STATE ( 1, UPHZS_NORMAL, Normal), 1267 | DB_DEFINE_STATE ( 2, UPHZS_HOT, Hot), 1268 | DB_DEFINE_STATE ( 3, UPHZS_PRESSED, Pressed), 1269 | DB_DEFINE_STATE ( 4, UPHZS_DISABLED, Disabled) 1270 | }; 1271 | 1272 | static const db_state_t db_states_SPNP_DOWNHORZ[] = { 1273 | DB_DEFINE_STATE ( 1, DNHZS_NORMAL, Normal), 1274 | DB_DEFINE_STATE ( 2, DNHZS_HOT, Hot), 1275 | DB_DEFINE_STATE ( 3, DNHZS_PRESSED, Pressed), 1276 | DB_DEFINE_STATE ( 4, DNHZS_DISABLED, Disabled) 1277 | }; 1278 | 1279 | static const db_part_t db_parts_SPIN[] = { 1280 | DB_DEFINE_PART ( 1, SPNP_UP, Up, db_states_SPNP_UP), 1281 | DB_DEFINE_PART ( 2, SPNP_DOWN, Down, db_states_SPNP_DOWN), 1282 | DB_DEFINE_PART ( 3, SPNP_UPHORZ, UpHorz, db_states_SPNP_UPHORZ), 1283 | DB_DEFINE_PART ( 4, SPNP_DOWNHORZ, DownHorz, db_states_SPNP_DOWNHORZ) 1284 | }; 1285 | 1286 | 1287 | /****************** 1288 | *** StartPanel *** 1289 | ******************/ 1290 | 1291 | static const db_state_t db_states_SPP_MOREPROGRAMSARROW[] = { 1292 | DB_DEFINE_STATE ( 1, SPS_NORMAL, Normal), 1293 | DB_DEFINE_STATE ( 2, SPS_HOT, Hot), 1294 | DB_DEFINE_STATE ( 3, SPS_PRESSED, Pressed) 1295 | }; 1296 | 1297 | static const db_state_t db_states_SPP_LOGOFFBUTTONS[] = { 1298 | DB_DEFINE_STATE ( 1, SPLS_NORMAL, Normal), 1299 | DB_DEFINE_STATE ( 2, SPLS_HOT, Hot), 1300 | DB_DEFINE_STATE ( 3, SPLS_PRESSED, Pressed) 1301 | }; 1302 | 1303 | static const db_state_t db_states_SPP_MOREPROGRAMSTAB[] = { 1304 | DB_DEFINE_STATE ( 1, SPMPT_NORMAL, Normal), 1305 | DB_DEFINE_STATE ( 2, SPMPT_HOT, Hot), 1306 | DB_DEFINE_STATE ( 3, SPMPT_SELECTED, Selected), 1307 | DB_DEFINE_STATE ( 4, SPMPT_DISABLED, Disabled), 1308 | DB_DEFINE_STATE ( 5, SPMPT_FOCUSED, Focused) 1309 | }; 1310 | 1311 | static const db_state_t db_states_SPP_SOFTWAREEXPLORER[] = { 1312 | DB_DEFINE_STATE ( 1, SPSE_NORMAL, Normal), 1313 | DB_DEFINE_STATE ( 2, SPSE_HOT, Hot), 1314 | DB_DEFINE_STATE ( 3, SPSE_SELECTED, Selected), 1315 | DB_DEFINE_STATE ( 4, SPSE_DISABLED, Disabled), 1316 | DB_DEFINE_STATE ( 5, SPSE_FOCUSED, Focused) 1317 | }; 1318 | 1319 | static const db_state_t db_states_SPP_OPENBOX[] = { 1320 | DB_DEFINE_STATE ( 1, SPOB_NORMAL, Normal), 1321 | DB_DEFINE_STATE ( 2, SPOB_HOT, Hot), 1322 | DB_DEFINE_STATE ( 3, SPOB_SELECTED, Selected), 1323 | DB_DEFINE_STATE ( 4, SPOB_DISABLED, Disabled), 1324 | DB_DEFINE_STATE ( 5, SPOB_FOCUSED, Focused) 1325 | }; 1326 | 1327 | static const db_state_t db_states_SPP_MOREPROGRAMSARROWBACK[] = { 1328 | DB_DEFINE_STATE ( 1, SPSB_NORMAL, Normal), 1329 | DB_DEFINE_STATE ( 2, SPSB_HOT, Hot), 1330 | DB_DEFINE_STATE ( 3, SPSB_PRESSED, Pressed) 1331 | }; 1332 | 1333 | static const db_part_t db_parts_STARTPANEL[] = { 1334 | DB_DEFINE_PART_ ( 1, SPP_USERPANE, UserPane), 1335 | DB_DEFINE_PART_ ( 2, SPP_MOREPROGRAMS, MorePrograms), 1336 | DB_DEFINE_PART ( 3, SPP_MOREPROGRAMSARROW, MoreProgramsArrow, db_states_SPP_MOREPROGRAMSARROW), 1337 | DB_DEFINE_PART_ ( 4, SPP_PROGLIST, ProgList), 1338 | DB_DEFINE_PART_ ( 5, SPP_PROGLISTSEPARATOR, ProgListSeparator), 1339 | DB_DEFINE_PART_ ( 6, SPP_PLACESLIST, PlaceList), 1340 | DB_DEFINE_PART_ ( 7, SPP_PLACESLISTSEPARATOR, PlaceListSeparator), 1341 | DB_DEFINE_PART_ ( 8, SPP_LOGOFF, LogOff), 1342 | DB_DEFINE_PART ( 9, SPP_LOGOFFBUTTONS, LogOffButtons, db_states_SPP_LOGOFFBUTTONS), 1343 | DB_DEFINE_PART_ (10, SPP_USERPICTURE, UserPicture), 1344 | DB_DEFINE_PART_ (11, SPP_PREVIEW, Preview), 1345 | DB_DEFINE_PART (12, SPP_MOREPROGRAMSTAB, MoreProgramsTab, db_states_SPP_MOREPROGRAMSTAB), 1346 | DB_DEFINE_PART_ (13, SPP_NSCHOST, NscHost), 1347 | DB_DEFINE_PART (14, SPP_SOFTWAREEXPLORER, SoftwareExplorer, db_states_SPP_SOFTWAREEXPLORER), 1348 | DB_DEFINE_PART (15, SPP_OPENBOX, OpenBox, db_states_SPP_OPENBOX), 1349 | DB_DEFINE_PART_ (16, SPP_SEARCHVIEW, SearchView), 1350 | DB_DEFINE_PART (17, SPP_MOREPROGRAMSARROWBACK, MoreProgramsArrowBack, db_states_SPP_MOREPROGRAMSARROWBACK), 1351 | DB_DEFINE_PART_ (18, SPP_TOPMATCH, TopMatch), 1352 | DB_DEFINE_PART (19, SPP_LOGOFFSPLITBUTTONDROPDOWN, LogOffSplitButtonDropDown, db_states_SPP_LOGOFFBUTTONS) 1353 | }; 1354 | 1355 | 1356 | /************** 1357 | *** Static *** 1358 | **************/ 1359 | 1360 | static const db_part_t db_parts_STATIC[] = { 1361 | DB_DEFINE_PART_ ( 1, STAT_TEXT, Text) 1362 | }; 1363 | 1364 | 1365 | /************** 1366 | *** Status *** 1367 | **************/ 1368 | 1369 | static const db_part_t db_parts_STATUS[] = { 1370 | DB_DEFINE_PART_ ( 1, SP_PANE, Pane), 1371 | DB_DEFINE_PART_ ( 2, SP_GRIPPERPANE, GripperPane), 1372 | DB_DEFINE_PART_ ( 3, SP_GRIPPER, Gripper) 1373 | }; 1374 | 1375 | 1376 | /*********** 1377 | *** Tab *** 1378 | ***********/ 1379 | 1380 | static const db_state_t db_states_TABP_TABITEM[] = { 1381 | DB_DEFINE_STATE ( 1, TIS_NORMAL, Normal), 1382 | DB_DEFINE_STATE ( 2, TIS_HOT, Hot), 1383 | DB_DEFINE_STATE ( 3, TIS_SELECTED, Selected), 1384 | DB_DEFINE_STATE ( 4, TIS_DISABLED, Disabled), 1385 | DB_DEFINE_STATE ( 5, TIS_FOCUSED, Focused) 1386 | }; 1387 | 1388 | static const db_state_t db_states_TABP_TABITEMLEFTEDGE[] = { 1389 | DB_DEFINE_STATE ( 1, TILES_NORMAL, Normal), 1390 | DB_DEFINE_STATE ( 2, TILES_HOT, Hot), 1391 | DB_DEFINE_STATE ( 3, TILES_SELECTED, Selected), 1392 | DB_DEFINE_STATE ( 4, TILES_DISABLED, Disabled), 1393 | DB_DEFINE_STATE ( 5, TILES_FOCUSED, Focused) 1394 | }; 1395 | 1396 | static const db_state_t db_states_TABP_TABITEMRIGHTEDGE[] = { 1397 | DB_DEFINE_STATE ( 1, TIRES_NORMAL, Normal), 1398 | DB_DEFINE_STATE ( 2, TIRES_HOT, Hot), 1399 | DB_DEFINE_STATE ( 3, TIRES_SELECTED, Selected), 1400 | DB_DEFINE_STATE ( 4, TIRES_DISABLED, Disabled), 1401 | DB_DEFINE_STATE ( 5, TIRES_FOCUSED, Focused) 1402 | }; 1403 | 1404 | static const db_state_t db_states_TABP_TABITEMBOTHEDGE[] = { 1405 | DB_DEFINE_STATE ( 1, TIBES_NORMAL, Normal), 1406 | DB_DEFINE_STATE ( 2, TIBES_HOT, Hot), 1407 | DB_DEFINE_STATE ( 3, TIBES_SELECTED, Selected), 1408 | DB_DEFINE_STATE ( 4, TIBES_DISABLED, Disabled), 1409 | DB_DEFINE_STATE ( 5, TIBES_FOCUSED, Focused) 1410 | }; 1411 | 1412 | static const db_state_t db_states_TABP_TOPTABITEM[] = { 1413 | DB_DEFINE_STATE ( 1, TTIS_NORMAL, Normal), 1414 | DB_DEFINE_STATE ( 2, TTIS_HOT, Hot), 1415 | DB_DEFINE_STATE ( 3, TTIS_SELECTED, Selected), 1416 | DB_DEFINE_STATE ( 4, TTIS_DISABLED, Disabled), 1417 | DB_DEFINE_STATE ( 5, TTIS_FOCUSED, Focused) 1418 | }; 1419 | 1420 | static const db_state_t db_states_TABP_TOPTABITEMLEFTEDGE[] = { 1421 | DB_DEFINE_STATE ( 1, TTILES_NORMAL, Normal), 1422 | DB_DEFINE_STATE ( 2, TTILES_HOT, Hot), 1423 | DB_DEFINE_STATE ( 3, TTILES_SELECTED, Selected), 1424 | DB_DEFINE_STATE ( 4, TTILES_DISABLED, Disabled), 1425 | DB_DEFINE_STATE ( 5, TTILES_FOCUSED, Focused) 1426 | }; 1427 | 1428 | static const db_state_t db_states_TABP_TOPTABITEMRIGHTEDGE[] = { 1429 | DB_DEFINE_STATE ( 1, TTIRES_NORMAL, Normal), 1430 | DB_DEFINE_STATE ( 2, TTIRES_HOT, Hot), 1431 | DB_DEFINE_STATE ( 3, TTIRES_SELECTED, Selected), 1432 | DB_DEFINE_STATE ( 4, TTIRES_DISABLED, Disabled), 1433 | DB_DEFINE_STATE ( 5, TTIRES_FOCUSED, Focused) 1434 | }; 1435 | 1436 | static const db_state_t db_states_TABP_TOPTABITEMBOTHEDGE[] = { 1437 | DB_DEFINE_STATE ( 1, TTIBES_NORMAL, Normal), 1438 | DB_DEFINE_STATE ( 2, TTIBES_HOT, Hot), 1439 | DB_DEFINE_STATE ( 3, TTIBES_SELECTED, Selected), 1440 | DB_DEFINE_STATE ( 4, TTIBES_DISABLED, Disabled), 1441 | DB_DEFINE_STATE ( 5, TTIBES_FOCUSED, Focused) 1442 | }; 1443 | 1444 | static const db_part_t db_parts_TAB[] = { 1445 | DB_DEFINE_PART ( 1, TABP_TABITEM, TabItem, db_states_TABP_TABITEM), 1446 | DB_DEFINE_PART ( 2, TABP_TABITEMLEFTEDGE, TabItemLeftEdge, db_states_TABP_TABITEMLEFTEDGE), 1447 | DB_DEFINE_PART ( 3, TABP_TABITEMRIGHTEDGE, TabItemRightEdge, db_states_TABP_TABITEMRIGHTEDGE), 1448 | DB_DEFINE_PART ( 4, TABP_TABITEMBOTHEDGE, TabItemBothEdge, db_states_TABP_TABITEMBOTHEDGE), 1449 | DB_DEFINE_PART ( 5, TABP_TOPTABITEM, TopTabItem, db_states_TABP_TOPTABITEM), 1450 | DB_DEFINE_PART ( 6, TABP_TOPTABITEMLEFTEDGE, TopTabItemLeftEdge, db_states_TABP_TOPTABITEMLEFTEDGE), 1451 | DB_DEFINE_PART ( 7, TABP_TOPTABITEMRIGHTEDGE, TopTabItemRightEdge, db_states_TABP_TOPTABITEMRIGHTEDGE), 1452 | DB_DEFINE_PART ( 8, TABP_TOPTABITEMBOTHEDGE, TopTabItemBothEdge, db_states_TABP_TOPTABITEMBOTHEDGE), 1453 | DB_DEFINE_PART_ ( 9, TABP_PANE, Pane), 1454 | DB_DEFINE_PART_ (10, TABP_BODY, Body), 1455 | DB_DEFINE_PART_ (11, TABP_AEROWIZARDBODY, AeroWizardBody) 1456 | }; 1457 | 1458 | 1459 | /**************** 1460 | *** TaskBand *** 1461 | ****************/ 1462 | 1463 | static const db_part_t db_parts_TASKBAND[] = { 1464 | DB_DEFINE_PART_ ( 1, TDP_GROUPCOUNT, GroupCount), 1465 | DB_DEFINE_PART_ ( 2, TDP_FLASHBUTTON, FlashButton), 1466 | DB_DEFINE_PART_ ( 3, TDP_FLASHBUTTONGROUPMENU, FlashButtonGroupMenu) 1467 | }; 1468 | 1469 | 1470 | /*************** 1471 | *** TaskBar *** 1472 | ***************/ 1473 | 1474 | static const db_part_t db_parts_TASKBAR[] = { 1475 | DB_DEFINE_PART_ ( 1, TBP_BACKGROUNDBOTTOM, BackgroundBottom), 1476 | DB_DEFINE_PART_ ( 2, TBP_BACKGROUNDRIGHT, BackgroundRight), 1477 | DB_DEFINE_PART_ ( 3, TBP_BACKGROUNDTOP, BackgroundTop), 1478 | DB_DEFINE_PART_ ( 4, TBP_BACKGROUNDLEFT, BackgroundLeft), 1479 | DB_DEFINE_PART_ ( 5, TBP_SIZINGBARBOTTOM, SizingBarBottom), 1480 | DB_DEFINE_PART_ ( 6, TBP_SIZINGBARRIGHT, SizingBarRight), 1481 | DB_DEFINE_PART_ ( 7, TBP_SIZINGBARTOP, SizingBarTop), 1482 | DB_DEFINE_PART_ ( 8, TBP_SIZINGBARLEFT, SizingBarLeft) 1483 | }; 1484 | 1485 | 1486 | /****************** 1487 | *** TaskDialog *** 1488 | ******************/ 1489 | 1490 | static const db_state_t db_states_TDLG_CONTENTPANE[] = { 1491 | DB_DEFINE_STATE ( 1, TDLGCPS_STANDALONE, Standalone) 1492 | }; 1493 | 1494 | static const db_state_t db_states_TDLG_EXPANDOBUTTON[] = { 1495 | DB_DEFINE_STATE ( 1, TDLGEBS_NORMAL, Normal), 1496 | DB_DEFINE_STATE ( 2, TDLGEBS_HOVER, Hover), 1497 | DB_DEFINE_STATE ( 3, TDLGEBS_PRESSED, Pressed), 1498 | DB_DEFINE_STATE ( 4, TDLGEBS_EXPANDEDNORMAL, ExpandedNormal), 1499 | DB_DEFINE_STATE ( 5, TDLGEBS_EXPANDEDHOVER, ExpandedHover), 1500 | DB_DEFINE_STATE ( 6, TDLGEBS_EXPANDEDPRESSED, ExpandedPressed), 1501 | DB_DEFINE_STATE ( 7, TDLGEBS_NORMALDISABLED, NormalDisabled), 1502 | DB_DEFINE_STATE ( 8, TDLGEBS_EXPANDEDDISABLED, ExpandedDisabled) 1503 | }; 1504 | 1505 | static const db_part_t db_parts_TASKDIALOG[] = { 1506 | DB_DEFINE_PART_ ( 1, TDLG_PRIMARYPANEL, PrimaryPanel), 1507 | DB_DEFINE_PART_ ( 2, TDLG_MAININSTRUCTIONPANE, MainInstructionPane), 1508 | DB_DEFINE_PART_ ( 3, TDLG_MAINICON, MainIcon), 1509 | DB_DEFINE_PART ( 4, TDLG_CONTENTPANE, ContentPane, db_states_TDLG_CONTENTPANE), 1510 | DB_DEFINE_PART_ ( 5, TDLG_CONTENTICON, ContentIcon), 1511 | DB_DEFINE_PART_ ( 6, TDLG_EXPANDEDCONTENT, ExpandedContent), 1512 | DB_DEFINE_PART_ ( 7, TDLG_COMMANDLINKPANE, CommandLinkPane), 1513 | DB_DEFINE_PART_ ( 8, TDLG_SECONDARYPANEL, SecondaryPanel), 1514 | DB_DEFINE_PART_ ( 9, TDLG_CONTROLPANE, ControlPane), 1515 | DB_DEFINE_PART_ (10, TDLG_BUTTONSECTION, ButtonSection), 1516 | DB_DEFINE_PART_ (11, TDLG_BUTTONWRAPPER, ButtonWrapper), 1517 | DB_DEFINE_PART_ (12, TDLG_EXPANDOTEXT, ExpandoText), 1518 | DB_DEFINE_PART (13, TDLG_EXPANDOBUTTON, ExpandoButton, db_states_TDLG_EXPANDOBUTTON), 1519 | DB_DEFINE_PART_ (14, TDLG_VERIFICATIONTEXT, VerificationText), 1520 | DB_DEFINE_PART_ (15, TDLG_FOOTNOTEPANE, FootnotePane), 1521 | DB_DEFINE_PART_ (16, TDLG_FOOTNOTEAREA, FootnoteArea), 1522 | DB_DEFINE_PART_ (17, TDLG_FOOTNOTESEPARATOR, FootnoteSeparator), 1523 | DB_DEFINE_PART_ (18, TDLG_EXPANDEDFOOTERAREA, ExpandedFootArea), 1524 | DB_DEFINE_PART_ (19, TDLG_PROGRESSBAR, ProgressBar), 1525 | DB_DEFINE_PART_ (20, TDLG_IMAGEALIGNMENT, ImageAlignement), 1526 | DB_DEFINE_PART_ (21, TDLG_RADIOBUTTONPANE, RadioButtonPane) 1527 | }; 1528 | 1529 | 1530 | /***************** 1531 | *** TextStyle *** 1532 | *****************/ 1533 | 1534 | static const db_state_t db_states_TEXT_HYPERLINKTEXT[] = { 1535 | DB_DEFINE_STATE ( 1, TS_HYPERLINK_NORMAL, Normal), 1536 | DB_DEFINE_STATE ( 2, TS_HYPERLINK_HOT, Hot), 1537 | DB_DEFINE_STATE ( 3, TS_HYPERLINK_PRESSED, Pressed), 1538 | DB_DEFINE_STATE ( 4, TS_HYPERLINK_DISABLED, Disabled) 1539 | }; 1540 | 1541 | static const db_state_t db_states_TEXT_CONTROLLABEL[] = { 1542 | DB_DEFINE_STATE ( 1, TS_CONTROLLABEL_NORMAL, Normal), 1543 | DB_DEFINE_STATE ( 2, TS_CONTROLLABEL_DISABLED, Disabled) 1544 | }; 1545 | 1546 | static const db_part_t db_parts_TEXTSTYLE[] = { 1547 | DB_DEFINE_PART_ ( 1, TEXT_MAININSTRUCTION, MainInstruction), 1548 | DB_DEFINE_PART_ ( 2, TEXT_INSTRUCTION, Instruction), 1549 | DB_DEFINE_PART_ ( 3, TEXT_BODYTITLE, BodyTitle), 1550 | DB_DEFINE_PART_ ( 4, TEXT_BODYTEXT, BodyText), 1551 | DB_DEFINE_PART_ ( 5, TEXT_SECONDARYTEXT, SecondaryText), 1552 | DB_DEFINE_PART ( 6, TEXT_HYPERLINKTEXT, HyperLinkText, db_states_TEXT_HYPERLINKTEXT), 1553 | DB_DEFINE_PART_ ( 7, TEXT_EXPANDED, Expanded), 1554 | DB_DEFINE_PART_ ( 8, TEXT_LABEL, Label), 1555 | DB_DEFINE_PART ( 9, TEXT_CONTROLLABEL, ControlLabel, db_states_TEXT_CONTROLLABEL) 1556 | }; 1557 | 1558 | 1559 | /*************** 1560 | *** Toolbar *** 1561 | **************/ 1562 | 1563 | static const db_state_t db_states_TP_shared[] = { 1564 | DB_DEFINE_STATE ( 1, TS_NORMAL, Normal), 1565 | DB_DEFINE_STATE ( 2, TS_HOT, Hot), 1566 | DB_DEFINE_STATE ( 3, TS_PRESSED, Pressed), 1567 | DB_DEFINE_STATE ( 4, TS_DISABLED, Disabled), 1568 | DB_DEFINE_STATE ( 5, TS_CHECKED, Checked), 1569 | DB_DEFINE_STATE ( 6, TS_HOTCHECKED, HotChecked), 1570 | DB_DEFINE_STATE ( 7, TS_NEARHOT, NearHot), 1571 | DB_DEFINE_STATE ( 8, TS_OTHERSIDEHOT, OtherSideHot) 1572 | }; 1573 | 1574 | static const db_part_t db_parts_TOOLBAR[] = { 1575 | DB_DEFINE_PART ( 1, TP_BUTTON, Button, db_states_TP_shared), 1576 | DB_DEFINE_PART ( 2, TP_DROPDOWNBUTTON, DropDownButton, db_states_TP_shared), 1577 | DB_DEFINE_PART ( 3, TP_SPLITBUTTON, SplitButton, db_states_TP_shared), 1578 | DB_DEFINE_PART ( 4, TP_SPLITBUTTONDROPDOWN, SplitButtonDropDown, db_states_TP_shared), 1579 | DB_DEFINE_PART ( 5, TP_SEPARATOR, Separator, db_states_TP_shared), 1580 | DB_DEFINE_PART ( 6, TP_SEPARATORVERT, SeparatorVert, db_states_TP_shared), 1581 | DB_DEFINE_PART ( 7, TP_DROPDOWNBUTTONGLYPH, DropDownButtonGlyph, db_states_TP_shared) 1582 | }; 1583 | 1584 | 1585 | /*************** 1586 | *** Tooltip *** 1587 | ***************/ 1588 | 1589 | static const db_state_t db_states_TTP_STANDARD[] = { 1590 | DB_DEFINE_STATE ( 1, TTSS_NORMAL, Normal), 1591 | DB_DEFINE_STATE ( 2, TTSS_LINK, Link) 1592 | }; 1593 | 1594 | static const db_state_t db_states_TTP_BALLOON[] = { 1595 | DB_DEFINE_STATE ( 1, TTBS_NORMAL, Normal), 1596 | DB_DEFINE_STATE ( 2, TTBS_LINK, Link) 1597 | }; 1598 | 1599 | static const db_state_t db_states_TTP_CLOSE[] = { 1600 | DB_DEFINE_STATE ( 1, TTCS_NORMAL, Normal), 1601 | DB_DEFINE_STATE ( 2, TTCS_HOT, Hot), 1602 | DB_DEFINE_STATE ( 3, TTCS_PRESSED, Pressed) 1603 | }; 1604 | 1605 | static const db_state_t db_states_TTP_BALLOONSTEM[] = { 1606 | DB_DEFINE_STATE ( 1, TTBSS_POINTINGUPLEFTWALL, PointingUpLeftWall), 1607 | DB_DEFINE_STATE ( 2, TTBSS_POINTINGUPCENTERED, PointingUpCentered), 1608 | DB_DEFINE_STATE ( 3, TTBSS_POINTINGUPRIGHTWALL, PointingUpRightWall), 1609 | DB_DEFINE_STATE ( 4, TTBSS_POINTINGDOWNRIGHTWALL, PointingDownRightWall), 1610 | DB_DEFINE_STATE ( 5, TTBSS_POINTINGDOWNCENTERED, PointingDownCentered), 1611 | DB_DEFINE_STATE ( 6, TTBSS_POINTINGDOWNLEFTWALL, PointingDownLeftWall) 1612 | }; 1613 | 1614 | static const db_state_t db_states_TTP_WRENCH[] = { 1615 | DB_DEFINE_STATE ( 1, TTWS_NORMAL, Normal), 1616 | DB_DEFINE_STATE ( 2, TTWS_HOT, Hot), 1617 | DB_DEFINE_STATE ( 3, TTWS_PRESSED, Pressed) 1618 | }; 1619 | 1620 | static const db_part_t db_parts_TOOLTIP[] = { 1621 | DB_DEFINE_PART ( 1, TTP_STANDARD, Standard, db_states_TTP_STANDARD), 1622 | DB_DEFINE_PART ( 2, TTP_STANDARDTITLE, StandardTitle, db_states_TTP_STANDARD), 1623 | DB_DEFINE_PART ( 3, TTP_BALLOON, Balloon, db_states_TTP_BALLOON), 1624 | DB_DEFINE_PART ( 4, TTP_BALLOONTITLE, BalloonTitle, db_states_TTP_BALLOON), 1625 | DB_DEFINE_PART ( 5, TTP_CLOSE, Close, db_states_TTP_CLOSE), 1626 | DB_DEFINE_PART ( 6, TTP_BALLOONSTEM, BalloonStem, db_states_TTP_BALLOONSTEM), 1627 | DB_DEFINE_PART ( 7, TTP_WRENCH, Wrench, db_states_TTP_WRENCH) 1628 | }; 1629 | 1630 | 1631 | /**************** 1632 | *** Trackbar *** 1633 | ****************/ 1634 | 1635 | static const db_state_t db_states_TKP_TRACK[] = { 1636 | DB_DEFINE_STATE ( 1, TRS_NORMAL, Normal) 1637 | }; 1638 | 1639 | static const db_state_t db_states_TKP_TRACKVERT[] = { 1640 | DB_DEFINE_STATE ( 1, TRVS_NORMAL, Normal) 1641 | }; 1642 | 1643 | static const db_state_t db_states_TKP_THUMB[] = { 1644 | DB_DEFINE_STATE ( 1, TUS_NORMAL, Normal), 1645 | DB_DEFINE_STATE ( 2, TUS_HOT, Hot), 1646 | DB_DEFINE_STATE ( 3, TUS_PRESSED, Pressed), 1647 | DB_DEFINE_STATE ( 4, TUS_FOCUSED, Focused), 1648 | DB_DEFINE_STATE ( 5, TUS_DISABLED, Disabled) 1649 | }; 1650 | 1651 | static const db_state_t db_states_TKP_THUMBBOTTOM[] = { 1652 | DB_DEFINE_STATE ( 1, TUBS_NORMAL, Normal), 1653 | DB_DEFINE_STATE ( 2, TUBS_HOT, Hot), 1654 | DB_DEFINE_STATE ( 3, TUBS_PRESSED, Pressed), 1655 | DB_DEFINE_STATE ( 4, TUBS_FOCUSED, Focused), 1656 | DB_DEFINE_STATE ( 5, TUBS_DISABLED, Disabled) 1657 | }; 1658 | 1659 | static const db_state_t db_states_TKP_THUMBTOP[] = { 1660 | DB_DEFINE_STATE ( 1, TUTS_NORMAL, Normal), 1661 | DB_DEFINE_STATE ( 2, TUTS_HOT, Hot), 1662 | DB_DEFINE_STATE ( 3, TUTS_PRESSED, Pressed), 1663 | DB_DEFINE_STATE ( 4, TUTS_FOCUSED, Focused), 1664 | DB_DEFINE_STATE ( 5, TUTS_DISABLED, Disabled) 1665 | }; 1666 | 1667 | static const db_state_t db_states_TKP_THUMBVERT[] = { 1668 | DB_DEFINE_STATE ( 1, TUVS_NORMAL, Normal), 1669 | DB_DEFINE_STATE ( 2, TUVS_HOT, Hot), 1670 | DB_DEFINE_STATE ( 3, TUVS_PRESSED, Pressed), 1671 | DB_DEFINE_STATE ( 4, TUVS_FOCUSED, Focused), 1672 | DB_DEFINE_STATE ( 5, TUVS_DISABLED, Disabled) 1673 | }; 1674 | 1675 | static const db_state_t db_states_TKP_THUMBLEFT[] = { 1676 | DB_DEFINE_STATE ( 1, TUVLS_NORMAL, Normal), 1677 | DB_DEFINE_STATE ( 2, TUVLS_HOT, Hot), 1678 | DB_DEFINE_STATE ( 3, TUVLS_PRESSED, Pressed), 1679 | DB_DEFINE_STATE ( 4, TUVLS_FOCUSED, Focused), 1680 | DB_DEFINE_STATE ( 5, TUVLS_DISABLED, Disabled) 1681 | }; 1682 | 1683 | static const db_state_t db_states_TKP_THUMBRIGHT[] = { 1684 | DB_DEFINE_STATE ( 1, TUVRS_NORMAL, Normal), 1685 | DB_DEFINE_STATE ( 2, TUVRS_HOT, Hot), 1686 | DB_DEFINE_STATE ( 3, TUVRS_PRESSED, Pressed), 1687 | DB_DEFINE_STATE ( 4, TUVRS_FOCUSED, Focused), 1688 | DB_DEFINE_STATE ( 5, TUVRS_DISABLED, Disabled) 1689 | }; 1690 | 1691 | static const db_state_t db_states_TKP_TICS[] = { 1692 | DB_DEFINE_STATE ( 1, TSS_NORMAL, Normal) 1693 | }; 1694 | 1695 | static const db_state_t db_states_TKP_TICSVERT[] = { 1696 | DB_DEFINE_STATE ( 1, TSVS_NORMAL, Normal) 1697 | }; 1698 | 1699 | static const db_part_t db_parts_TRACKBAR[] = { 1700 | DB_DEFINE_PART ( 1, TKP_TRACK, Track, db_states_TKP_TRACK), 1701 | DB_DEFINE_PART ( 2, TKP_TRACKVERT, TrackVert, db_states_TKP_TRACKVERT), 1702 | DB_DEFINE_PART ( 3, TKP_THUMB, Thumb, db_states_TKP_THUMB), 1703 | DB_DEFINE_PART ( 4, TKP_THUMBBOTTOM, ThumbBottom, db_states_TKP_THUMBBOTTOM), 1704 | DB_DEFINE_PART ( 5, TKP_THUMBTOP, ThumbTop, db_states_TKP_THUMBTOP), 1705 | DB_DEFINE_PART ( 6, TKP_THUMBVERT, ThumbVert, db_states_TKP_THUMBVERT), 1706 | DB_DEFINE_PART ( 7, TKP_THUMBLEFT, ThumbLeft, db_states_TKP_THUMBLEFT), 1707 | DB_DEFINE_PART ( 8, TKP_THUMBRIGHT, ThumbRight, db_states_TKP_THUMBRIGHT), 1708 | DB_DEFINE_PART ( 9, TKP_TICS, Tics, db_states_TKP_TICS), 1709 | DB_DEFINE_PART (10, TKP_TICSVERT, TicsVert, db_states_TKP_TICSVERT) 1710 | }; 1711 | 1712 | 1713 | /****************** 1714 | *** TrayNotify *** 1715 | ******************/ 1716 | 1717 | static const db_part_t db_parts_TRAYNOTIFY[] = { 1718 | DB_DEFINE_PART_ ( 1, TNP_BACKGROUND, Background), 1719 | DB_DEFINE_PART_ ( 2, TNP_ANIMBACKGROUND, AnimBackground) 1720 | }; 1721 | 1722 | 1723 | /**************** 1724 | *** TreeView *** 1725 | ****************/ 1726 | 1727 | static const db_state_t db_states_TVP_TREEITEM[] = { 1728 | DB_DEFINE_STATE ( 1, TREIS_NORMAL, Normal), 1729 | DB_DEFINE_STATE ( 2, TREIS_HOT, Hot), 1730 | DB_DEFINE_STATE ( 3, TREIS_SELECTED, Selected), 1731 | DB_DEFINE_STATE ( 4, TREIS_DISABLED, Disabled), 1732 | DB_DEFINE_STATE ( 5, TREIS_SELECTEDNOTFOCUS, SelectedNotFocus), 1733 | DB_DEFINE_STATE ( 6, TREIS_HOTSELECTED, HotSelected) 1734 | }; 1735 | 1736 | static const db_state_t db_states_TVP_GLYPH[] = { 1737 | DB_DEFINE_STATE ( 1, GLPS_CLOSED, Closed), 1738 | DB_DEFINE_STATE ( 2, GLPS_OPENED, Opened) 1739 | }; 1740 | 1741 | static const db_state_t db_states_TVP_HOTGLYPH[] = { 1742 | DB_DEFINE_STATE ( 1, HGLPS_CLOSED, Closed), 1743 | DB_DEFINE_STATE ( 2, HGLPS_OPENED, Opened) 1744 | }; 1745 | 1746 | static const db_part_t db_parts_TREEVIEW[] = { 1747 | DB_DEFINE_PART ( 1, TVP_TREEITEM, TreeItem, db_states_TVP_TREEITEM), 1748 | DB_DEFINE_PART ( 2, TVP_GLYPH, Glyph, db_states_TVP_GLYPH), 1749 | DB_DEFINE_PART_ ( 3, TVP_BRANCH, Branch), 1750 | DB_DEFINE_PART ( 4, TVP_HOTGLYPH, HotGlyph, db_states_TVP_HOTGLYPH) 1751 | }; 1752 | 1753 | 1754 | /************** 1755 | *** Window *** 1756 | **************/ 1757 | 1758 | static const db_state_t db_states_WP_CAPTION[] = { 1759 | DB_DEFINE_STATE ( 1, CS_ACTIVE, Active), 1760 | DB_DEFINE_STATE ( 2, CS_INACTIVE, Inactive), 1761 | DB_DEFINE_STATE ( 3, CS_DISABLED, Disabled) 1762 | }; 1763 | 1764 | static const db_state_t db_states_WP_MINCAPTION[] = { 1765 | DB_DEFINE_STATE ( 1, MNCS_ACTIVE, Active), 1766 | DB_DEFINE_STATE ( 2, MNCS_INACTIVE, Inactive), 1767 | DB_DEFINE_STATE ( 3, MNCS_DISABLED, Disabled) 1768 | }; 1769 | 1770 | static const db_state_t db_states_WP_MAXCAPTION[] = { 1771 | DB_DEFINE_STATE ( 1, MXCS_ACTIVE, Active), 1772 | DB_DEFINE_STATE ( 2, MXCS_INACTIVE, Inactive), 1773 | DB_DEFINE_STATE ( 3, MXCS_DISABLED, Disabled) 1774 | }; 1775 | 1776 | static const db_state_t db_states_WP_SYSBUTTON[] = { 1777 | DB_DEFINE_STATE ( 1, SBS_NORMAL, Normal), 1778 | DB_DEFINE_STATE ( 2, SBS_HOT, Hot), 1779 | DB_DEFINE_STATE ( 3, SBS_PUSHED, Pushed), 1780 | DB_DEFINE_STATE ( 4, SBS_DISABLED, Disabled) 1781 | }; 1782 | 1783 | static const db_state_t db_states_WP_MINBUTTON[] = { 1784 | DB_DEFINE_STATE ( 1, MINBS_NORMAL, Normal), 1785 | DB_DEFINE_STATE ( 2, MINBS_HOT, Hot), 1786 | DB_DEFINE_STATE ( 3, MINBS_PUSHED, Pushed), 1787 | DB_DEFINE_STATE ( 4, MINBS_DISABLED, Disabled) 1788 | }; 1789 | 1790 | static const db_state_t db_states_WP_MAXBUTTON[] = { 1791 | DB_DEFINE_STATE ( 1, MAXBS_NORMAL, Normal), 1792 | DB_DEFINE_STATE ( 2, MAXBS_HOT, Hot), 1793 | DB_DEFINE_STATE ( 3, MAXBS_PUSHED, Pushed), 1794 | DB_DEFINE_STATE ( 4, MAXBS_DISABLED, Disabled) 1795 | }; 1796 | 1797 | static const db_state_t db_states_WP_CLOSEBUTTON[] = { 1798 | DB_DEFINE_STATE ( 1, CBS_NORMAL, Normal), 1799 | DB_DEFINE_STATE ( 2, CBS_HOT, Hot), 1800 | DB_DEFINE_STATE ( 3, CBS_PUSHED, Pushed), 1801 | DB_DEFINE_STATE ( 4, CBS_DISABLED, Disabled) 1802 | }; 1803 | 1804 | static const db_state_t db_states_WP_RESTOREBUTTON[] = { 1805 | DB_DEFINE_STATE ( 1, RBS_NORMAL, Normal), 1806 | DB_DEFINE_STATE ( 2, RBS_HOT, Hot), 1807 | DB_DEFINE_STATE ( 3, RBS_PUSHED, Pushed), 1808 | DB_DEFINE_STATE ( 4, RBS_DISABLED, Disabled) 1809 | }; 1810 | 1811 | static const db_state_t db_states_WP_HELPBUTTON[] = { 1812 | DB_DEFINE_STATE ( 1, HBS_NORMAL, Normal), 1813 | DB_DEFINE_STATE ( 2, HBS_HOT, Hot), 1814 | DB_DEFINE_STATE ( 3, HBS_PUSHED, Pushed), 1815 | DB_DEFINE_STATE ( 4, HBS_DISABLED, Disabled) 1816 | }; 1817 | 1818 | static const db_state_t db_states_WP_HORZSCROLL[] = { 1819 | DB_DEFINE_STATE ( 1, HSS_NORMAL, Normal), 1820 | DB_DEFINE_STATE ( 2, HSS_HOT, Hot), 1821 | DB_DEFINE_STATE ( 3, HSS_PUSHED, Pushed), 1822 | DB_DEFINE_STATE ( 4, HSS_DISABLED, Disabled) 1823 | }; 1824 | 1825 | static const db_state_t db_states_WP_HORZTHUMB[] = { 1826 | DB_DEFINE_STATE ( 1, HTS_NORMAL, Normal), 1827 | DB_DEFINE_STATE ( 2, HTS_HOT, Hot), 1828 | DB_DEFINE_STATE ( 3, HTS_PUSHED, Pushed), 1829 | DB_DEFINE_STATE ( 4, HTS_DISABLED, Disabled) 1830 | }; 1831 | 1832 | static const db_state_t db_states_WP_VERTSCROLL[] = { 1833 | DB_DEFINE_STATE ( 1, VSS_NORMAL, Normal), 1834 | DB_DEFINE_STATE ( 2, VSS_HOT, Hot), 1835 | DB_DEFINE_STATE ( 3, VSS_PUSHED, Pushed), 1836 | DB_DEFINE_STATE ( 4, VSS_DISABLED, Disabled) 1837 | }; 1838 | 1839 | static const db_state_t db_states_WP_VERTTHUMB[] = { 1840 | DB_DEFINE_STATE ( 1, VTS_NORMAL, Normal), 1841 | DB_DEFINE_STATE ( 2, VTS_HOT, Hot), 1842 | DB_DEFINE_STATE ( 3, VTS_PUSHED, Pushed), 1843 | DB_DEFINE_STATE ( 4, VTS_DISABLED, Disabled) 1844 | }; 1845 | 1846 | static const db_state_t db_states_WP_FRAME[] = { 1847 | DB_DEFINE_STATE ( 1, FS_ACTIVE, Active), 1848 | DB_DEFINE_STATE ( 2, FS_INACTIVE, Inactive) 1849 | }; 1850 | 1851 | static const db_part_t db_parts_WINDOW[] = { 1852 | DB_DEFINE_PART ( 1, WP_CAPTION, Caption, db_states_WP_CAPTION), 1853 | DB_DEFINE_PART ( 2, WP_SMALLCAPTION, SmallCaption, db_states_WP_CAPTION), 1854 | DB_DEFINE_PART ( 3, WP_MINCAPTION, MinCaption, db_states_WP_MINCAPTION), 1855 | DB_DEFINE_PART ( 4, WP_SMALLMINCAPTION, SmallMinCaption, db_states_WP_MINCAPTION), 1856 | DB_DEFINE_PART ( 5, WP_MAXCAPTION, MaxCaption, db_states_WP_MAXCAPTION), 1857 | DB_DEFINE_PART ( 6, WP_SMALLMAXCAPTION, SmallMaxCaption, db_states_WP_MAXCAPTION), 1858 | DB_DEFINE_PART ( 7, WP_FRAMELEFT, FrameLeft, db_states_WP_FRAME), 1859 | DB_DEFINE_PART ( 8, WP_FRAMERIGHT, FrameRight, db_states_WP_FRAME), 1860 | DB_DEFINE_PART ( 9, WP_FRAMEBOTTOM, FrameBottom, db_states_WP_FRAME), 1861 | DB_DEFINE_PART (10, WP_SMALLFRAMELEFT, SmallFrameLeft, db_states_WP_FRAME), 1862 | DB_DEFINE_PART (11, WP_SMALLFRAMERIGHT, SmallFrameRight, db_states_WP_FRAME), 1863 | DB_DEFINE_PART (12, WP_SMALLFRAMEBOTTOM, SmallFrameBottom, db_states_WP_FRAME), 1864 | DB_DEFINE_PART (13, WP_SYSBUTTON, SysButton, db_states_WP_SYSBUTTON), 1865 | DB_DEFINE_PART (14, WP_MDISYSBUTTON, MdiSysButton, db_states_WP_SYSBUTTON), 1866 | DB_DEFINE_PART (15, WP_MINBUTTON, MinButton, db_states_WP_MINBUTTON), 1867 | DB_DEFINE_PART (16, WP_MDIMINBUTTON, MdiMinButton, db_states_WP_MINBUTTON), 1868 | DB_DEFINE_PART (17, WP_MAXBUTTON, MaxButton, db_states_WP_MAXBUTTON), 1869 | DB_DEFINE_PART (18, WP_CLOSEBUTTON, CloseButton, db_states_WP_CLOSEBUTTON), 1870 | DB_DEFINE_PART (19, WP_SMALLCLOSEBUTTON, SmallCloseButton, db_states_WP_CLOSEBUTTON), 1871 | DB_DEFINE_PART (20, WP_MDICLOSEBUTTON, MdiCloseButton, db_states_WP_CLOSEBUTTON), 1872 | DB_DEFINE_PART (21, WP_RESTOREBUTTON, RestoreButton, db_states_WP_RESTOREBUTTON), 1873 | DB_DEFINE_PART (22, WP_MDIRESTOREBUTTON, MdiRestoreButton, db_states_WP_RESTOREBUTTON), 1874 | DB_DEFINE_PART (23, WP_HELPBUTTON, HelpButton, db_states_WP_HELPBUTTON), 1875 | DB_DEFINE_PART (24, WP_MDIHELPBUTTON, MdiHelpButton, db_states_WP_HELPBUTTON), 1876 | DB_DEFINE_PART (25, WP_HORZSCROLL, HorzScroll, db_states_WP_HORZSCROLL), 1877 | DB_DEFINE_PART (26, WP_HORZTHUMB, HorzThumb, db_states_WP_HORZTHUMB), 1878 | DB_DEFINE_PART (27, WP_VERTSCROLL, VertScroll, db_states_WP_VERTSCROLL), 1879 | DB_DEFINE_PART (28, WP_VERTTHUMB, VertThumb, db_states_WP_VERTTHUMB), 1880 | DB_DEFINE_PART_ (29, WP_DIALOG, Dialog), 1881 | DB_DEFINE_PART_ (30, WP_CAPTIONSIZINGTEMPLATE, CaptionSizingTemplate), 1882 | DB_DEFINE_PART_ (31, WP_SMALLCAPTIONSIZINGTEMPLATE, SmallCaptionSizingTemplate), 1883 | DB_DEFINE_PART_ (32, WP_FRAMELEFTSIZINGTEMPLATE, FrameLeftSizingTemplate), 1884 | DB_DEFINE_PART_ (33, WP_SMALLFRAMELEFTSIZINGTEMPLATE, SmallFrameLeftSizingTemplate), 1885 | DB_DEFINE_PART_ (34, WP_FRAMERIGHTSIZINGTEMPLATE, FrameRightSizingTemplate), 1886 | DB_DEFINE_PART_ (35, WP_SMALLFRAMERIGHTSIZINGTEMPLATE, SmallFrameRightSizingTemplate), 1887 | DB_DEFINE_PART_ (36, WP_FRAMEBOTTOMSIZINGTEMPLATE, FrameBottomSizingTemplate), 1888 | DB_DEFINE_PART_ (37, WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE, SmallFrameRightSizingTemplate), 1889 | DB_DEFINE_PART (38, WP_FRAME, Frame, db_states_WP_FRAME), 1890 | DB_DEFINE_PART_ (39, WP_BORDER, Border), 1891 | }; 1892 | 1893 | 1894 | /****************************** 1895 | *** Classes and Subclasses *** 1896 | ******************************/ 1897 | 1898 | static const db_class_t db_classes_helper[] = { 1899 | DB_DEFINE_CLASS(AddressBand, db_parts_ADDRESSBAND), 1900 | DB_DEFINE_SUBCLASS(AddressBand, AB, db_parts_ADDRESSBAND), 1901 | DB_DEFINE_SUBCLASS(AddressBand, ABComposited, db_parts_ADDRESSBAND), 1902 | DB_DEFINE_SUBCLASS(AddressBand, ABGreen, db_parts_ADDRESSBAND), 1903 | DB_DEFINE_SUBCLASS(AddressBand, ABGreenComposited, db_parts_ADDRESSBAND), 1904 | DB_DEFINE_SUBCLASS(AddressBand, ABRed, db_parts_ADDRESSBAND), 1905 | DB_DEFINE_SUBCLASS(AddressBand, ABRedComposited, db_parts_ADDRESSBAND), 1906 | DB_DEFINE_SUBCLASS(AddressBand, ABYellow, db_parts_ADDRESSBAND), 1907 | DB_DEFINE_SUBCLASS(AddressBand, ABYellowComposited, db_parts_ADDRESSBAND), 1908 | DB_DEFINE_CLASS(AeroWizard, db_parts_AEROWIZARD), 1909 | DB_DEFINE_CLASS(Button, db_parts_BUTTON), 1910 | DB_DEFINE_SUBCLASS(Button, InfoPaneButton, db_parts_BUTTON), 1911 | DB_DEFINE_SUBCLASS(Button, InfoPaneStatic, db_parts_BUTTON), 1912 | DB_DEFINE_SUBCLASS(Button, ShowDesktop, db_parts_BUTTON), 1913 | DB_DEFINE_SUBCLASS(Button, VerticalShowDesktop, db_parts_BUTTON), 1914 | DB_DEFINE_SUBCLASS(Button, Start, db_parts_BUTTON), 1915 | DB_DEFINE_SUBCLASS(Button, TrayNotifyHoriz, db_parts_BUTTON), 1916 | DB_DEFINE_SUBCLASS(Button, TrayNotifyHorizComposited, db_parts_BUTTON), 1917 | DB_DEFINE_SUBCLASS(Button, TrayNotifyHorizOpen, db_parts_BUTTON), 1918 | DB_DEFINE_SUBCLASS(Button, TrayNotifyHorizOpenComposited, db_parts_BUTTON), 1919 | DB_DEFINE_SUBCLASS(Button, TrayNotifyVert, db_parts_BUTTON), 1920 | DB_DEFINE_SUBCLASS(Button, TrayNotifyVertComposited, db_parts_BUTTON), 1921 | DB_DEFINE_SUBCLASS(Button, TrayNotifyVertOpen, db_parts_BUTTON), 1922 | DB_DEFINE_SUBCLASS(Button, TrayNotifyVertOpenComposited, db_parts_BUTTON), 1923 | DB_DEFINE_CLASS(Clock, db_parts_CLOCK), 1924 | DB_DEFINE_SUBCLASS(Clock, TrayNotify, db_parts_CLOCK), 1925 | DB_DEFINE_SUBCLASS(Clock, TrayNotifyComposited, db_parts_CLOCK), 1926 | DB_DEFINE_CLASS(Combobox, db_parts_COMBOBOX), 1927 | DB_DEFINE_SUBCLASS(Combobox, Address, db_parts_COMBOBOX), 1928 | DB_DEFINE_SUBCLASS(Combobox, AddressComposited, db_parts_COMBOBOX), 1929 | DB_DEFINE_SUBCLASS(Combobox, Communications, db_parts_COMBOBOX), 1930 | DB_DEFINE_SUBCLASS(Combobox, InactiveAddress, db_parts_COMBOBOX), 1931 | DB_DEFINE_SUBCLASS(Combobox, InactiveAddressComposited, db_parts_COMBOBOX), 1932 | DB_DEFINE_SUBCLASS(Combobox, MaxAddress, db_parts_COMBOBOX), 1933 | DB_DEFINE_SUBCLASS(Combobox, MaxAddressComposited, db_parts_COMBOBOX), 1934 | DB_DEFINE_SUBCLASS(Combobox, MaxInactiveAddress, db_parts_COMBOBOX), 1935 | DB_DEFINE_SUBCLASS(Combobox, MaxInactiveAddressComposited, db_parts_COMBOBOX), 1936 | DB_DEFINE_SUBCLASS(Combobox, TaskbarComposited, db_parts_COMBOBOX), 1937 | DB_DEFINE_CLASS(Communications, db_parts_COMMUNICATIONS), 1938 | DB_DEFINE_CLASS(ControlPanel, db_parts_CONTROLPANEL), 1939 | DB_DEFINE_CLASS(DatePicker, db_parts_DATEPICKER), 1940 | DB_DEFINE_CLASS(DragDrop, db_parts_DRAGDROP), 1941 | DB_DEFINE_CLASS(Edit, db_parts_EDIT), 1942 | DB_DEFINE_SUBCLASS(Edit, Address, db_parts_EDIT), 1943 | DB_DEFINE_SUBCLASS(Edit, AddressComposited, db_parts_EDIT), 1944 | DB_DEFINE_SUBCLASS(Edit, CommonItemDialogPreviewPaneControl, db_parts_EDIT), 1945 | DB_DEFINE_SUBCLASS(Edit, DocumentsPreviewPaneControl, db_parts_EDIT), 1946 | DB_DEFINE_SUBCLASS(Edit, EditComposited, db_parts_EDIT), 1947 | DB_DEFINE_SUBCLASS(Edit, Explorer, db_parts_EDIT), 1948 | DB_DEFINE_SUBCLASS(Edit, GenericPreviewPaneControl, db_parts_EDIT), 1949 | DB_DEFINE_SUBCLASS(Edit, Help, db_parts_EDIT), 1950 | DB_DEFINE_SUBCLASS(Edit, InactiveAddress, db_parts_EDIT), 1951 | DB_DEFINE_SUBCLASS(Edit, InactiveAddressComposited, db_parts_EDIT), 1952 | DB_DEFINE_SUBCLASS(Edit, InactiveSearchBoxEdit, db_parts_EDIT), 1953 | DB_DEFINE_SUBCLASS(Edit, InactiveSearchBoxEditComposited, db_parts_EDIT), 1954 | DB_DEFINE_SUBCLASS(Edit, MaxAddress, db_parts_EDIT), 1955 | DB_DEFINE_SUBCLASS(Edit, MaxAddressComposited, db_parts_EDIT), 1956 | DB_DEFINE_SUBCLASS(Edit, MaxInactiveAddress, db_parts_EDIT), 1957 | DB_DEFINE_SUBCLASS(Edit, MaxInactiveAddressComposited, db_parts_EDIT), 1958 | DB_DEFINE_SUBCLASS(Edit, MaxInactiveSearchBoxEdit, db_parts_EDIT), 1959 | DB_DEFINE_SUBCLASS(Edit, MaxInactiveSearchBoxEditComposited, db_parts_EDIT), 1960 | DB_DEFINE_SUBCLASS(Edit, MaxSearchBoxEdit, db_parts_EDIT), 1961 | DB_DEFINE_SUBCLASS(Edit, MaxSearchBoxEditComposited, db_parts_EDIT), 1962 | DB_DEFINE_SUBCLASS(Edit, MusicPreviewPaneControl, db_parts_EDIT), 1963 | DB_DEFINE_SUBCLASS(Edit, PhotoPreviewPaneControl, db_parts_EDIT), 1964 | DB_DEFINE_SUBCLASS(Edit, SearchBoxEdit, db_parts_EDIT), 1965 | DB_DEFINE_SUBCLASS(Edit, SearchBoxEditComposited, db_parts_EDIT), 1966 | DB_DEFINE_SUBCLASS(Edit, TaskBarComposited, db_parts_EDIT), 1967 | DB_DEFINE_CLASS(EmptyMarkup, db_parts_EMPTYMARKUP), 1968 | DB_DEFINE_SUBCLASS(EmptyMarkup, StartMenuComposited, db_parts_EMPTYMARKUP), 1969 | DB_DEFINE_CLASS(ExplorerBar, db_parts_EXPLORERBAR), 1970 | DB_DEFINE_CLASS(Flyout, db_parts_FLYOUT), 1971 | DB_DEFINE_CLASS(Globals, db_parts_GLOBALS), 1972 | DB_DEFINE_CLASS(Header, db_parts_HEADER), 1973 | DB_DEFINE_SUBCLASS(Header, ItemsView, db_parts_HEADER), 1974 | DB_DEFINE_CLASS(Link, db_parts_LINK), 1975 | DB_DEFINE_SUBCLASS(Link, StartMenuComposited, db_parts_LINK), 1976 | DB_DEFINE_CLASS(ListBox, db_parts_LISTBOX), 1977 | DB_DEFINE_CLASS(ListView, db_parts_LISTVIEW), 1978 | DB_DEFINE_SUBCLASS(ListView, Explorer, db_parts_LISTVIEW), 1979 | DB_DEFINE_SUBCLASS(ListView, ItemsView, db_parts_LISTVIEW), 1980 | DB_DEFINE_SUBCLASS(ListView, StartMenu, db_parts_LISTVIEW), 1981 | DB_DEFINE_SUBCLASS(ListView, StartMenuComposited, db_parts_LISTVIEW), 1982 | DB_DEFINE_SUBCLASS(ListView, StartMenuCompositedMFU, db_parts_LISTVIEW), 1983 | DB_DEFINE_SUBCLASS(ListView, StartMenuPlaceListComposited, db_parts_LISTVIEW), 1984 | DB_DEFINE_SUBCLASS(ListView, TopMatch, db_parts_LISTVIEW), 1985 | DB_DEFINE_SUBCLASS(ListView, TopMatchComposited, db_parts_LISTVIEW), 1986 | DB_DEFINE_CLASS(Menu, db_parts_MENU), 1987 | DB_DEFINE_SUBCLASS(Menu, Communications, db_parts_MENU), 1988 | DB_DEFINE_SUBCLASS(Menu, Media, db_parts_MENU), 1989 | DB_DEFINE_CLASS(MenuBand, db_parts_MENUBAND), 1990 | DB_DEFINE_SUBCLASS(MenuBand, ExplorerMenu, db_parts_MENUBAND), 1991 | DB_DEFINE_SUBCLASS(MenuBand, StartMenu, db_parts_MENUBAND), 1992 | DB_DEFINE_CLASS(MonthCal, db_parts_MONTHCAL), 1993 | DB_DEFINE_CLASS(Navigation, db_parts_NAVIGATION), 1994 | DB_DEFINE_CLASS(Page, db_parts_PAGE), 1995 | DB_DEFINE_CLASS(Progress, db_parts_PROGRESS), 1996 | DB_DEFINE_SUBCLASS(Progress, Indeterminate, db_parts_PROGRESS), 1997 | DB_DEFINE_CLASS(Rebar, db_parts_REBAR), 1998 | DB_DEFINE_SUBCLASS(Rebar, AlternateRebar, db_parts_REBAR), 1999 | DB_DEFINE_SUBCLASS(Rebar, BrowserTabBar, db_parts_REBAR), 2000 | DB_DEFINE_SUBCLASS(Rebar, Communications, db_parts_REBAR), 2001 | DB_DEFINE_SUBCLASS(Rebar, Default, db_parts_REBAR), 2002 | DB_DEFINE_SUBCLASS(Rebar, ExplorerBar, db_parts_REBAR), 2003 | DB_DEFINE_SUBCLASS(Rebar, Help, db_parts_REBAR), 2004 | DB_DEFINE_SUBCLASS(Rebar, InactiveNavbar, db_parts_REBAR), 2005 | DB_DEFINE_SUBCLASS(Rebar, InactiveNavbarComposited, db_parts_REBAR), 2006 | DB_DEFINE_SUBCLASS(Rebar, ITBarBase, db_parts_REBAR), 2007 | DB_DEFINE_SUBCLASS(Rebar, MaxInactiveNavbar, db_parts_REBAR), 2008 | DB_DEFINE_SUBCLASS(Rebar, MaxInactiveNavbarComposited, db_parts_REBAR), 2009 | DB_DEFINE_SUBCLASS(Rebar, MaxNavbar, db_parts_REBAR), 2010 | DB_DEFINE_SUBCLASS(Rebar, MaxNavbarComposited, db_parts_REBAR), 2011 | DB_DEFINE_SUBCLASS(Rebar, Media, db_parts_REBAR), 2012 | DB_DEFINE_SUBCLASS(Rebar, Navbar, db_parts_REBAR), 2013 | DB_DEFINE_SUBCLASS(Rebar, NavbarBase, db_parts_REBAR), 2014 | DB_DEFINE_SUBCLASS(Rebar, NavbarComposited, db_parts_REBAR), 2015 | DB_DEFINE_SUBCLASS(Rebar, NavbarNonTopmost, db_parts_REBAR), 2016 | DB_DEFINE_SUBCLASS(Rebar, TaskBar, db_parts_REBAR), 2017 | DB_DEFINE_SUBCLASS(Rebar, TaskBarComposited, db_parts_REBAR), 2018 | DB_DEFINE_CLASS(Scrollbar, db_parts_SCROLLBAR), 2019 | DB_DEFINE_SUBCLASS(ScrollBar, TaskBand2, db_parts_SCROLLBAR), 2020 | DB_DEFINE_SUBCLASS(ScrollBar, TaskBand2Composited, db_parts_SCROLLBAR), 2021 | DB_DEFINE_CLASS(SearchEditBox, db_parts_SEARCHEDITBOX), 2022 | DB_DEFINE_CLASS(SearchBox, db_parts_SEARCHBOX), 2023 | DB_DEFINE_SUBCLASS(SearchBox, InactiveSearchBox, db_parts_SEARCHBOX), 2024 | DB_DEFINE_SUBCLASS(SearchBox, InactiveSearchBoxComposited, db_parts_SEARCHBOX), 2025 | DB_DEFINE_SUBCLASS(SearchBox, MaxInactiveSearchBox, db_parts_SEARCHBOX), 2026 | DB_DEFINE_SUBCLASS(SearchBox, MaxInactiveSearchBoxComposited, db_parts_SEARCHBOX), 2027 | DB_DEFINE_SUBCLASS(SearchBox, MaxSearchBox, db_parts_SEARCHBOX), 2028 | DB_DEFINE_SUBCLASS(SearchBox, MaxSearchBoxComposited, db_parts_SEARCHBOX), 2029 | DB_DEFINE_SUBCLASS(SearchBox, SearchBoxComposited, db_parts_SEARCHBOX), 2030 | DB_DEFINE_CLASS(Spin, db_parts_SPIN), 2031 | DB_DEFINE_CLASS(StartPanel, db_parts_STARTPANEL), 2032 | DB_DEFINE_CLASS(StartPanelPriv, db_parts_STARTPANEL), 2033 | DB_DEFINE_SUBCLASS(StartPanelPriv, StartPanelComposited, db_parts_STARTPANEL), 2034 | DB_DEFINE_SUBCLASS(StartPanelPriv, StartPanelCompositedBottom, db_parts_STARTPANEL), 2035 | DB_DEFINE_CLASS(Static, db_parts_STATIC), 2036 | DB_DEFINE_CLASS(Status, db_parts_STATUS), 2037 | DB_DEFINE_CLASS(Tab, db_parts_TAB), 2038 | DB_DEFINE_SUBCLASS(Tab, BrowserTab, db_parts_TAB), 2039 | DB_DEFINE_CLASS(TaskBand, db_parts_TASKBAND), 2040 | DB_DEFINE_CLASS(TaskBar, db_parts_TASKBAR), 2041 | DB_DEFINE_SUBCLASS(TaskBar, TaskBarComposited, db_parts_TASKBAR), 2042 | DB_DEFINE_SUBCLASS(TaskBar, TaskBar2, db_parts_TASKBAR), 2043 | DB_DEFINE_SUBCLASS(TaskBar, TaskBar2Composited, db_parts_TASKBAR), 2044 | DB_DEFINE_CLASS(TaskDialog, db_parts_TASKDIALOG), 2045 | DB_DEFINE_CLASS(TextStyle, db_parts_TEXTSTYLE), 2046 | DB_DEFINE_CLASS(Toolbar, db_parts_TOOLBAR), 2047 | DB_DEFINE_SUBCLASS(Toolbar, Alternate, db_parts_TOOLBAR), 2048 | DB_DEFINE_SUBCLASS(Toolbar, BB, db_parts_TOOLBAR), 2049 | DB_DEFINE_SUBCLASS(Toolbar, BBComposited, db_parts_TOOLBAR), 2050 | DB_DEFINE_SUBCLASS(Toolbar, Communications, db_parts_TOOLBAR), 2051 | DB_DEFINE_SUBCLASS(Toolbar, ExplorerBar, db_parts_TOOLBAR), 2052 | DB_DEFINE_SUBCLASS(Toolbar, ExplorerMenu, db_parts_TOOLBAR), 2053 | DB_DEFINE_SUBCLASS(Toolbar, Go, db_parts_TOOLBAR), 2054 | DB_DEFINE_SUBCLASS(Toolbar, GoComposited, db_parts_TOOLBAR), 2055 | DB_DEFINE_SUBCLASS(Toolbar, InactiveBB, db_parts_TOOLBAR), 2056 | DB_DEFINE_SUBCLASS(Toolbar, InactiveBBComposited, db_parts_TOOLBAR), 2057 | DB_DEFINE_SUBCLASS(Toolbar, InactiveGo, db_parts_TOOLBAR), 2058 | DB_DEFINE_SUBCLASS(Toolbar, InactiveGoComposited, db_parts_TOOLBAR), 2059 | DB_DEFINE_SUBCLASS(Toolbar, InfoPaneToolbar, db_parts_TOOLBAR), 2060 | DB_DEFINE_SUBCLASS(Toolbar, LVPopup, db_parts_TOOLBAR), 2061 | DB_DEFINE_SUBCLASS(Toolbar, LVPopupBottom, db_parts_TOOLBAR), 2062 | DB_DEFINE_SUBCLASS(Toolbar, MaxBB, db_parts_TOOLBAR), 2063 | DB_DEFINE_SUBCLASS(Toolbar, MaxBBComposited, db_parts_TOOLBAR), 2064 | DB_DEFINE_SUBCLASS(Toolbar, MaxGo, db_parts_TOOLBAR), 2065 | DB_DEFINE_SUBCLASS(Toolbar, MaxGoComposited, db_parts_TOOLBAR), 2066 | DB_DEFINE_SUBCLASS(Toolbar, MaxInactiveGo, db_parts_TOOLBAR), 2067 | DB_DEFINE_SUBCLASS(Toolbar, MaxInactiveGoComposited, db_parts_TOOLBAR), 2068 | DB_DEFINE_SUBCLASS(Toolbar, Media, db_parts_TOOLBAR), 2069 | DB_DEFINE_SUBCLASS(Toolbar, Placesbar, db_parts_TOOLBAR), 2070 | DB_DEFINE_SUBCLASS(Toolbar, SearchButton, db_parts_TOOLBAR), 2071 | DB_DEFINE_SUBCLASS(Toolbar, SearchButtonComposited, db_parts_TOOLBAR), 2072 | DB_DEFINE_SUBCLASS(Toolbar, StartMenu, db_parts_TOOLBAR), 2073 | DB_DEFINE_SUBCLASS(Toolbar, TaskBar, db_parts_TOOLBAR), 2074 | DB_DEFINE_SUBCLASS(Toolbar, TaskBarComposited, db_parts_TOOLBAR), 2075 | DB_DEFINE_SUBCLASS(Toolbar, TaskBarVert, db_parts_TOOLBAR), 2076 | DB_DEFINE_SUBCLASS(Toolbar, TaskBarVertComposited, db_parts_TOOLBAR), 2077 | DB_DEFINE_SUBCLASS(Toolbar, Travel, db_parts_TOOLBAR), 2078 | DB_DEFINE_SUBCLASS(Toolbar, TravelComposited, db_parts_TOOLBAR), 2079 | DB_DEFINE_SUBCLASS(Toolbar, TrayNotify, db_parts_TOOLBAR), 2080 | DB_DEFINE_SUBCLASS(Toolbar, TrayNotifyComposited, db_parts_TOOLBAR), 2081 | DB_DEFINE_CLASS(Tooltip, db_parts_TOOLTIP), 2082 | DB_DEFINE_CLASS(TrackBar, db_parts_TRACKBAR), 2083 | DB_DEFINE_CLASS(TrayNotify, db_parts_TRAYNOTIFY), 2084 | DB_DEFINE_SUBCLASS(TrayNotify, TrayNotifyHoriz, db_parts_TRAYNOTIFY), 2085 | DB_DEFINE_SUBCLASS(TrayNotify, TrayNotifyHorizComposited, db_parts_TRAYNOTIFY), 2086 | DB_DEFINE_SUBCLASS(TrayNotify, TrayNotifyVert, db_parts_TRAYNOTIFY), 2087 | DB_DEFINE_SUBCLASS(TrayNotify, TrayNotifyVertComposited, db_parts_TRAYNOTIFY), 2088 | DB_DEFINE_CLASS(TreeView, db_parts_TREEVIEW), 2089 | DB_DEFINE_SUBCLASS(TreeView, Explorer, db_parts_TREEVIEW), 2090 | DB_DEFINE_SUBCLASS(TreeView, StartMenuKeyBoard, db_parts_TREEVIEW), 2091 | DB_DEFINE_SUBCLASS(TreeView, StartMenuKeyBoardComposited, db_parts_TREEVIEW), 2092 | DB_DEFINE_SUBCLASS(TreeView, StartMenuHover, db_parts_TREEVIEW), 2093 | DB_DEFINE_SUBCLASS(TreeView, StartMenuHoverComposited, db_parts_TREEVIEW), 2094 | DB_DEFINE_CLASS(Window, db_parts_WINDOW), 2095 | DB_DEFINE_SUBCLASS(Window, CompositedWindow, db_parts_WINDOW) 2096 | }; 2097 | 2098 | const db_class_t* db_classes = db_classes_helper; 2099 | int db_n_classes = TE_ARRAY_SIZE(db_classes_helper); 2100 | 2101 | 2102 | void 2103 | db_class_display_name(const db_class_t* cls, TCHAR* buffer, UINT bufsize) 2104 | { 2105 | if(cls->subclass != NULL) 2106 | _sntprintf(buffer, bufsize, _T("%s [%s]"), cls->name, cls->subclass); 2107 | else 2108 | _sntprintf(buffer, bufsize, _T("%s"), cls->name); 2109 | buffer[bufsize - 1] = _T('\0'); 2110 | } 2111 | 2112 | 2113 | /****************** 2114 | *** Properties *** 2115 | ******************/ 2116 | 2117 | static void 2118 | db_to_string_TMT_ENUM(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2119 | { 2120 | const TCHAR* str = NULL; 2121 | int val; 2122 | 2123 | if(GetThemeInt(theme, part, state, prop, &val) != S_OK) { 2124 | buffer[0] = _T('\0'); 2125 | return; 2126 | } 2127 | 2128 | switch(prop) { 2129 | case 4001: 2130 | switch(val) { 2131 | case 0: str = _T("BT_IMAGEFILE"); break; 2132 | case 1: str = _T("BT_BORDERFILL"); break; 2133 | case 2: str = _T("BT_NONE"); break; 2134 | } 2135 | break; 2136 | 2137 | case 4002: 2138 | switch(val) { 2139 | case 0: str = _T("BT_RECT"); break; 2140 | case 1: str = _T("BT_ROUNDRECT"); break; 2141 | case 2: str = _T("BT_ELLIPSE"); break; 2142 | } 2143 | break; 2144 | 2145 | case 4003: 2146 | switch(val) { 2147 | case 0: str = _T("FT_SOLID"); break; 2148 | case 1: str = _T("FT_VERTGRADIENT"); break; 2149 | case 2: str = _T("FT_HORZGRADIENT"); break; 2150 | case 3: str = _T("FT_RADIALGRADIENT"); break; 2151 | case 4: str = _T("FT_TILEIMAGE"); break; 2152 | } 2153 | break; 2154 | 2155 | case 4004: 2156 | switch(val) { 2157 | case 0: str = _T("ST_TRUESIZE"); break; 2158 | case 1: str = _T("ST_STRETCH"); break; 2159 | case 2: str = _T("ST_TILE"); break; 2160 | } 2161 | break; 2162 | 2163 | case 4005: 2164 | switch(val) { 2165 | case 0: str = _T("HA_LEFT"); break; 2166 | case 1: str = _T("HA_CENTER"); break; 2167 | case 2: str = _T("HA_RIGHT"); break; 2168 | } 2169 | break; 2170 | 2171 | case 4006: 2172 | switch(val) { 2173 | case 0: str = _T("CA_LEFT"); break; 2174 | case 1: str = _T("CA_CENTER"); break; 2175 | case 2: str = _T("CA_RIGHT"); break; 2176 | } 2177 | break; 2178 | 2179 | case 4007: 2180 | switch(val) { 2181 | case 0: str = _T("VA_TOP"); break; 2182 | case 1: str = _T("VA_CENTER"); break; 2183 | case 2: str = _T("VA_BOTTOM"); break; 2184 | } 2185 | break; 2186 | 2187 | case 4008: 2188 | switch(val) { 2189 | case 0: str = _T("OT_TOPLEFT"); break; 2190 | case 1: str = _T("OT_TOPRIGHT"); break; 2191 | case 2: str = _T("OT_TOPMIDDLE"); break; 2192 | case 3: str = _T("OT_BOTTOMLEFT"); break; 2193 | case 4: str = _T("OT_BOTTOMRIGHT"); break; 2194 | case 5: str = _T("OT_BOTTOMMIDDLE"); break; 2195 | case 6: str = _T("OT_MIDDLELEFT"); break; 2196 | case 7: str = _T("OT_MIDDLERIGHT"); break; 2197 | case 8: str = _T("OT_LEFTOFCAPTION"); break; 2198 | case 9: str = _T("OT_RIGHTOFCAPTION"); break; 2199 | case 10: str = _T("OT_LEFTOFLASTBUTTON"); break; 2200 | case 11: str = _T("OT_RIGHTOFLASTBUTTON"); break; 2201 | case 12: str = _T("OT_ABOVELASTBUTTON"); break; 2202 | case 13: str = _T("OT_BELOWLASTBUTTON"); break; 2203 | } 2204 | break; 2205 | 2206 | case 4009: 2207 | switch(val) { 2208 | case 0: str = _T("ICE_NONE"); break; 2209 | case 1: str = _T("ICE_GLOW"); break; 2210 | case 2: str = _T("ICE_SHADOW"); break; 2211 | case 3: str = _T("ICE_PULSE"); break; 2212 | case 4: str = _T("ICE_ALPHA"); break; 2213 | } 2214 | break; 2215 | 2216 | case 4010: 2217 | switch(val) { 2218 | case 0: str = _T("TST_NONE"); break; 2219 | case 1: str = _T("TST_SINGLE"); break; 2220 | case 2: str = _T("TST_CONTINUOUS"); break; 2221 | } 2222 | break; 2223 | 2224 | case 4011: 2225 | switch(val) { 2226 | case 0: str = _T("IL_VERTICAL"); break; 2227 | case 1: str = _T("IL_HORIZONTAL"); break; 2228 | } 2229 | break; 2230 | 2231 | case 4012: 2232 | switch(val) { 2233 | case 0: str = _T("GT_NONE"); break; 2234 | case 1: str = _T("GT_IMAGEGLYPH"); break; 2235 | case 2: str = _T("GT_FONTGLYPH"); break; 2236 | } 2237 | break; 2238 | 2239 | case 4013: 2240 | switch(val) { 2241 | case 0: str = _T("IST_NONE"); break; 2242 | case 1: str = _T("IST_SIZE"); break; 2243 | case 2: str = _T("IST_DPI"); break; 2244 | } 2245 | break; 2246 | 2247 | case 4014: 2248 | switch(val) { 2249 | case 0: str = _T("GFST_NONE"); break; 2250 | case 1: str = _T("GFST_SIZE"); break; 2251 | case 2: str = _T("GFST_DPI"); break; 2252 | } 2253 | break; 2254 | 2255 | case 4015: 2256 | switch(val) { 2257 | case 0: str = _T("TSST_NONE"); break; 2258 | case 1: str = _T("TSST_SIZE"); break; 2259 | case 2: str = _T("TSST_DPI"); break; 2260 | } 2261 | break; 2262 | } 2263 | 2264 | if(str) 2265 | _sntprintf(buffer, bufsize, _T("%d (%s)"), val, str); 2266 | else 2267 | _sntprintf(buffer, bufsize, _T("%d"), val); 2268 | } 2269 | 2270 | static void 2271 | db_to_string_TMT_STRING(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2272 | { 2273 | if(GetThemeString(theme, part, state, prop, buffer, bufsize) != S_OK) 2274 | buffer[0] = _T('\0'); 2275 | } 2276 | 2277 | static void 2278 | db_to_string_TMT_INT(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2279 | { 2280 | int val; 2281 | HDC dc; 2282 | HRESULT hr; 2283 | 2284 | if(GetThemeInt(theme, part, state, prop, &val) != S_OK) { 2285 | dc = GetDC(NULL); 2286 | hr = GetThemeMetric(theme, dc, part, state, prop, &val); 2287 | ReleaseDC(NULL, dc); 2288 | if(hr != S_OK) { 2289 | buffer[0] = _T('\0'); 2290 | return; 2291 | } 2292 | } 2293 | 2294 | _sntprintf(buffer, bufsize, _T("%d (0x%x)"), val, (unsigned)val); 2295 | } 2296 | 2297 | static void 2298 | db_to_string_TMT_BOOL(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2299 | { 2300 | BOOL val; 2301 | 2302 | if(GetThemeBool(theme, part, state, prop, &val) != S_OK) { 2303 | buffer[0] = _T('\0'); 2304 | return; 2305 | } 2306 | 2307 | _sntprintf(buffer, bufsize, _T("%s"), (val ? _T("True") : _T("False"))); 2308 | } 2309 | 2310 | static void 2311 | db_to_string_TMT_COLOR(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2312 | { 2313 | COLORREF rgb; 2314 | 2315 | if(GetThemeColor(theme, part, state, prop, &rgb) != S_OK) { 2316 | buffer[0] = _T('\0'); 2317 | return; 2318 | } 2319 | 2320 | _sntprintf(buffer, bufsize, _T("%d,%d,%d (#%06x)"), 2321 | (int)GetRValue(rgb), (int)GetGValue(rgb), (int)GetBValue(rgb), 2322 | (unsigned)(rgb & 0xffffff)); 2323 | } 2324 | 2325 | static void 2326 | db_to_string_TMT_MARGINS(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2327 | { 2328 | MARGINS margins; 2329 | HDC dc; 2330 | HRESULT hr; 2331 | 2332 | dc = GetDC(NULL); 2333 | hr = GetThemeMargins(theme, dc, part, state, prop, NULL, &margins); 2334 | ReleaseDC(NULL, dc); 2335 | if(hr != S_OK) { 2336 | buffer[0] = _T('\0'); 2337 | return; 2338 | } 2339 | 2340 | _sntprintf(buffer, bufsize, _T("%d,%d (horz), %d,%d (vert)"), 2341 | margins.cxLeftWidth, margins.cxRightWidth, 2342 | margins.cyTopHeight, margins.cyBottomHeight); 2343 | } 2344 | 2345 | static void 2346 | db_to_string_TMT_FILENAME(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2347 | { 2348 | if(GetThemeFilename(theme, part, state, prop, buffer, bufsize) != S_OK) 2349 | buffer[0] = _T('\0'); 2350 | } 2351 | 2352 | static void 2353 | db_to_string_TMT_SIZE(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2354 | { 2355 | SIZE size; 2356 | HDC dc; 2357 | HRESULT hr; 2358 | 2359 | dc = GetDC(NULL); 2360 | hr = GetThemePartSize(theme, dc, part, state, NULL, prop, &size); 2361 | ReleaseDC(NULL, dc); 2362 | if(hr != S_OK) { 2363 | buffer[0] = _T('\0'); 2364 | return; 2365 | } 2366 | 2367 | _sntprintf(buffer, bufsize, _T("%dx%d"), (int)size.cx, (int)size.cy); 2368 | } 2369 | 2370 | static void 2371 | db_to_string_TMT_POSITION(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2372 | { 2373 | POINT pos; 2374 | 2375 | if(GetThemePosition(theme, part, state, prop, &pos) != S_OK) { 2376 | buffer[0] = _T('\0'); 2377 | return; 2378 | } 2379 | 2380 | _sntprintf(buffer, bufsize, _T("%d,%d"), pos.x, pos.y); 2381 | } 2382 | 2383 | static void 2384 | db_to_string_TMT_RECT(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2385 | { 2386 | RECT rect; 2387 | 2388 | if(GetThemeRect(theme, part, state, prop, &rect) != S_OK) { 2389 | buffer[0] = _T('\0'); 2390 | return; 2391 | } 2392 | 2393 | _sntprintf(buffer, bufsize, _T("%d,%d - %d,%d (%dx%d)"), 2394 | rect.left, rect.top, rect.right, rect.bottom, 2395 | rect.right - rect.left, rect.bottom - rect.top); 2396 | } 2397 | 2398 | static void 2399 | db_to_string_TMT_FONT(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2400 | { 2401 | const TCHAR* weight = _T(""); 2402 | LOGFONT lf; 2403 | HDC dc; 2404 | HRESULT hr; 2405 | 2406 | dc = GetDC(NULL); 2407 | hr = GetThemeFont(theme, dc, part, state, prop, &lf); 2408 | ReleaseDC(NULL, dc); 2409 | if(hr != S_OK) { 2410 | buffer[0] = _T('\0'); 2411 | return; 2412 | } 2413 | 2414 | switch(((lf.lfWeight + 50) / 100) * 100) { 2415 | case 0: weight = _T(""); break; 2416 | case FW_THIN: weight = _T(" thin"); break; 2417 | case FW_EXTRALIGHT: weight = _T(" extralight"); break; 2418 | case FW_LIGHT: weight = _T(" light"); break; 2419 | case FW_REGULAR: weight = _T(" regular"); break; 2420 | case FW_MEDIUM: weight = _T(" medium"); break; 2421 | case FW_SEMIBOLD: weight = _T(" semibold"); break; 2422 | case FW_BOLD: weight = _T(" bold"); break; 2423 | case FW_EXTRABOLD: weight = _T(" extrabold"); break; 2424 | case FW_HEAVY: weight = _T(" heavy"); break; 2425 | default: weight = _T(" ??"); break; 2426 | } 2427 | 2428 | _sntprintf(buffer, bufsize, _T("%s,%d%s%s%s"), 2429 | lf.lfFaceName, lf.lfHeight, weight, 2430 | lf.lfUnderline ? _T(" underlined") : _T(""), 2431 | lf.lfItalic ? _T(" italic") : _T("")); 2432 | } 2433 | 2434 | static void 2435 | db_to_string_TMT_INTLIST(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2436 | { 2437 | BYTE mem[410 * sizeof(int)]; 2438 | INTLIST* list = (INTLIST*) mem; /* workaround of mingw-w64 bug #3524667 */ 2439 | int i; 2440 | size_t n; 2441 | 2442 | if(GetThemeIntList(theme, part, state, prop, list) != S_OK) { 2443 | buffer[0] = _T('\0'); 2444 | return; 2445 | } 2446 | 2447 | for(i = 0; i < list->iValueCount; i++) { 2448 | n = _sntprintf(buffer, bufsize, (i > 0 ? _T(",%d") : _T("%d")), list->iValues[i]); 2449 | if(n <= 0) 2450 | break; 2451 | buffer += n; 2452 | bufsize -= n; 2453 | } 2454 | } 2455 | 2456 | static void 2457 | db_to_string_TMT_DISKSTREAM(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2458 | { 2459 | TCHAR theme_path[MAX_PATH]; 2460 | HANDLE theme_instance; 2461 | void* stream; 2462 | DWORD stream_len; 2463 | 2464 | buffer[0] = _T('\0'); 2465 | if(FAILED(GetCurrentThemeName(theme_path, TE_ARRAY_SIZE(theme_path), NULL, 0, NULL, 0))) 2466 | return; 2467 | 2468 | theme_instance = LoadLibraryEx(theme_path, 0, LOAD_LIBRARY_AS_DATAFILE); 2469 | if(!theme_instance) 2470 | return; 2471 | 2472 | if(SUCCEEDED(GetThemeStream(theme, part, state, prop, &stream, &stream_len, theme_instance))) 2473 | _sntprintf(buffer, bufsize, _T(""), (unsigned)stream_len); 2474 | 2475 | FreeLibrary(theme_instance); 2476 | } 2477 | 2478 | static void 2479 | db_to_string_TMT_STREAM(HTHEME theme, int part, int state, int prop, TCHAR* buffer, DWORD bufsize) 2480 | { 2481 | void* stream; 2482 | DWORD stream_len; 2483 | 2484 | buffer[0] = _T('\0'); 2485 | if(SUCCEEDED(GetThemeStream(theme, part, state, prop, &stream, &stream_len, NULL))) 2486 | _sntprintf(buffer, bufsize, _T(""), (unsigned)stream_len); 2487 | } 2488 | 2489 | 2490 | static const db_type_t db_type_TMT_ENUM = { 200, _T("TMT_ENUM"), _T("Enum"), db_to_string_TMT_ENUM }; 2491 | static const db_type_t db_type_TMT_STRING = { 201, _T("TMT_STRING"), _T("String"), db_to_string_TMT_STRING }; 2492 | static const db_type_t db_type_TMT_INT = { 202, _T("TMT_INT"), _T("Int"), db_to_string_TMT_INT }; 2493 | static const db_type_t db_type_TMT_BOOL = { 203, _T("TMT_BOOL"), _T("Bool"), db_to_string_TMT_BOOL }; 2494 | static const db_type_t db_type_TMT_COLOR = { 204, _T("TMT_COLOR"), _T("Color"), db_to_string_TMT_COLOR }; 2495 | static const db_type_t db_type_TMT_MARGINS = { 205, _T("TMT_MARGINS"), _T("Margins"), db_to_string_TMT_MARGINS }; 2496 | static const db_type_t db_type_TMT_FILENAME = { 206, _T("TMT_FILENAME"), _T("Filename"), db_to_string_TMT_FILENAME }; 2497 | static const db_type_t db_type_TMT_SIZE = { 207, _T("TMT_SIZE"), _T("Size"), db_to_string_TMT_SIZE }; 2498 | static const db_type_t db_type_TMT_POSITION = { 208, _T("TMT_POSITION"), _T("Positon"), db_to_string_TMT_POSITION }; 2499 | static const db_type_t db_type_TMT_RECT = { 209, _T("TMT_RECT"), _T("Rect"), db_to_string_TMT_RECT }; 2500 | static const db_type_t db_type_TMT_FONT = { 210, _T("TMT_FONT"), _T("Font"), db_to_string_TMT_FONT }; 2501 | static const db_type_t db_type_TMT_INTLIST = { 211, _T("TMT_INTLIST"), _T("IntList"), db_to_string_TMT_INTLIST }; 2502 | static const db_type_t db_type_TMT_DISKSTREAM = { 213, _T("TMT_DISKSTREAM"), _T("DiskStream"), db_to_string_TMT_DISKSTREAM }; 2503 | static const db_type_t db_type_TMT_STREAM = { 214, _T("TMT_STREAM"), _T("Stream"), db_to_string_TMT_STREAM }; 2504 | 2505 | #define DB_DEFINE_ENUM(id, name, display_name) { &db_type_TMT_ENUM, id, _T(#name), _T(#display_name) } 2506 | #define DB_DEFINE_STRING(id, name, display_name) { &db_type_TMT_STRING, id, _T(#name), _T(#display_name) } 2507 | #define DB_DEFINE_INT(id, name, display_name) { &db_type_TMT_INT, id, _T(#name), _T(#display_name) } 2508 | #define DB_DEFINE_BOOL(id, name, display_name) { &db_type_TMT_BOOL, id, _T(#name), _T(#display_name) } 2509 | #define DB_DEFINE_COLOR(id, name, display_name) { &db_type_TMT_COLOR, id, _T(#name), _T(#display_name) } 2510 | #define DB_DEFINE_MARGINS(id, name, display_name) { &db_type_TMT_MARGINS, id, _T(#name), _T(#display_name) } 2511 | #define DB_DEFINE_FILENAME(id, name, display_name) { &db_type_TMT_FILENAME, id, _T(#name), _T(#display_name) } 2512 | #define DB_DEFINE_SIZE(id, name, display_name) { &db_type_TMT_SIZE, id, _T(#name), _T(#display_name) } 2513 | #define DB_DEFINE_POSITION(id, name, display_name) { &db_type_TMT_POSITION, id, _T(#name), _T(#display_name) } 2514 | #define DB_DEFINE_RECT(id, name, display_name) { &db_type_TMT_RECT, id, _T(#name), _T(#display_name) } 2515 | #define DB_DEFINE_FONT(id, name, display_name) { &db_type_TMT_FONT, id, _T(#name), _T(#display_name) } 2516 | #define DB_DEFINE_INTLIST(id, name, display_name) { &db_type_TMT_INTLIST, id, _T(#name), _T(#display_name) } 2517 | #define DB_DEFINE_DISKSTREAM(id, name, display_name) { &db_type_TMT_DISKSTREAM, id, _T(#name), _T(#display_name) } 2518 | #define DB_DEFINE_STREAM(id, name, display_name) { &db_type_TMT_STREAM, id, _T(#name), _T(#display_name) } 2519 | 2520 | static const db_prop_t db_props_helper[] = { 2521 | DB_DEFINE_ENUM(4001, TMT_BGTYPE, BgType), 2522 | DB_DEFINE_ENUM(4002, TMT_BORDERTYPE, BorderType), 2523 | DB_DEFINE_ENUM(4003, TMT_FILLTYPE, FillType), 2524 | DB_DEFINE_ENUM(4004, TMT_SIZINGTYPE, SizingType), 2525 | DB_DEFINE_ENUM(4005, TMT_HALIGN, HAlign), 2526 | DB_DEFINE_ENUM(4006, TMT_CONTENTALIGNMENT, ContentAlignement), 2527 | DB_DEFINE_ENUM(4007, TMT_VALIGN, VAlign), 2528 | DB_DEFINE_ENUM(4008, TMT_OFFSETTYPE, OffsetType), 2529 | DB_DEFINE_ENUM(4009, TMT_ICONEFFECT, IconEffect), 2530 | DB_DEFINE_ENUM(4010, TMT_TEXTSHADOWTYPE, TextShadowType), 2531 | DB_DEFINE_ENUM(4011, TMT_IMAGELAYOUT, ImageLayout), 2532 | DB_DEFINE_ENUM(4012, TMT_GLYPHTYPE, GlyphType), 2533 | DB_DEFINE_ENUM(4013, TMT_IMAGESELECTTYPE, ImageSelectType), 2534 | DB_DEFINE_ENUM(4014, TMT_GLYPHFONTSIZINGTYPE, GlyphFontSizingType), 2535 | DB_DEFINE_ENUM(4015, TMT_TRUESIZESCALINGTYPE, TrueSizeScalingType), 2536 | 2537 | DB_DEFINE_STRING( 201, TMT_STRING, String), 2538 | DB_DEFINE_STRING( 401, TMT_COLORSCHEMES, ColorSchemes), 2539 | DB_DEFINE_STRING( 402, TMT_SIZES, Sizes), 2540 | DB_DEFINE_STRING( 600, TMT_NAME, Name), 2541 | DB_DEFINE_STRING( 601, TMT_DISPLAYNAME, DisplayName), 2542 | DB_DEFINE_STRING( 602, TMT_TOOLTIP, Tooltip), 2543 | DB_DEFINE_STRING( 603, TMT_COMPANY, Company), 2544 | DB_DEFINE_STRING( 605, TMT_COPYRIGHT, Copyright), 2545 | DB_DEFINE_STRING( 604, TMT_AUTHOR, Author), 2546 | DB_DEFINE_STRING( 606, TMT_URL, Url), 2547 | DB_DEFINE_STRING( 607, TMT_VERSION, Version), 2548 | DB_DEFINE_STRING( 608, TMT_DESCRIPTION, Description), 2549 | DB_DEFINE_STRING(1401, TMT_CSSNAME, CssName), 2550 | DB_DEFINE_STRING(1402, TMT_XMLNAME, XmlName), 2551 | DB_DEFINE_STRING(1403, TMT_LASTUPDATED, LastUpdated), 2552 | DB_DEFINE_STRING(1404, TMT_ALIAS, Alias), 2553 | DB_DEFINE_STRING(3201, TMT_TEXT, Text), 2554 | DB_DEFINE_STRING(3202, TMT_CLASSICVALUE, ClassicValue), 2555 | DB_DEFINE_STRING(8001, TMT_ATLASINPUTIMAGE, AtlasInputImage), 2556 | 2557 | DB_DEFINE_INT( 403, TMT_CHARSET, Charset), 2558 | DB_DEFINE_INT(1301, TMT_MINCOLORDEPTH, MinColorDepth), 2559 | DB_DEFINE_INT(1801, TMT_FROMHUE1, FromHuw1), 2560 | DB_DEFINE_INT(1802, TMT_FROMHUE2, FromHuw2), 2561 | DB_DEFINE_INT(1803, TMT_FROMHUE3, FromHuw3), 2562 | DB_DEFINE_INT(1804, TMT_FROMHUE4, FromHuw4), 2563 | DB_DEFINE_INT(1805, TMT_FROMHUE5, FromHuw5), 2564 | DB_DEFINE_INT(1806, TMT_TOHUE1, ToHue1), 2565 | DB_DEFINE_INT(1807, TMT_TOHUE2, ToHue2), 2566 | DB_DEFINE_INT(1808, TMT_TOHUE3, ToHue3), 2567 | DB_DEFINE_INT(1809, TMT_TOHUE4, ToHue4), 2568 | DB_DEFINE_INT(1810, TMT_TOHUE5, ToHue5), 2569 | DB_DEFINE_INT(2006, TMT_TOCOLOR1, ToColor1), 2570 | DB_DEFINE_INT(2007, TMT_TOCOLOR2, ToColor2), 2571 | DB_DEFINE_INT(2008, TMT_TOCOLOR3, ToColor3), 2572 | DB_DEFINE_INT(2009, TMT_TOCOLOR4, ToColor4), 2573 | DB_DEFINE_INT(2010, TMT_TOCOLOR5, ToColor5), 2574 | DB_DEFINE_INT(2401, TMT_IMAGECOUNT, ImageCount), 2575 | DB_DEFINE_INT(2402, TMT_ALPHALEVEL, AlphaLevel), 2576 | DB_DEFINE_INT(2403, TMT_BORDERSIZE, BorderSize), 2577 | DB_DEFINE_INT(2404, TMT_ROUNDCORNERWIDTH, RoundCornerWidth), 2578 | DB_DEFINE_INT(2405, TMT_ROUNDCORNERHEIGHT, RoundCornerHeight), 2579 | DB_DEFINE_INT(2406, TMT_GRADIENTRATIO1, GradientRatio1), 2580 | DB_DEFINE_INT(2407, TMT_GRADIENTRATIO2, GradientRatio2), 2581 | DB_DEFINE_INT(2408, TMT_GRADIENTRATIO3, GradientRatio3), 2582 | DB_DEFINE_INT(2409, TMT_GRADIENTRATIO4, GradientRatio4), 2583 | DB_DEFINE_INT(2410, TMT_GRADIENTRATIO5, GradientRatio5), 2584 | DB_DEFINE_INT(2411, TMT_PROGRESSCHUNKSIZE, ProgressChunkSize), 2585 | DB_DEFINE_INT(2412, TMT_PROGRESSSPACESIZE, ProgressSpaceSize), 2586 | DB_DEFINE_INT(2413, TMT_SATURATION, Saturation), 2587 | DB_DEFINE_INT(2414, TMT_TEXTBORDERSIZE, TextBorderSize), 2588 | DB_DEFINE_INT(2415, TMT_ALPHATHRESHOLD, AlphaThreshold), 2589 | DB_DEFINE_INT(2416, TMT_WIDTH, Width), 2590 | DB_DEFINE_INT(2417, TMT_HEIGHT, Height), 2591 | DB_DEFINE_INT(2418, TMT_GLYPHINDEX, FlyphIndex), 2592 | DB_DEFINE_INT(2419, TMT_TRUESIZESTRETCHMARK, TrueSizeStretchMark), 2593 | DB_DEFINE_INT(2420, TMT_MINDPI1, MinDpi1), 2594 | DB_DEFINE_INT(2421, TMT_MINDPI2, MinDpi2), 2595 | DB_DEFINE_INT(2422, TMT_MINDPI3, MinDpi3), 2596 | DB_DEFINE_INT(2423, TMT_MINDPI4, MinDpi4), 2597 | DB_DEFINE_INT(2424, TMT_MINDPI5, MinDpi5), 2598 | DB_DEFINE_INT(2425, TMT_TEXTGLOWSIZE, TextGlowSize), 2599 | DB_DEFINE_INT(2426, TMT_FRAMESPERSECOND, FramesPerSecond), 2600 | DB_DEFINE_INT(2427, TMT_PIXELSPERFRAME, PixelsPerFrame), 2601 | DB_DEFINE_INT(2428, TMT_ANIMATIONDELAY, AnimationDelay), 2602 | DB_DEFINE_INT(2429, TMT_GLOWINTENSITY, GlowIntensity), 2603 | DB_DEFINE_INT(2430, TMT_OPACITY, Opacity), 2604 | DB_DEFINE_INT(2431, TMT_COLORIZATIONCOLOR, ColorizationColor), 2605 | DB_DEFINE_INT(2432, TMT_COLORIZATIONOPACITY, ColorizationOpacity), 2606 | DB_DEFINE_INT(5006, TMT_ANIMATIONDURATION, AnimationDuration), 2607 | 2608 | /* These are documented by MSDN as TMT_SIZE, but they are actually TMT_INT too. */ 2609 | DB_DEFINE_INT(1201, TMT_SIZINGBORDERWIDTH, SizingBorderWidth), 2610 | DB_DEFINE_INT(1202, TMT_SCROLLBARWIDTH, ScrollBarWidth), 2611 | DB_DEFINE_INT(1203, TMT_SCROLLBARHEIGHT, ScrollBarHeight), 2612 | DB_DEFINE_INT(1204, TMT_CAPTIONBARWIDTH, CaptionBarWidth), 2613 | DB_DEFINE_INT(1205, TMT_CAPTIONBARHEIGHT, CaptionBarHeight), 2614 | DB_DEFINE_INT(1206, TMT_SMCAPTIONBARWIDTH, SmCaptionBarWidth), 2615 | DB_DEFINE_INT(1207, TMT_SMCAPTIONBARHEIGHT, SmCaptionBarHeight), 2616 | DB_DEFINE_INT(1208, TMT_MENUBARWIDTH, MenuBarWidth), 2617 | DB_DEFINE_INT(1209, TMT_MENUBARHEIGHT, MenuBarHeight), 2618 | DB_DEFINE_INT(1210, TMT_PADDEDBORDERWIDTH, PaddedBorderWidth), 2619 | 2620 | DB_DEFINE_BOOL(1001, TMT_FLATMENUS, FlatMenus), 2621 | DB_DEFINE_BOOL(2201, TMT_TRANSPARENT, Transparent), 2622 | DB_DEFINE_BOOL(2202, TMT_AUTOSIZE, AutoSize), 2623 | DB_DEFINE_BOOL(2203, TMT_BORDERONLY, BorderOnly), 2624 | DB_DEFINE_BOOL(2204, TMT_COMPOSITED, Composited), 2625 | DB_DEFINE_BOOL(2205, TMT_BGFILL, BgFill), 2626 | DB_DEFINE_BOOL(2206, TMT_GLYPHTRANSPARENT, GlyphTransparent), 2627 | DB_DEFINE_BOOL(2207, TMT_GLYPHONLY, GlyphOnly), 2628 | DB_DEFINE_BOOL(2208, TMT_ALWAYSSHOWSIZINGBAR, AlwaysShowSizingBar), 2629 | DB_DEFINE_BOOL(2209, TMT_MIRRORIMAGE, MirrorImage), 2630 | DB_DEFINE_BOOL(2210, TMT_UNIFORMSIZING, UniformSizing), 2631 | DB_DEFINE_BOOL(2211, TMT_INTEGRALSIZING, IntegralSizing), 2632 | DB_DEFINE_BOOL(2212, TMT_SOURCEGROW, SourceGrow), 2633 | DB_DEFINE_BOOL(2213, TMT_SOURCESHRINK, SourceShrink), 2634 | DB_DEFINE_BOOL(2214, TMT_DRAWBORDERS, DrawBorders), 2635 | DB_DEFINE_BOOL(2215, TMT_NOETCHEDEFFECT, NoEtchedEffect), 2636 | DB_DEFINE_BOOL(2216, TMT_TEXTAPPLYOVERLAY, TextApplyOverlay), 2637 | DB_DEFINE_BOOL(2217, TMT_TEXTGLOW, TextGlow), 2638 | DB_DEFINE_BOOL(2218, TMT_TEXTITALIC, TextItalic), 2639 | DB_DEFINE_BOOL(2219, TMT_COMPOSITEDOPAQUE, CompositedOpaque), 2640 | DB_DEFINE_BOOL(2220, TMT_LOCALIZEDMIRRORIMAGE, LocalizedMirrorImage), 2641 | DB_DEFINE_BOOL(5001, TMT_USERPICTURE, UserPicture), 2642 | DB_DEFINE_BOOL(7001, TMT_SCALEDBACKGROUND, ScaledBackground), 2643 | 2644 | DB_DEFINE_COLOR( 204, TMT_COLOR, Color), 2645 | DB_DEFINE_COLOR(1601, TMT_SCROLLBAR, ScrollBar), 2646 | DB_DEFINE_COLOR(1602, TMT_BACKGROUND, Background), 2647 | DB_DEFINE_COLOR(1603, TMT_ACTIVECAPTION, ActiveCaption), 2648 | DB_DEFINE_COLOR(1604, TMT_INACTIVECAPTION, InactiveCaption), 2649 | DB_DEFINE_COLOR(1605, TMT_MENU, Menu), 2650 | DB_DEFINE_COLOR(1606, TMT_WINDOW, Window), 2651 | DB_DEFINE_COLOR(1607, TMT_WINDOWFRAME, WindowFrame), 2652 | DB_DEFINE_COLOR(1608, TMT_MENUTEXT, MenuText), 2653 | DB_DEFINE_COLOR(1609, TMT_WINDOWTEXT, WindowText), 2654 | DB_DEFINE_COLOR(1610, TMT_CAPTIONTEXT, CaptionText), 2655 | DB_DEFINE_COLOR(1611, TMT_ACTIVEBORDER, ActiveBorder), 2656 | DB_DEFINE_COLOR(1612, TMT_INACTIVEBORDER, InactiveBorder), 2657 | DB_DEFINE_COLOR(1613, TMT_APPWORKSPACE, AppWorkspace), 2658 | DB_DEFINE_COLOR(1614, TMT_HIGHLIGHT, Highlight), 2659 | DB_DEFINE_COLOR(1615, TMT_HIGHLIGHTTEXT, HighlightText), 2660 | DB_DEFINE_COLOR(1616, TMT_BTNFACE, BtnFace), 2661 | DB_DEFINE_COLOR(1617, TMT_BTNSHADOW, BtnShadow), 2662 | DB_DEFINE_COLOR(1618, TMT_GRAYTEXT, GrayText), 2663 | DB_DEFINE_COLOR(1619, TMT_BTNTEXT, BtnText), 2664 | DB_DEFINE_COLOR(1620, TMT_INACTIVECAPTIONTEXT, InactiveCaptionText), 2665 | DB_DEFINE_COLOR(1621, TMT_BTNHIGHLIGHT, BtnHighlight), 2666 | DB_DEFINE_COLOR(1622, TMT_DKSHADOW3D, DkShadow3D), 2667 | DB_DEFINE_COLOR(1623, TMT_LIGHT3D, Light3D), 2668 | DB_DEFINE_COLOR(1624, TMT_INFOTEXT, InfoText), 2669 | DB_DEFINE_COLOR(1625, TMT_INFOBK, InfoBk), 2670 | DB_DEFINE_COLOR(1626, TMT_BUTTONALTERNATEFACE, ButtonAlternateFace), 2671 | DB_DEFINE_COLOR(1627, TMT_HOTTRACKING, HotTracking), 2672 | DB_DEFINE_COLOR(1628, TMT_GRADIENTACTIVECAPTION, GradientActiveCaption), 2673 | DB_DEFINE_COLOR(1629, TMT_GRADIENTINACTIVECAPTION, GradientInactiveCaption), 2674 | DB_DEFINE_COLOR(1630, TMT_MENUHILIGHT, MenuHilight), 2675 | DB_DEFINE_COLOR(1631, TMT_MENUBAR, MenuBar), 2676 | DB_DEFINE_COLOR(2001, TMT_FROMCOLOR1, FromColor1), 2677 | DB_DEFINE_COLOR(2002, TMT_FROMCOLOR2, FromColor2), 2678 | DB_DEFINE_COLOR(2003, TMT_FROMCOLOR3, FromColor3), 2679 | DB_DEFINE_COLOR(2004, TMT_FROMCOLOR4, FromColor4), 2680 | DB_DEFINE_COLOR(2005, TMT_FROMCOLOR5, FromColor5), 2681 | DB_DEFINE_COLOR(3801, TMT_BORDERCOLOR, BorderColor), 2682 | DB_DEFINE_COLOR(3802, TMT_FILLCOLOR, FillColor), 2683 | DB_DEFINE_COLOR(3803, TMT_TEXTCOLOR, TextColor), 2684 | DB_DEFINE_COLOR(3804, TMT_EDGELIGHTCOLOR, EdgeLightColor), 2685 | DB_DEFINE_COLOR(3805, TMT_EDGEHIGHLIGHTCOLOR, EdgeHighlightColor), 2686 | DB_DEFINE_COLOR(3806, TMT_EDGESHADOWCOLOR, EdgeShadowColor), 2687 | DB_DEFINE_COLOR(3807, TMT_EDGEDKSHADOWCOLOR, EdgeDkShadowColor), 2688 | DB_DEFINE_COLOR(3808, TMT_EDGEFILLCOLOR, EdgeFillColor), 2689 | DB_DEFINE_COLOR(3809, TMT_TRANSPARENTCOLOR, TrnasparentColor), 2690 | DB_DEFINE_COLOR(3810, TMT_GRADIENTCOLOR1, GradientColor1), 2691 | DB_DEFINE_COLOR(3811, TMT_GRADIENTCOLOR2, GradientColor2), 2692 | DB_DEFINE_COLOR(3812, TMT_GRADIENTCOLOR3, GradientColor3), 2693 | DB_DEFINE_COLOR(3813, TMT_GRADIENTCOLOR4, GradientColor4), 2694 | DB_DEFINE_COLOR(3814, TMT_GRADIENTCOLOR5, GradientColor5), 2695 | DB_DEFINE_COLOR(3815, TMT_SHADOWCOLOR, ShadowColor), 2696 | DB_DEFINE_COLOR(3816, TMT_GLOWCOLOR, GlowColor), 2697 | DB_DEFINE_COLOR(3817, TMT_TEXTBORDERCOLOR, TextBorderColor), 2698 | DB_DEFINE_COLOR(3818, TMT_TEXTSHADOWCOLOR, TextShadowColor), 2699 | DB_DEFINE_COLOR(3819, TMT_GLYPHTEXTCOLOR, GlyphTextColor), 2700 | DB_DEFINE_COLOR(3820, TMT_GLYPHTRANSPARENTCOLOR, GlyphTransparentColor), 2701 | DB_DEFINE_COLOR(3821, TMT_FILLCOLORHINT, FillColorHint), 2702 | DB_DEFINE_COLOR(3822, TMT_BORDERCOLORHINT, BorderColorHint), 2703 | DB_DEFINE_COLOR(3823, TMT_ACCENTCOLORHINT, AccentColorHint), 2704 | DB_DEFINE_COLOR(3824, TMT_TEXTCOLORHINT, TextColorHint), 2705 | DB_DEFINE_COLOR(3825, TMT_HEADING1TEXTCOLOR, Heading1TextColor), 2706 | DB_DEFINE_COLOR(3826, TMT_HEADING2TEXTCOLOR, Heading2TextColor), 2707 | DB_DEFINE_COLOR(3827, TMT_BODYTEXTCOLOR, BodyTextColor), 2708 | DB_DEFINE_COLOR(5003, TMT_BLENDCOLOR, BlendColor), 2709 | 2710 | DB_DEFINE_MARGINS( 205, TMT_MARGINS, Margins), 2711 | DB_DEFINE_MARGINS(3601, TMT_SIZINGMARGINS, SizingMargins), 2712 | DB_DEFINE_MARGINS(3602, TMT_CONTENTMARGINS, ContentMargins), 2713 | DB_DEFINE_MARGINS(3603, TMT_CAPTIONMARGINS, CaptionMargins), 2714 | 2715 | DB_DEFINE_FILENAME( 206, TMT_FILENAME, FileName), 2716 | DB_DEFINE_FILENAME(3001, TMT_IMAGEFILE, ImageFile), 2717 | DB_DEFINE_FILENAME(3002, TMT_IMAGEFILE1, ImageFile1), 2718 | DB_DEFINE_FILENAME(3003, TMT_IMAGEFILE2, ImageFile2), 2719 | DB_DEFINE_FILENAME(3004, TMT_IMAGEFILE3, ImageFile3), 2720 | DB_DEFINE_FILENAME(3005, TMT_IMAGEFILE4, ImageFile4), 2721 | DB_DEFINE_FILENAME(3006, TMT_IMAGEFILE5, ImageFile5), 2722 | DB_DEFINE_FILENAME(3008, TMT_GLYPHIMAGEFILE, GlyphImageFile), 2723 | 2724 | DB_DEFINE_SIZE(207, TMT_SIZE, Size), 2725 | DB_DEFINE_SIZE(TS_MIN, TS_MIN, MinSize), 2726 | DB_DEFINE_SIZE(TS_TRUE, TS_TRUE, TrueSize), 2727 | DB_DEFINE_SIZE(TS_DRAW, TS_DRAW, DrawSize), 2728 | 2729 | DB_DEFINE_POSITION( 208, TMT_POSITION, Position), 2730 | DB_DEFINE_POSITION(3401, TMT_OFFSET, Offset), 2731 | DB_DEFINE_POSITION(3402, TMT_TEXTSHADOWOFFSET, TextShadowOffset), 2732 | DB_DEFINE_POSITION(3403, TMT_MINSIZE, MinSize), 2733 | DB_DEFINE_POSITION(3404, TMT_MINSIZE1, MinSize1), 2734 | DB_DEFINE_POSITION(3405, TMT_MINSIZE2, MinSize2), 2735 | DB_DEFINE_POSITION(3406, TMT_MINSIZE3, MinSize3), 2736 | DB_DEFINE_POSITION(3407, TMT_MINSIZE4, MinSize4), 2737 | DB_DEFINE_POSITION(3408, TMT_MINSIZE5, MinSize5), 2738 | DB_DEFINE_POSITION(3409, TMT_NORMALSIZE, NormalSize), 2739 | 2740 | DB_DEFINE_RECT( 209, TMT_RECT, Rect), 2741 | DB_DEFINE_RECT(5002, TMT_DEFAULTPANESIZE, DefaultPaneSize), 2742 | DB_DEFINE_RECT(5004, TMT_CUSTOMSPLITRECT, CustomSplitRect), 2743 | DB_DEFINE_RECT(5005, TMT_ANIMATIONBUTTONRECT, AnimationButtonRect), 2744 | DB_DEFINE_RECT(8002, TMT_ATLASRECT, AtlasRect), 2745 | 2746 | 2747 | DB_DEFINE_FONT( 210, TMT_FONT, Font), 2748 | DB_DEFINE_FONT( 801, TMT_CAPTIONFONT, CaptionFont), 2749 | DB_DEFINE_FONT( 802, TMT_SMALLCAPTIONFONT, SmallCaptionFont), 2750 | DB_DEFINE_FONT( 803, TMT_MENUFONT, MenuFont), 2751 | DB_DEFINE_FONT( 804, TMT_STATUSFONT, StatusFont), 2752 | DB_DEFINE_FONT( 805, TMT_MSGBOXFONT, MsgBoxFont), 2753 | DB_DEFINE_FONT( 806, TMT_ICONTITLEFONT, IconTitleFont), 2754 | DB_DEFINE_FONT( 807, TMT_HEADING1FONT, Heading1Font), 2755 | DB_DEFINE_FONT( 808, TMT_HEADING2FONT, Heading2Font), 2756 | DB_DEFINE_FONT( 809, TMT_BODYFONT, BodyFont), 2757 | DB_DEFINE_FONT(2601, TMT_GLYPHFONT, GlyphFont), 2758 | 2759 | DB_DEFINE_INTLIST(6000, TMT_TRANSITIONDURATIONS, TransitionDuration), 2760 | 2761 | DB_DEFINE_DISKSTREAM(213, TMT_DISKSTREAM, DiskStream), 2762 | 2763 | DB_DEFINE_STREAM(214, TMT_STREAM, Stream) 2764 | }; 2765 | 2766 | 2767 | const db_prop_t* db_props = db_props_helper; 2768 | int db_n_props = TE_ARRAY_SIZE(db_props_helper); 2769 | --------------------------------------------------------------------------------