#pragma once | |
//------------------------------------------------------------------------------------------------- | |
// <copyright file="thmutil.h" company="Outercurve Foundation"> | |
// Copyright (c) 2004, Outercurve Foundation. | |
// This software is released under Microsoft Reciprocal License (MS-RL). | |
// The license and further copyright text can be found in the file | |
// LICENSE.TXT at the root directory of the distribution. | |
// </copyright> | |
// | |
// <summary> | |
// Theme helper functions. | |
// </summary> | |
//------------------------------------------------------------------------------------------------- | |
#ifdef __cplusplus | |
extern "C" { | |
#endif | |
#define ReleaseTheme(p) if (p) { ThemeFree(p); p = NULL; } | |
enum THEME_CONTROL_DATA | |
{ | |
THEME_CONTROL_DATA_HOVER = 1, | |
}; | |
enum THEME_CONTROL_TYPE | |
{ | |
THEME_CONTROL_TYPE_UNKNOWN, | |
THEME_CONTROL_TYPE_BILLBOARD, | |
THEME_CONTROL_TYPE_BUTTON, | |
THEME_CONTROL_TYPE_CHECKBOX, | |
THEME_CONTROL_TYPE_EDITBOX, | |
THEME_CONTROL_TYPE_HYPERLINK, | |
THEME_CONTROL_TYPE_HYPERTEXT, | |
THEME_CONTROL_TYPE_IMAGE, | |
THEME_CONTROL_TYPE_PROGRESSBAR, | |
THEME_CONTROL_TYPE_RICHEDIT, | |
THEME_CONTROL_TYPE_STATIC, | |
THEME_CONTROL_TYPE_TEXT, | |
THEME_CONTROL_TYPE_LISTVIEW, | |
THEME_CONTROL_TYPE_TREEVIEW, | |
THEME_CONTROL_TYPE_TAB, | |
}; | |
struct THEME_BILLBOARD | |
{ | |
HBITMAP hImage; | |
LPWSTR sczUrl; | |
}; | |
struct THEME_COLUMN | |
{ | |
LPWSTR pszName; | |
UINT uStringId; | |
int nWidth; | |
}; | |
struct THEME_TAB | |
{ | |
LPWSTR pszName; | |
UINT uStringId; | |
}; | |
// THEME_ASSIGN_CONTROL_ID - Used to apply a specific id to a named control (usually | |
// to set the WM_COMMAND). | |
struct THEME_ASSIGN_CONTROL_ID | |
{ | |
WORD wId; // id to apply to control | |
LPCWSTR wzName; // name of control to match | |
}; | |
const DWORD THEME_FIRST_ASSIGN_CONTROL_ID = 1024; // Recommended first control id to be assigned. | |
struct THEME_CONTROL | |
{ | |
THEME_CONTROL_TYPE type; | |
WORD wId; | |
WORD wPageId; | |
LPWSTR sczName; // optional name for control, only used to apply control id. | |
LPWSTR sczText; | |
int nX; | |
int nY; | |
int nHeight; | |
int nWidth; | |
int nSourceX; | |
int nSourceY; | |
UINT uStringId; | |
HBITMAP hImage; | |
// Don't free these; it's just a handle to the central image lists stored in THEME. The handle is freed once, there. | |
HIMAGELIST rghImageList[4]; | |
DWORD dwStyle; | |
DWORD dwExtendedStyle; | |
DWORD dwInternalStyle; | |
DWORD dwFontId; | |
DWORD dwFontHoverId; | |
DWORD dwFontSelectedId; | |
// Used by billboard controls | |
THEME_BILLBOARD* ptbBillboards; | |
DWORD cBillboards; | |
WORD wBillboardInterval; | |
WORD wBillboardUrls; | |
BOOL fBillboardLoops; | |
// Used by listview controls | |
THEME_COLUMN *ptcColumns; | |
DWORD cColumns; | |
// Used by tab controls | |
THEME_TAB *pttTabs; | |
DWORD cTabs; | |
// state variables that should be ignored | |
HWND hWnd; | |
DWORD dwData; // type specific data | |
}; | |
struct THEME_IMAGELIST | |
{ | |
LPWSTR sczName; | |
HIMAGELIST hImageList; | |
}; | |
struct THEME_PAGE | |
{ | |
WORD wId; | |
LPWSTR sczName; | |
DWORD cControlIndices; | |
DWORD* rgdwControlIndices; | |
}; | |
struct THEME_FONT | |
{ | |
HFONT hFont; | |
COLORREF crForeground; | |
HBRUSH hForeground; | |
COLORREF crBackground; | |
HBRUSH hBackground; | |
}; | |
struct THEME | |
{ | |
WORD wId; | |
DWORD dwStyle; | |
DWORD dwFontId; | |
HANDLE hIcon; | |
LPWSTR sczCaption; | |
int nHeight; | |
int nWidth; | |
int nSourceX; | |
int nSourceY; | |
UINT uStringId; | |
HBITMAP hImage; | |
DWORD cFonts; | |
THEME_FONT* rgFonts; | |
DWORD cPages; | |
THEME_PAGE* rgPages; | |
DWORD cImageLists; | |
THEME_IMAGELIST* rgImageLists; | |
DWORD cControls; | |
THEME_CONTROL* rgControls; | |
// state variables that should be ignored | |
HWND hwndParent; // parent for loaded controls | |
HWND hwndHover; // current hwnd hovered over | |
}; | |
/******************************************************************** | |
ThemeInitialize - initialized theme management. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeInitialize( | |
__in_opt HMODULE hModule | |
); | |
/******************************************************************** | |
ThemeUninitialize - unitialize theme management. | |
*******************************************************************/ | |
DAPI_(void) ThemeUninitialize(); | |
/******************************************************************** | |
ThemeLoadFromFile - loads a theme from a loose file. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeLoadFromFile( | |
__in_z LPCWSTR wzThemeFile, | |
__out THEME** ppTheme | |
); | |
/******************************************************************** | |
ThemeLoadFromResource - loads a theme from a module's data resource. | |
NOTE: The resource data must be UTF-8 encoded. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeLoadFromResource( | |
__in_opt HMODULE hModule, | |
__in_z LPCSTR szResource, | |
__out THEME** ppTheme | |
); | |
/******************************************************************** | |
ThemeFree - frees any memory associated with a theme. | |
*******************************************************************/ | |
DAPI_(void) ThemeFree( | |
__in THEME* pTheme | |
); | |
/******************************************************************** | |
ThemeLoadControls - creates the windows for all the theme controls. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeLoadControls( | |
__in THEME* pTheme, | |
__in HWND hwndParent, | |
__in_ecount_opt(cAssignControlIds) const THEME_ASSIGN_CONTROL_ID* rgAssignControlIds, | |
__in DWORD cAssignControlIds | |
); | |
/******************************************************************** | |
ThemeUnloadControls - resets all the theme control windows so the theme | |
controls can be reloaded. | |
*******************************************************************/ | |
DAPI_(void) ThemeUnloadControls( | |
__in THEME* pTheme | |
); | |
/******************************************************************** | |
ThemeLocalize - Localizes all of the strings in the them. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeLocalize( | |
__in THEME *pTheme, | |
__in const WIX_LOCALIZATION *pLocStringSet | |
); | |
DAPI_(HRESULT) ThemeLoadStrings( | |
__in THEME* pTheme, | |
__in HMODULE hResModule | |
); | |
/******************************************************************** | |
ThemeLoadRichEditFromFile - Attach a richedit control to a RTF file. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeLoadRichEditFromFile( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in_z LPCWSTR wzFileName, | |
__in HMODULE hModule | |
); | |
/******************************************************************** | |
ThemeLoadRichEditFromResource - Attach a richedit control to resource data. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeLoadRichEditFromResource( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in_z LPCSTR szResourceName, | |
__in HMODULE hModule | |
); | |
/******************************************************************** | |
ThemeLoadRichEditFromResourceToHWnd - Attach a richedit control (by | |
HWND) to resource data. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeLoadRichEditFromResourceToHWnd( | |
__in HWND hWnd, | |
__in_z LPCSTR szResourceName, | |
__in HMODULE hModule | |
); | |
/******************************************************************** | |
ThemeHandleKeyboardMessage - will translate the message using the active | |
accelerator table. | |
*******************************************************************/ | |
DAPI_(BOOL) ThemeHandleKeyboardMessage( | |
__in_opt THEME* pTheme, | |
__in HWND hWnd, | |
__in MSG* pMsg | |
); | |
/******************************************************************** | |
ThemeDefWindowProc - replacement for DefWindowProc() when using theme. | |
*******************************************************************/ | |
LRESULT CALLBACK ThemeDefWindowProc( | |
__in_opt THEME* pTheme, | |
__in HWND hWnd, | |
__in UINT uMsg, | |
__in WPARAM wParam, | |
__in LPARAM lParam | |
); | |
/******************************************************************** | |
ThemeGetPageIds - gets the page ids for the theme via page names. | |
*******************************************************************/ | |
DAPI_(void) ThemeGetPageIds( | |
__in const THEME* pTheme, | |
__in_ecount(cGetPages) LPCWSTR* rgwzFindNames, | |
__in_ecount(cGetPages) DWORD* rgdwPageIds, | |
__in DWORD cGetPages | |
); | |
/******************************************************************** | |
ThemeGetPage - gets a theme page by id. | |
*******************************************************************/ | |
DAPI_(THEME_PAGE*) ThemeGetPage( | |
__in const THEME* pTheme, | |
__in DWORD dwPage | |
); | |
/******************************************************************** | |
ThemeShowPage - shows or hides all of the controls in the page at one time. | |
*******************************************************************/ | |
DAPI_(void) ThemeShowPage( | |
__in THEME* pTheme, | |
__in DWORD dwPage, | |
__in int nCmdShow | |
); | |
/******************************************************************** | |
ThemeControlExists - check if a control with the specified id exists. | |
*******************************************************************/ | |
DAPI_(BOOL) ThemeControlExists( | |
__in THEME* pTheme, | |
__in DWORD dwControl | |
); | |
/******************************************************************** | |
ThemeControlEnable - enables/disables a control. | |
*******************************************************************/ | |
DAPI_(void) ThemeControlEnable( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in BOOL fEnable | |
); | |
/******************************************************************** | |
ThemeControlEnabled - returns whether a control is enabled/disabled. | |
*******************************************************************/ | |
DAPI_(BOOL) ThemeControlEnabled( | |
__in THEME* pTheme, | |
__in DWORD dwControl | |
); | |
/******************************************************************** | |
ThemeControlElevates - sets/removes the shield icon on a control. | |
*******************************************************************/ | |
DAPI_(void) ThemeControlElevates( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in BOOL fElevates | |
); | |
/******************************************************************** | |
ThemeShowControl - shows/hides a control. | |
*******************************************************************/ | |
DAPI_(void) ThemeShowControl( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in int nCmdShow | |
); | |
/******************************************************************** | |
ThemeControlVisible - returns whether a control is visible. | |
*******************************************************************/ | |
DAPI_(BOOL) ThemeControlVisible( | |
__in THEME* pTheme, | |
__in DWORD dwControl | |
); | |
DAPI_(BOOL) ThemePostControlMessage( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in UINT Msg, | |
__in WPARAM wParam, | |
__in LPARAM lParam | |
); | |
DAPI_(LRESULT) ThemeSendControlMessage( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in UINT Msg, | |
__in WPARAM wParam, | |
__in LPARAM lParam | |
); | |
/******************************************************************** | |
ThemeDrawBackground - draws the theme background. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeDrawBackground( | |
__in THEME* pTheme, | |
__in PAINTSTRUCT* pps | |
); | |
/******************************************************************** | |
ThemeDrawControl - draw an owner drawn control. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeDrawControl( | |
__in THEME* pTheme, | |
__in DRAWITEMSTRUCT* pdis | |
); | |
/******************************************************************** | |
ThemeHoverControl - mark a control as hover. | |
*******************************************************************/ | |
DAPI_(BOOL) ThemeHoverControl( | |
__in THEME* pTheme, | |
__in HWND hwndParent, | |
__in HWND hwndControl | |
); | |
/******************************************************************** | |
ThemeIsControlChecked - gets whether a control is checked. Only | |
really useful for checkbox controls. | |
*******************************************************************/ | |
DAPI_(BOOL) ThemeIsControlChecked( | |
__in THEME* pTheme, | |
__in DWORD dwControl | |
); | |
/******************************************************************** | |
ThemeSetControlColor - sets the color of text for a control. | |
*******************************************************************/ | |
DAPI_(BOOL) ThemeSetControlColor( | |
__in THEME* pTheme, | |
__in HDC hdc, | |
__in HWND hWnd, | |
__out HBRUSH* phBackgroundBrush | |
); | |
/******************************************************************** | |
ThemeStartBillboard - starts a billboard control changing images according | |
to their interval. | |
NOTE: iImage specifies the image to start on. If iImage is | |
greater than the number of images, the last image shown | |
will be the start image. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeStartBillboard( | |
__in const THEME* pTheme, | |
__in DWORD dwControl, | |
__in WORD iImage | |
); | |
/******************************************************************** | |
ThemeStopBillboard - stops a billboard control from changing images. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeStopBillboard( | |
__in const THEME* pTheme, | |
__in DWORD dwControl | |
); | |
/******************************************************************** | |
ThemeSetProgressControl - sets the current percentage complete in a | |
progress bar control. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeSetProgressControl( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in DWORD dwProgressPercentage | |
); | |
/******************************************************************** | |
ThemeSetProgressControlColor - sets the current color of a | |
progress bar control. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeSetProgressControlColor( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in DWORD dwColorIndex | |
); | |
/******************************************************************** | |
ThemeSetTextControl - sets the text of a control. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeSetTextControl( | |
__in THEME* pTheme, | |
__in DWORD dwControl, | |
__in_z LPCWSTR wzText | |
); | |
/******************************************************************** | |
ThemeGetTextControl - gets the text of a control. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeGetTextControl( | |
__in const THEME* pTheme, | |
__in DWORD dwControl, | |
__out LPWSTR* psczText | |
); | |
/******************************************************************** | |
ThemeUpdateCaption - updates the caption in the theme. | |
*******************************************************************/ | |
DAPI_(HRESULT) ThemeUpdateCaption( | |
__in THEME* pTheme, | |
__in_z LPCWSTR wzCaption | |
); | |
/******************************************************************** | |
ThemeSetFocus - set the focus to the control supplied or the next | |
enabled control if it is disabled. | |
*******************************************************************/ | |
DAPI_(void) ThemeSetFocus( | |
__in THEME* pTheme, | |
__in DWORD dwControl | |
); | |
#ifdef __cplusplus | |
} | |
#endif | |