//--------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. // // File : uxthemep.h // Version: 1.0 //--------------------------------------------------------------------------- #ifndef _UXTHEMEP_H_ #define _UXTHEMEP_H_ //--------------------------------------------------------------------------- #include //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- // The following routines are provided for use by Theme Selection UI. //--------------------------------------------------------------------------- //---- bits returned by QueryThemeServices() ---- #define QTS_AVAILABLE (1 << 0) // services are available #define QTS_RUNNING (1 << 1) // services are running //--------------------------------------------------------------------------- // QueryThemeServices() // - returns flags about theme services (see above) //--------------------------------------------------------------------------- THEMEAPI_(DWORD) QueryThemeServices(); //--------------------------------------------------------------------------- typedef HANDLE HTHEMEFILE; // handle to a loaded theme file //--------------------------------------------------------------------------- // OpenThemeFile() - Load specified theme into memory (doesn't apply it) // // pszThemePath - full path of .msstyles file to load // // pszColorScheme - (optional) name of theme color scheme to load // // pszSize - (optional) name of theme size to load // // phThemeFile - if a theme is successfully opened, this handle // is set to a non-NULL value and holds a ref-count // on the theme to keep it in loaded in memory. // // fGlobalTheme - FALSE if it's a preview, TRUE if the theme is intended // to be made permanent for the user //--------------------------------------------------------------------------- THEMEAPI OpenThemeFile(LPCWSTR pszThemePath, OPTIONAL LPCWSTR pszColorParam, OPTIONAL LPCWSTR pszSizeParam, OUT HTHEMEFILE *phThemeFile, BOOL fGlobalTheme); //--------------------------------------------------------------------------- // CloseThemeFile() - decrements the ref-count for the theme identified // by the hThemeFile handle // // hThemeFile - open handle to the loaded theme file //--------------------------------------------------------------------------- THEMEAPI CloseThemeFile(HTHEMEFILE hThemeFile); //--------------------------------------------------------------------------- //--- WM_THEMECHANGED msg parameters (internal use only) ---- //--- "wParam" is the "change number" ---- //---- lParam bits ---- #define WTC_THEMEACTIVE (1 << 0) // new theme is now active #define WTC_CUSTOMTHEME (1 << 1) // this msg for custom-themed apps //--------------------------------------------------------------------------- //---- option flags for ApplyTheme() ---- #define AT_LOAD_SYSMETRICS (1 << 0) // apply the theme's metrics w/theme // or default classic metrics when // turning themes off. #define AT_PROCESS (1 << 1) // apply to current process only #define AT_EXCLUDE (1 << 2) // all but the specified process/window #define AT_CACHETHEME (1 << 3) // cache this theme file, if applied #define AT_NOREGUPDATE (1 << 4) // don't update the CU registry for theme info #define AT_SYNC_LOADMETRICS (1 << 5) // load system metrics on calling thread //---- below flags currently not supported ---- #define AT_DISABLE_FRAME_THEMING (1 << 10) #define AT_DISABLE_DIALOG_THEMING (1 << 11) //--------------------------------------------------------------------------- // ApplyTheme() - Apply (or remove) a loaded theme file globally // or to specified apps/windows. // // Note that when a theme is applied globally // (hwndTarget is NULL), the theme services manager // will hold a refcount on the theme file. This // means that the caller can close his HTHEMEFILE // handle after the ApplyTheme() call. // // When the global theme is removed, the theme // services manager will drop is refcount. // // hThemeFile - (optional)handle to the loaded theme file. // if NULL then any theme on target app/windows // will be removed. // // dwApplyFlags - options for applying theme (see above) // // hwndTarget - (optional) only theme this window //--------------------------------------------------------------------------- THEMEAPI ApplyTheme(OPTIONAL HTHEMEFILE hThemeFile, DWORD dwApplyFlags, OPTIONAL HWND hwndTarget); //--------------------------------------------------------------------------- // RegisterDefaultTheme() // - registers the specified theme as the default // for all users on the system. // // pszThemeFileName - the name of the theme file (NULL = no theme) // // fOverride - if TRUE, will override current default theme //--------------------------------------------------------------------------- THEMEAPI RegisterDefaultTheme(LPCWSTR pszFileName, BOOL fOverride); //--------------------------------------------------------------------------- // THEMECALLBACK is a enum describing the type of callback being done //--------------------------------------------------------------------------- typedef enum THEMECALLBACK { TCB_THEMENAME, // theme name enumeration TCB_COLORSCHEME, // color scheme enumeration TCB_SIZENAME, // size name enumeration TCB_SUBSTTABLE, // substitution table enumeration TCB_CDFILENAME, // classdata file name enumeration TCB_CDFILECOMBO, // classdata file color/size combinations TCB_FILENAME, // parsed a filename TCB_DOCPROPERTY, // parsed a standard doc property TCB_NEEDSUBST, // callback to get a substituted symbol TCB_MINCOLORDEPTH, // parsed the min color depth //---- localizable property callbacks ---- TCB_FONT, // parsed a font string TCB_MIRRORIMAGE, // parsed the MirrorImage property TCB_LOCALIZABLE_RECT, // parsed a RECT property that needs to be localizable }; //--------------------------------------------------------------------------- typedef struct { WCHAR szName[MAX_PATH+1]; WCHAR szDisplayName[MAX_PATH+1]; WCHAR szToolTip[MAX_PATH+1]; } THEMENAMEINFO; //--------------------------------------------------------------------------- // THEMEENUMPROC() - callback used by the theme enum/parsing functions. // the return value is used to continue or abort // the enumeration. // // tcbType - callback type being made // pszName - simple name of the item being enumerated // pszName2 - varies by callback type // pszName3 - varies by callback type // iIndex - index number associated with some items // lParam - callback param supplied by caller //--------------------------------------------------------------------------- typedef BOOL (CALLBACK* THEMEENUMPROC)(enum THEMECALLBACK tcbType, LPCWSTR pszName, OPTIONAL LPCWSTR pszName2, OPTIONAL LPCWSTR pszName3, OPTIONAL int iIndex, LPARAM lParam); //--------------------------------------------------------------------------- // EnumThemes() - calls the callback function "lpEnumFunc" with each // theme. During the callback, the filename, // Display name, and tooltip string for each theme // are returned. // // pszThemeRoot - the theme root directory; each theme DLL found in // a separate subdir immediately under the theme root // dir is enumerated. The root name of the DLL must // match its containing subdir name // // lpEnumFunc - ptr to the caller's callback function which will // be called for each theme enumerated // // lParam - caller's callback parameter (will be passed to // lpEnumFunc()) //--------------------------------------------------------------------------- THEMEAPI EnumThemes(LPCWSTR pszThemeRoot, THEMEENUMPROC lpEnumFunc, LPARAM lParam); //--------------------------------------------------------------------------- // EnumThemeSizes() - support direct enumeration of all available theme // sizes. // // pszThemeName - is the name of the theme file. // pszColorScheme - (optional) only sizes for this color are enum-ed // dwSizeIndex - 0-relative index of the size being queryed // ptn - ptr to struct to receive name strings //--------------------------------------------------------------------------- THEMEAPI EnumThemeSizes(LPCWSTR pszThemeName, OPTIONAL LPCWSTR pszColorScheme, DWORD dwSizeIndex, OUT THEMENAMEINFO *ptn); //--------------------------------------------------------------------------- // EnumThemeColors() - support direct enumeration of all available theme // color schemes. // // pszThemeName - name of the theme file. // pszSizeName - (optional) only colors for this size are enum-ed // dwColorIndex - 0-relative index of the color being queryed // ptn - ptr to struct to receive name strings //--------------------------------------------------------------------------- THEMEAPI EnumThemeColors(LPCWSTR pszThemeName, OPTIONAL LPCWSTR pszSizeName, DWORD dwColorIndex, OUT THEMENAMEINFO *ptn); //--------------------------------------------------------------------------- // GetThemeDefaults() - returns the default Color name and default Size // name for the specified theme file // // pszThemeName - name of the theme file // // pszDefaultColor - buffer to receive the default color name // (the canonical name, not the display version) // cchMaxColorChars - max chars that pszDefaultColor can contain // // pszDefaultSize - buffer to receive the default size name // (the canonical name, not the display version) // cchMaxSizeChars - max chars that pszDefaultSize can contain //--------------------------------------------------------------------------- THEMEAPI GetThemeDefaults(LPCWSTR pszThemeName, OUT OPTIONAL LPWSTR pszDefaultColor, int cchMaxColorChars, OUT OPTIONAL LPWSTR pszDefaultSize, int cchMaxSizeChars); //--------------------------------------------------------------------------- #define PTF_CONTAINER_PARSE 0x0001 // parse as a "themes.ini" file #define PTF_CLASSDATA_PARSE 0x0002 // parse as a "bigred.ini" classdata file #define PTF_CALLBACK_COLORSECTION 0x0004 // callback on all [colorscheme.xxx] sections #define PTF_CALLBACK_SIZESECTION 0x0008 // callback on all [size.xxx] sections #define PTF_CALLBACK_FILESECTION 0x0010 // callback on all [file.xxx] sections #define PTF_CALLBACK_FILENAMES 0x0020 // callback on all "filename=" properties #define PTF_CALLBACK_LOCALIZATIONS 0x0040 // callback on all localizable properties #define PTF_CALLBACK_DOCPROPERTIES 0x0080 // callback on all standard properties in [doc] section #define PTF_QUERY_DOCPROPERTY 0x0100 // query for value of specified property (internal) #define PTF_CALLBACK_SUBSTTABLE 0x0400 // callback on all [subst.xxx] sections #define PTF_CALLBACK_SUBSTSYMBOLS 0x0800 // callback on a substituted symbol (##) #define PTF_CALLBACK_MINCOLORDEPTH 0x1000 // callback on "MinColorDepth=" //--------------------------------------------------------------------------- // ParseThemeIniFile() - Parse the "themes.inc" file specified by // "pszFileName". // pzFileName - name of the theme.inc file to parse // dwParseFlags - flags that control parsing & callback options // pfnCallBack - ptr to caller-supplied callback function // lparam - caller's callback param //--------------------------------------------------------------------------- THEMEAPI ParseThemeIniFile(LPCWSTR pszFileName, DWORD dwParseFlags, OPTIONAL THEMEENUMPROC pFnCallBack, OPTIONAL LPARAM lparam); //--------------------------------------------------------------------------- #define THEME_PARSING_ERROR(hr) (SCODE_CODE(hr) == ERROR_UNKNOWN_PROPERTY) typedef struct _PARSE_ERROR_INFO { DWORD dwSize; // of this structure //---- last parse error info ---- DWORD dwParseErrCode; // error code from last error WCHAR szMsg[2*MAX_PATH]; // value of first param for msg WCHAR szFileName[MAX_PATH]; // associated source filename WCHAR szSourceLine[MAX_PATH]; // source line int iLineNum; // source line number } PARSE_ERROR_INFO, *PPARSE_ERROR_INFO; //--------------------------------------------------------------------------- // GetThemeParseErrorInfo() // - fill in the PARSE_ERROR_CONTEXT structure // with needed information about the last theme API // parse error. // // pInfo - ptr to the PARSE_ERROR_INFO to be filled //--------------------------------------------------------------------------- THEMEAPI GetThemeParseErrorInfo(OUT PARSE_ERROR_INFO *pInfo); //--------------------------------------------------------------------------- // resource base numbers for localizable string tables in a .msstyles file //--------------------------------------------------------------------------- #define RES_BASENUM_COLORDISPLAYS 1000 #define RES_BASENUM_COLORTOOLTIPS 2000 #define RES_BASENUM_SIZEDISPLAYS 3000 #define RES_BASENUM_SIZETOOLTIPS 4000 #define RES_BASENUM_DOCPROPERTIES 5000 // in order shown in TmSchema.h #define RES_BASENUM_PROPVALUEPAIRS 6000 // property names & localizable values //--------------------------------------------------------------------------- // DrawNCPreview() - Previews the theme for the NC area of a window // // hdc - HDC for preview to be draw into // prc - RECT for preview // //--------------------------------------------------------------------------- #define NCPREV_INACTIVEWINDOW 0x00000001 #define NCPREV_ACTIVEWINDOW 0x00000002 #define NCPREV_MESSAGEBOX 0x00000004 #define NCPREV_RTL 0x00000008 THEMEAPI DrawNCPreview(HDC hdc, DWORD dwFlags, LPRECT prc, LPCWSTR pszVSPath, LPCWSTR pszVSColor, LPCWSTR pszVSSize, NONCLIENTMETRICS* pncm, COLORREF* prgb); //--------------------------------------------------------------------------- // DumpLoadedThemeToTextFile() // - (for internal testing) dumps the contents of the // loaded theme file to the specified text file // // hThemeFile - the handle of the loaded theme file // // pszTextFile - path of the text file to create & write to // // fPacked - TRUE to dump packed objects; FALSE for normal // properties // // fFullInfo - includes sizes, offsets, paths, etc. Use FALSE // for info that will be DIFF-ed across builds/machines //--------------------------------------------------------------------------- THEMEAPI DumpLoadedThemeToTextFile(HTHEMEFILE hThemeFile, LPCWSTR pszTextFile, BOOL fPacked, BOOL fFullInfo); #ifdef __cplusplus class CDrawBase; // forward class CTextDraw; // forward //--------------------------------------------------------------------------- // CreateThemeDataFromObjects() // - creates a theme handle from a CBorderFill, // CImageFile, and/or CTextDraw object. At lease one // non-NULL ptr must be passed (either or both). // // pDrawObj - (optional) ptr to an object derived from CDrawBase // NOTE: if pDrawObj is a CImageFile ptr and its // "_pImageData" contains any alpha channel bitmaps, // the bits in those bitmaps will be "pre-multiplied" // for alpha blending. // // pTextObj - (optional) ptr to a CTextDraw object // // dwOtdFlags - theme override flags (see OpenThemeDataEx()) //--------------------------------------------------------------------------- THEMEAPI_(HTHEME) CreateThemeDataFromObjects(OPTIONAL CDrawBase *pDrawObj, OPTIONAL CTextDraw *pTextObj, DWORD dwOtdFlags); #endif //--------------------------------------------------------------------------- // OpenThemeDataFromFile() // - Open the theme data for the specified loaded theme // file and semi-colon separated list of class names. // OpenThemeDataFromFile() will try each class name, // one at a time, and use the first matching theme info // found. If none match, "NULL" is returned. // // Note: normal controls should NOT use this API; // they should use "OpenThemeData()" (which uses the // current global or app theme). // // hLoadedThemeFile - handle to the loaded theme file. // // hwnd - (optional) hwnd to base the HTHEME on // // pszClassList - (optional) class name (or list of names) to match // to theme data section; if NULL, will get match // to [globals] section. // // fClient - TRUE if theming a client window with returned // HTHEME. //--------------------------------------------------------------------------- THEMEAPI_(HTHEME) OpenThemeDataFromFile(HTHEMEFILE hLoadedThemeFile, OPTIONAL HWND hwnd, OPTIONAL LPCWSTR pszClassList, BOOL fClient); //--------------------------------------------------------------------------- // OpenThemeFileFromData() // - Open the theme file corresponding to the HTHEME. // // hTheme - handle to the theme data from OpenThemeData(). // // phThemeFile - ptr to return HTHEMEFILE to. //--------------------------------------------------------------------------- THEMEAPI OpenThemeFileFromData(HTHEME hTheme, HTHEMEFILE *phThemeFile); //--------------------------------------------------------------------------- // GetThemeSysSize96() - Get the value of the specified System size metric. // (original value authored for 96 dpi) // // hTheme - the theme data handle (required). Will return // size from [SysMetrics] section of theme. // // iSizeId - only the following sizes are supported: // // SM_CXBORDER (border width) // SM_CXVSCROLL (scrollbar width) // SM_CYHSCROLL (scrollbar height) // SM_CXSIZE (caption width) // SM_CYSIZE (caption height) // SM_CXSMSIZE (small caption width) // SM_CYSMSIZE (small caption height) // SM_CXMENUSIZE (menubar width) // SM_CYMENUSIZE (menubar height) //--------------------------------------------------------------------------- THEMEAPI_(int) GetThemeSysSize96(HTHEME hTheme, int iSizeId); //--------------------------------------------------------------------------- // GetThemeSysFont96() - Get the LOGFONT for the specified System font. // (original value authored for 96 dpi) // // hTheme - the theme data handle (required). Will return // size from [SysMetrics] section of theme. // // iFontId - the TMT_XXX font number (first font // is TMT_CAPTIONFONT) // // plf - ptr to LOGFONT to receive the font value. //--------------------------------------------------------------------------- THEMEAPI GetThemeSysFont96(HTHEME hTheme, int iFontId, OUT LOGFONT *plf); //--------------------------------------------------------------------------- // RefreshThemeForTS() // - turn themes on/off for current Terminal Server user //--------------------------------------------------------------------------- THEMEAPI RefreshThemeForTS(); //--------------------------------------------------------------------------- //---- flag bits for OpenThemeDataEx() ---- #define OTD_FORCE_RECT_SIZING 0x0001 // make all parts size to rect #define OTD_NONCLIENT 0x0002 // set if hTheme to be used for nonclient area //--------------------------------------------------------------------------- // OpenThemeDataEx - Open the theme data for the specified HWND and // semi-colon separated list of class names. // // OpenThemeData() will try each class name, one at // a time, and use the first matching theme info // found. If a match is found, a theme handle // to the data is returned. If no match is found, // a "NULL" handle is returned. // // When the window is destroyed or a WM_THEMECHANGED // msg is received, "CloseThemeData()" should be // called to close the theme handle. // // hwnd - window handle of the control/window to be themed // // pszClassList - class name (or list of names) to match to theme data // section. if the list contains more than one name, // the names are tested one at a time for a match. // If a match is found, OpenThemeData() returns a // theme handle associated with the matching class. // This param is a list (instead of just a single // class name) to provide the class an opportunity // to get the "best" match between the class and // the current theme. For example, a button might // pass L"OkButton, Button" if its ID=ID_OK. If // the current theme has an entry for OkButton, // that will be used. Otherwise, we fall back on // the normal Button entry. // // dwFlags - allows certain overrides of std features // (see OTD_XXX defines above) //--------------------------------------------------------------------------- THEMEAPI_(HTHEME) OpenThemeDataEx(HWND hwnd, LPCWSTR pszClassList, DWORD dwFlags); THEMEAPI CheckThemeSignature (LPCWSTR pszName); //--------------------------------------------------------------------------- // ClassicGetSystemMetrics( int iMetric ); // // ClassicSystemParametersInfoA( IN UINT uiAction, IN UINT uiParam, // IN OUT PVOID pvParam, IN UINT fWinIni); // ClassicSystemParametersInfoW( IN UINT uiAction, IN UINT uiParam, // IN OUT PVOID pvParam, IN UINT fWinIni); // ClassicAdjustWindowRectEx( IN LPRECT prcWnd, IN DWORD dwStyle, IN BOOL fMenu, IN DWORD dwExStyle ); // // These exports correspond to their Win32 API counterparts and ensure that // the classic visual style metrics are retrieved. Theme hooks are shunted. //--------------------------------------------------------------------------- THEMEAPI_(int) ClassicGetSystemMetrics( int iMetric ); THEMEAPI_(BOOL) ClassicSystemParametersInfoA( UINT uiAction, UINT uiParam, IN OUT PVOID pvParam, UINT fWinIni); THEMEAPI_(BOOL) ClassicSystemParametersInfoW( UINT uiAction, UINT uiParam, IN OUT PVOID pvParam, UINT fWinIni); THEMEAPI_(BOOL) ClassicAdjustWindowRectEx( LPRECT prcWnd, DWORD dwStyle, BOOL fMenu, DWORD dwExStyle ); #ifdef UNICODE #define ClassicSystemParametersInfo ClassicSystemParametersInfoW #else UNICODE #define ClassicSystemParametersInfo ClassicSystemParametersInfoA #endif UNICODE //--------------------------------------------------------------------------- #define PACKTHEM_VERSION 3 // latest change: localizable properties //--------------------------------------------------------------------------- #endif // _UXTHEMEP_H_ //---------------------------------------------------------------------------