#pragma once
//-------------------------------------------------------------------------------------------------
//
// 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.
//
//
//
// Theme helper functions.
//
//-------------------------------------------------------------------------------------------------
#ifdef __cplusplus
extern "C" {
#endif
#define ReleaseTheme(p) if (p) { ThemeFree(p); p = NULL; }
typedef enum THEME_CONTROL_DATA
{
THEME_CONTROL_DATA_HOVER = 1,
} THEME_CONTROL_DATA;
typedef 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,
} THEME_CONTROL_TYPE;
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