reactos/sdk/lib/cicero/cicuif.h
Katayama Hirofumi MZ a55345be29
[MSCTFIME][CICERO] Implement CDefCompFrameWindow (#6512)
Supporting TIPs...
JIRA issue: CORE-19360
- Add delay link to uxtheme.dll.
- Implement CDefCompFrameGripper,
  CCompFinalizeButton,
  CCompButtonFrameWindow, and
  CDefCompFrameWindow classes.
2024-02-21 10:36:32 +09:00

1089 lines
37 KiB
C++

/*
* PROJECT: ReactOS Cicero
* LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
* PURPOSE: Cicero UIF Library
* COPYRIGHT: Copyright 2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
*/
#pragma once
#include "cicarray.h"
// This is the Cicero UIF Library, used to support the IME UI interface.
// The Cicero UIF Library implements some GUI parts for IMEs and Language Bar.
// The GUI parts of the UIF Library requires special handling because:
//
// 1. To avoid interfering with IME input, the GUI part should not receive focus.
// 2. The IME popup window has WS_DISABLED style, so it cannot receive mouse messages
// directly.
class CUIFSystemInfo;
class CUIFTheme;
class CUIFObject;
class CUIFWindow;
class CUIFToolTip;
class CUIFShadow;
class CUIFBalloonWindow;
class CUIFMenu;
class CUIFButton;
class CUIFButton2;
class CUIFToolbarMenuButton;
class CUIFToolbarButtonElement;
class CUIFBalloonButton;
class CUIFToolbarButton;
class CUIFWndFrame;
class CUIFGripper;
class CUIFMenuItem;
class CUIFMenuItemSeparator;
class CUIFObjectArray;
class CUIFColorTable;
class CUIFColorTableSys;
class CUIFColorTableOff10;
class CUIFBitmapDC;
class CUIFIcon;
class CUIFSolidBrush;
class CUIFScheme;
/////////////////////////////////////////////////////////////////////////////
class CUIFSystemInfo : OSVERSIONINFO
{
public:
static CUIFSystemInfo *s_pSystemInfo;
DWORD m_cBitsPixels;
BOOL m_bHighContrast1;
BOOL m_bHighContrast2;
CUIFSystemInfo() { }
void GetSystemMetrics();
void Initialize();
};
/////////////////////////////////////////////////////////////////////////////
#include <uxtheme.h>
#include <vsstyle.h>
// uxtheme.dll
using FN_OpenThemeData = decltype(&OpenThemeData);
using FN_CloseThemeData = decltype(&CloseThemeData);
using FN_DrawThemeBackground = decltype(&DrawThemeBackground);
using FN_DrawThemeParentBackground = decltype(&DrawThemeParentBackground);
using FN_DrawThemeText = decltype(&DrawThemeText);
using FN_DrawThemeIcon = decltype(&DrawThemeIcon);
using FN_GetThemeBackgroundExtent = decltype(&GetThemeBackgroundExtent);
using FN_GetThemeBackgroundContentRect = decltype(&GetThemeBackgroundContentRect);
using FN_GetThemeTextExtent = decltype(&GetThemeTextExtent);
using FN_GetThemePartSize = decltype(&GetThemePartSize);
using FN_DrawThemeEdge = decltype(&DrawThemeEdge);
using FN_GetThemeColor = decltype(&GetThemeColor);
using FN_GetThemeMargins = decltype(&GetThemeMargins);
using FN_GetThemeFont = decltype(&GetThemeFont);
using FN_GetThemeSysColor = decltype(&GetThemeSysColor);
using FN_GetThemeSysSize = decltype(&GetThemeSysSize);
/////////////////////////////////////////////////////////////////////////////
class CUIFTheme
{
public:
LPCWSTR m_pszClassList;
INT m_iPartId;
INT m_iStateId;
HTHEME m_hTheme;
static HINSTANCE s_hUXTHEME;
static FN_OpenThemeData s_fnOpenThemeData;
static FN_CloseThemeData s_fnCloseThemeData;
static FN_DrawThemeBackground s_fnDrawThemeBackground;
static FN_DrawThemeParentBackground s_fnDrawThemeParentBackground;
static FN_DrawThemeText s_fnDrawThemeText;
static FN_DrawThemeIcon s_fnDrawThemeIcon;
static FN_GetThemeBackgroundExtent s_fnGetThemeBackgroundExtent;
static FN_GetThemeBackgroundContentRect s_fnGetThemeBackgroundContentRect;
static FN_GetThemeTextExtent s_fnGetThemeTextExtent;
static FN_GetThemePartSize s_fnGetThemePartSize;
static FN_DrawThemeEdge s_fnDrawThemeEdge;
static FN_GetThemeColor s_fnGetThemeColor;
static FN_GetThemeMargins s_fnGetThemeMargins;
static FN_GetThemeFont s_fnGetThemeFont;
static FN_GetThemeSysColor s_fnGetThemeSysColor;
static FN_GetThemeSysSize s_fnGetThemeSysSize;
HRESULT InternalOpenThemeData(HWND hWnd);
HRESULT EnsureThemeData(HWND hWnd);
HRESULT CloseThemeData();
STDMETHOD(DrawThemeBackground)(HDC hDC, int iStateId, LPCRECT pRect, LPCRECT pClipRect);
STDMETHOD(DrawThemeParentBackground)(HWND hwnd, HDC hDC, LPRECT prc);
STDMETHOD(DrawThemeText)(HDC hDC, int iStateId, LPCWSTR pszText, int cchText, DWORD dwTextFlags, DWORD dwTextFlags2, LPCRECT pRect);
STDMETHOD(DrawThemeIcon)(HDC hDC, int iStateId, LPCRECT pRect, HIMAGELIST himl, int iImageIndex);
STDMETHOD(GetThemeBackgroundExtent)(HDC hDC, int iStateId, LPCRECT pContentRect, LPRECT pExtentRect);
STDMETHOD(GetThemeBackgroundContentRect)(HDC hDC, int iStateId, LPCRECT pBoundingRect, LPRECT pContentRect);
STDMETHOD(GetThemeTextExtent)(HDC hDC, int iStateId, LPCWSTR pszText, int cchCharCount, DWORD dwTextFlags, LPCRECT pBoundingRect, LPRECT pExtentRect);
STDMETHOD(GetThemePartSize)(HDC hDC, int iStateId, LPRECT prc, THEMESIZE eSize, SIZE *psz);
STDMETHOD(DrawThemeEdge)(HDC hDC, int iStateId, LPCRECT pDestRect, UINT uEdge, UINT uFlags, LPRECT pContentRect);
STDMETHOD(GetThemeColor)(int iStateId, int iPropId, COLORREF *pColor);
STDMETHOD(GetThemeMargins)(HDC hDC, int iStateId, int iPropId, LPRECT prc, MARGINS *pMargins);
STDMETHOD(GetThemeFont)(HDC hDC, int iStateId, int iPropId, LOGFONTW *pFont);
STDMETHOD_(COLORREF, GetThemeSysColor)(INT iColorId);
STDMETHOD_(int, GetThemeSysSize)(int iSizeId);
STDMETHOD_(void, SetActiveTheme)(LPCWSTR pszClassList, INT iPartId, INT iStateId);
};
/////////////////////////////////////////////////////////////////////////////
class CUIFObjectArray : public CicArray<CUIFObject*>
{
public:
CUIFObjectArray() { }
BOOL Add(CUIFObject *pObject)
{
if (!pObject || Find(pObject) >= 0)
return FALSE;
CUIFObject **ppNew = Append(1);
if (!ppNew)
return FALSE;
*ppNew = pObject;
return TRUE;
}
BOOL Remove(CUIFObject *pObject)
{
if (!pObject)
return FALSE;
ptrdiff_t iItem = Find(pObject);
if (iItem < 0)
return FALSE;
if (size_t(iItem) + 1 < size())
MoveMemory(&data()[iItem], &data()[iItem + 1],
(size() - (iItem + 1)) * sizeof(CUIFObject*));
--m_cItems;
return TRUE;
}
CUIFObject *GetLast() const
{
if (empty())
return NULL;
return (*this)[size() - 1];
}
};
/////////////////////////////////////////////////////////////////////////////
class CUIFObject : public CUIFTheme
{
protected:
CUIFObject *m_pParent;
CUIFWindow *m_pWindow;
CUIFScheme *m_pScheme;
CUIFObjectArray m_ObjectArray;
DWORD m_nObjectID;
DWORD m_style;
RECT m_rc;
BOOL m_bEnable;
BOOL m_bVisible;
HFONT m_hFont;
BOOL m_bHasCustomFont;
LPWSTR m_pszToolTip;
DWORD m_dwUnknown4[2]; //FIXME: name and type
friend class CUIFWindow;
friend class CUIFToolTip;
friend class CUIFBalloonWindow;
public:
CUIFObject(CUIFObject *pParent, DWORD nObjectID, LPCRECT prc, DWORD style);
virtual ~CUIFObject();
void StartCapture();
void EndCapture();
BOOL IsCapture();
BOOL IsRTL();
LRESULT NotifyCommand(WPARAM wParam, LPARAM lParam);
CUIFObject* ObjectFromPoint(POINT pt);
void SetScheme(CUIFScheme *scheme);
void StartTimer(WPARAM wParam);
void EndTimer();
STDMETHOD_(BOOL, Initialize)() { return TRUE; }
STDMETHOD_(void, OnPaint)(HDC hDC);
STDMETHOD_(void, OnTimer)() { }
STDMETHOD_(void, OnLButtonDown)(LONG x, LONG y) { }
STDMETHOD_(void, OnMButtonDown)(LONG x, LONG y) { }
STDMETHOD_(void, OnRButtonDown)(LONG x, LONG y) { }
STDMETHOD_(void, OnLButtonUp)(LONG x, LONG y) { }
STDMETHOD_(void, OnMButtonUp)(LONG x, LONG y) { }
STDMETHOD_(void, OnRButtonUp)(LONG x, LONG y) { }
STDMETHOD_(void, OnMouseMove)(LONG x, LONG y) { }
STDMETHOD_(void, OnMouseIn)(LONG x, LONG y) { }
STDMETHOD_(void, OnMouseOut)(LONG x, LONG y) { }
STDMETHOD_(BOOL, OnSetCursor)(UINT uMsg, LONG x, LONG y);
STDMETHOD_(void, GetRect)(LPRECT prc);
STDMETHOD_(void, SetRect)(LPCRECT prc);
STDMETHOD_(BOOL, PtInObject)(POINT pt);
STDMETHOD_(void, PaintObject)(HDC hDC, LPCRECT prc);
STDMETHOD_(void, CallOnPaint)();
STDMETHOD_(void, Enable)(BOOL bEnable);
STDMETHOD_(void, Show)(BOOL bVisible);
STDMETHOD_(void, SetFontToThis)(HFONT hFont);
STDMETHOD_(void, SetFont)(HFONT hFont);
STDMETHOD_(void, SetStyle)(DWORD style);
STDMETHOD_(void, AddUIObj)(CUIFObject *pObject);
STDMETHOD_(void, RemoveUIObj)(CUIFObject *pObject);
STDMETHOD_(LRESULT, OnObjectNotify)(CUIFObject *pObject, WPARAM wParam, LPARAM lParam);
STDMETHOD_(void, SetToolTip)(LPCWSTR pszToolTip);
STDMETHOD_(LPCWSTR, GetToolTip)() { return m_pszToolTip; }
STDMETHOD_(LRESULT, OnShowToolTip)() { return 0; }
STDMETHOD_(void, OnHideToolTip)() { }
STDMETHOD_(void, DetachWndObj)();
STDMETHOD_(void, ClearWndObj)();
STDMETHOD_(BOOL, OnPaintTheme)(HDC hDC) { return FALSE; }
STDMETHOD_(void, OnPaintNoTheme)(HDC hDC) { }
STDMETHOD_(void, ClearTheme)();
};
/////////////////////////////////////////////////////////////////////////////
class CUIFColorTable
{
public:
CUIFColorTable() { }
virtual ~CUIFColorTable() { }
STDMETHOD_(void, InitColor)() = 0;
STDMETHOD_(void, DoneColor)() { }
STDMETHOD_(void, InitBrush)() = 0;
STDMETHOD_(void, DoneBrush)() = 0;
void Update()
{
DoneColor();
DoneBrush();
InitColor();
InitBrush();
}
};
class CUIFColorTableSys : public CUIFColorTable
{
protected:
COLORREF m_rgbColors[16];
HBRUSH m_hBrushes[16];
public:
CUIFColorTableSys() { }
COLORREF GetColor(INT iColor) const { return m_rgbColors[iColor]; }
HBRUSH GetBrush(INT iColor);
STDMETHOD_(void, InitColor)() override;
STDMETHOD_(void, InitBrush)() override;
STDMETHOD_(void, DoneBrush)() override;
};
class CUIFColorTableOff10 : public CUIFColorTable
{
protected:
COLORREF m_rgbColors[32];
HBRUSH m_hBrushes[32];
public:
CUIFColorTableOff10() { }
COLORREF GetColor(INT iColor) const { return m_rgbColors[iColor]; }
HBRUSH GetBrush(INT iColor);
STDMETHOD_(void, InitColor)() override;
STDMETHOD_(void, InitBrush)() override;
STDMETHOD_(void, DoneBrush)() override;
};
/////////////////////////////////////////////////////////////////////////////
class CUIFSolidBrush
{
public:
HBRUSH m_hBrush;
operator HBRUSH() const { return m_hBrush; }
CUIFSolidBrush(COLORREF rgbColor)
{
m_hBrush = ::CreateSolidBrush(rgbColor);
}
~CUIFSolidBrush()
{
if (m_hBrush)
{
::DeleteObject(m_hBrush);
m_hBrush = NULL;
}
}
};
/////////////////////////////////////////////////////////////////////////////
class CUIFIcon
{
public:
HICON m_hIcon;
HIMAGELIST m_hImageList;
CUIFIcon& operator=(HICON hIcon)
{
m_hIcon = hIcon;
if (m_hImageList)
{
ImageList_Destroy(m_hImageList);
m_hImageList = NULL;
}
return *this;
}
HIMAGELIST GetImageList(BOOL bMirror);
};
/////////////////////////////////////////////////////////////////////////////
class CUIFBitmapDC
{
protected:
HBITMAP m_hBitmap;
HGDIOBJ m_hOldBitmap;
HGDIOBJ m_hOldObject;
HDC m_hDC;
public:
static BOOL s_fInitBitmapDCs;
static CUIFBitmapDC *s_phdcSrc;
static CUIFBitmapDC *s_phdcMask;
static CUIFBitmapDC *s_phdcDst;
CUIFBitmapDC(BOOL bMemory);
~CUIFBitmapDC();
operator HDC() const { return m_hDC; }
void Uninit(BOOL bKeep = FALSE);
BOOL SetBitmap(HBITMAP hBitmap);
BOOL SetBitmap(LONG cx, LONG cy, WORD cPlanes, WORD cBitCount);
BOOL SetDIB(LONG cx, LONG cy, WORD cPlanes, WORD cBitCount);
HBITMAP DetachBitmap()
{
HBITMAP hOldBitmap = m_hBitmap;
m_hBitmap = NULL;
return hOldBitmap;
}
};
DECLSPEC_SELECTANY BOOL CUIFBitmapDC::s_fInitBitmapDCs = FALSE;
DECLSPEC_SELECTANY CUIFBitmapDC *CUIFBitmapDC::s_phdcSrc = NULL;
DECLSPEC_SELECTANY CUIFBitmapDC *CUIFBitmapDC::s_phdcMask = NULL;
DECLSPEC_SELECTANY CUIFBitmapDC *CUIFBitmapDC::s_phdcDst = NULL;
void cicInitUIFUtil(void);
void cicDoneUIFUtil(void);
HBITMAP cicMirrorBitmap(HBITMAP hBitmap, HBRUSH hbrBack);
HBRUSH cicCreateDitherBrush(VOID);
HBITMAP cicCreateDisabledBitmap(LPCRECT prc, HBITMAP hbmMask, HBRUSH hbr1, HBRUSH hbr2,
BOOL bPressed);
HBITMAP cicCreateShadowMaskBmp(LPRECT prc, HBITMAP hbm1, HBITMAP hbm2, HBRUSH hbr1, HBRUSH hbr2);
HBITMAP cicChangeBitmapColor(LPCRECT prc, HBITMAP hbm, COLORREF rgbBack, COLORREF rgbFore);
HBITMAP cicConvertBlackBKGBitmap(LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, HBRUSH hBrush);
HBITMAP cicCreateMaskBmp(LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, HBRUSH hbr,
COLORREF rgbColor, COLORREF rgbBack);
BOOL cicGetIconBitmaps(HICON hIcon, HBITMAP *hbm1, HBITMAP *hbm2, const SIZE *pSize);
void cicDrawMaskBmpOnDC(HDC hDC, LPCRECT prc, HBITMAP hbmp, HBITMAP hbmpMask);
/////////////////////////////////////////////////////////////////////////////
// Flags for dwDrawFlags
enum
{
UIF_DRAW_PRESSED = 0x10,
UIF_DRAW_DISABLED = 0x20,
};
class CUIFScheme
{
public:
static CUIFColorTableSys *s_pColorTableSys;
static CUIFColorTableOff10 *s_pColorTableOff10;
BOOL m_bMirroring;
CUIFScheme() : m_bMirroring(FALSE) { }
virtual ~CUIFScheme() { }
STDMETHOD_(DWORD, GetType)() = 0;
STDMETHOD_(COLORREF, GetColor)(INT iColor) = 0;
STDMETHOD_(HBRUSH, GetBrush)(INT iColor) = 0;
STDMETHOD_(INT, CyMenuItem)(INT cyText) = 0;
STDMETHOD_(INT, CxSizeFrame)() = 0;
STDMETHOD_(INT, CySizeFrame)() = 0;
STDMETHOD_(INT, CxWndBorder)() = 0;
STDMETHOD_(INT, CyWndBorder)() = 0;
STDMETHOD_(void, FillRect)(HDC hDC, LPCRECT prc, INT iColor);
STDMETHOD_(void, FrameRect)(HDC hDC, LPCRECT prc, INT iColor);
STDMETHOD_(void, DrawSelectionRect)(HDC hDC, LPCRECT prc, int) = 0;
STDMETHOD_(void, GetCtrlFaceOffset)(DWORD, DWORD dwDrawFlags, LPSIZE pSize) = 0;
STDMETHOD_(void, DrawCtrlBkgd)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) = 0;
STDMETHOD_(void, DrawCtrlEdge)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) = 0;
STDMETHOD_(void, DrawCtrlText)(HDC hDC, LPCRECT prc, LPCWSTR pszText, INT cchText, DWORD dwDrawFlags, BOOL bRight) = 0;
STDMETHOD_(void, DrawCtrlIcon)(HDC hDC, LPCRECT prc, HICON hIcon, DWORD dwDrawFlags, LPSIZE pSize) = 0;
STDMETHOD_(void, DrawCtrlBitmap)(HDC hDC, LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, DWORD dwDrawFlags) = 0;
STDMETHOD_(void, DrawMenuBitmap)(HDC hDC, LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, DWORD dwDrawFlags) = 0;
STDMETHOD_(void, DrawMenuSeparator)(HDC hDC, LPCRECT prc) = 0;
STDMETHOD_(void, DrawFrameCtrlBkgd)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) = 0;
STDMETHOD_(void, DrawFrameCtrlEdge)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) = 0;
STDMETHOD_(void, DrawFrameCtrlIcon)(HDC hDC, LPCRECT prc, HICON hIcon, DWORD dwDrawFlags, LPSIZE pSize) = 0;
STDMETHOD_(void, DrawFrameCtrlBitmap)(HDC hDC, LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, DWORD dwDrawFlags) = 0;
STDMETHOD_(void, DrawWndFrame)(HDC hDC, LPCRECT prc, DWORD type, DWORD unused1, DWORD unused2) = 0;
STDMETHOD_(void, DrawDragHandle)(HDC hDC, LPCRECT prc, BOOL bVertical) = 0;
STDMETHOD_(void, DrawSeparator)(HDC hDC, LPCRECT prc, BOOL bVertical) = 0;
};
class CUIFSchemeDef : public CUIFScheme
{
protected:
DWORD m_dwType;
public:
CUIFSchemeDef(DWORD dwType) : m_dwType(dwType) { }
STDMETHOD_(DWORD, GetType)() override;
STDMETHOD_(COLORREF, GetColor)(INT iColor) override;
STDMETHOD_(HBRUSH, GetBrush)(INT iColor) override;
STDMETHOD_(INT, CyMenuItem)(INT cyText) override;
STDMETHOD_(INT, CxSizeFrame)() override;
STDMETHOD_(INT, CySizeFrame)() override;
STDMETHOD_(INT, CxWndBorder)() override { return 1; }
STDMETHOD_(INT, CyWndBorder)() override { return 1; }
STDMETHOD_(void, DrawSelectionRect)(HDC hDC, LPCRECT prc, int) override;
STDMETHOD_(void, GetCtrlFaceOffset)(DWORD dwUnknownFlags, DWORD dwDrawFlags, LPSIZE pSize) override;
STDMETHOD_(void, DrawCtrlBkgd)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) override;
STDMETHOD_(void, DrawCtrlEdge)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) override;
STDMETHOD_(void, DrawCtrlText)(HDC hDC, LPCRECT prc, LPCWSTR pszText, INT cchText, DWORD dwDrawFlags, BOOL bRight) override;
STDMETHOD_(void, DrawCtrlIcon)(HDC hDC, LPCRECT prc, HICON hIcon, DWORD dwDrawFlags, LPSIZE pSize) override;
STDMETHOD_(void, DrawCtrlBitmap)(HDC hDC, LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, DWORD dwDrawFlags) override;
STDMETHOD_(void, DrawMenuBitmap)(HDC hDC, LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, DWORD dwDrawFlags) override;
STDMETHOD_(void, DrawMenuSeparator)(HDC hDC, LPCRECT prc) override;
STDMETHOD_(void, DrawFrameCtrlBkgd)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) override;
STDMETHOD_(void, DrawFrameCtrlEdge)(HDC hDC, LPCRECT prc, DWORD dwUnknownFlags, DWORD dwDrawFlags) override;
STDMETHOD_(void, DrawFrameCtrlIcon)(HDC hDC, LPCRECT prc, HICON hIcon, DWORD dwDrawFlags, LPSIZE pSize) override;
STDMETHOD_(void, DrawFrameCtrlBitmap)(HDC hDC, LPCRECT prc, HBITMAP hbm1, HBITMAP hbm2, DWORD dwDrawFlags) override;
STDMETHOD_(void, DrawWndFrame)(HDC hDC, LPCRECT prc, DWORD type, DWORD unused1, DWORD unused2) override;
STDMETHOD_(void, DrawDragHandle)(HDC hDC, LPCRECT prc, BOOL bVertical) override;
STDMETHOD_(void, DrawSeparator)(HDC hDC, LPCRECT prc, BOOL bVertical) override;
};
CUIFScheme *cicCreateUIFScheme(DWORD type);
/////////////////////////////////////////////////////////////////////////////
// m_style flags for CUIFWindow
enum
{
UIF_WINDOW_CHILD = 0x1,
UIF_WINDOW_TOPMOST = 0x2,
UIF_WINDOW_TOOLWINDOW = 0x4,
UIF_WINDOW_DLGFRAME = 0x8,
UIF_WINDOW_TOOLTIP = 0x20,
UIF_WINDOW_SHADOW = 0x40,
UIF_WINDOW_WORKAREA = 0x80,
UIF_WINDOW_MONITOR = 0x100,
UIF_WINDOW_LAYOUTRTL = 0x200,
UIF_WINDOW_NOMOUSEMSG = 0x400,
UIF_WINDOW_USESCHEME1 = 0x10000000,
UIF_WINDOW_USESCHEME2 = 0x20000000,
UIF_WINDOW_USESCHEME3 = 0x40000000,
UIF_WINDOW_ENABLETHEMED = 0x80000000,
};
class CUIFWindow : public CUIFObject
{
protected:
INT m_nLeft;
INT m_nTop;
INT m_nHeight;
INT m_nWidth;
HINSTANCE m_hInst;
HWND m_hWnd;
CUIFObject *m_pTimerObject;
CUIFObject *m_pCaptured;
CUIFObject *m_pPointed;
BOOL m_bPointing;
CUIFWindow *m_pBehindModal;
CUIFToolTip *m_pToolTip;
CUIFShadow *m_pShadow;
BOOL m_bShowShadow;
friend class CUIFObject;
friend class CUIFShadow;
friend class CUIFToolTip;
friend class CUIFButton;
friend class CUIFMenu;
public:
enum { POINTING_TIMER_ID = 0x7982, USER_TIMER_ID = 0x5461 };
operator HWND() const { return m_hWnd; }
CUIFWindow(HINSTANCE hInst, DWORD style);
~CUIFWindow() override;
static CUIFWindow* GetThis(HWND hWnd);
static void SetThis(HWND hWnd, LONG_PTR dwNewLong);
STDMETHOD_(BOOL, Initialize)() override;
STDMETHOD_(void, Show)(BOOL bVisible) override;
STDMETHOD_(void, SetRect)(LPCRECT prc) override;
STDMETHOD_(void, PaintObject)(HDC hDC, LPCRECT prc) override;
STDMETHOD_(void, RemoveUIObj)(CUIFObject *pRemove) override;
void SetCaptureObject(CUIFObject *pCaptured);
void SetObjectPointed(CUIFObject *pPointed, POINT pt);
void CreateScheme();
BOOL GetWorkArea(LPCRECT prcWnd, LPRECT prcWorkArea);
void AdjustWindowPosition();
void SetBehindModal(CUIFWindow *pBehindModal);
void SetTimerObject(CUIFObject *pTimerObject, UINT uElapse);
static LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
STDMETHOD_(LPCTSTR, GetClassName)() { return TEXT("CiceroUIWndFrame"); }
STDMETHOD_(LPCTSTR, GetWndTitle)() { return TEXT("CiceroUIWndFrame"); }
STDMETHOD_(DWORD, GetWndStyle)();
STDMETHOD_(DWORD, GetWndStyleEx)();
STDMETHOD_(HWND, CreateWnd)(HWND hwndParent);
STDMETHOD_(void, Move)(INT x, INT y, INT nWidth, INT nHeight);
STDMETHOD_(BOOL, AnimateWnd)(DWORD dwTime, DWORD dwFlags);
STDMETHOD_(void, OnObjectMoved)(CUIFObject *pObject);
STDMETHOD_(void, OnMouseOutFromWindow)(LONG x, LONG y) { }
STDMETHOD_(void, OnCreate)(HWND hWnd) { }
STDMETHOD_(void, OnDestroy)(HWND hWnd) { }
STDMETHOD_(void, OnNCDestroy)(HWND hWnd) { }
STDMETHOD_(void, OnSetFocus)(HWND hWnd) { }
STDMETHOD_(void, OnKillFocus)(HWND hWnd) { }
STDMETHOD_(void, OnNotify)(HWND hWnd, WPARAM wParam, LPARAM lParam) { }
STDMETHOD_(void, OnTimer)(WPARAM wParam) { }
STDMETHOD_(void, OnSysColorChange)() { }
STDMETHOD_(void, OnEndSession)(HWND hWnd, WPARAM wParam, LPARAM lParam) { }
STDMETHOD_(void, OnKeyDown)(HWND hWnd, WPARAM wParam, LPARAM lParam) { }
STDMETHOD_(void, OnKeyUp)(HWND, WPARAM wParam, LPARAM lParam) { }
STDMETHOD_(void, OnUser)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { }
STDMETHOD_(LRESULT, OnActivate)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ return 0; }
STDMETHOD_(LRESULT, OnWindowPosChanged)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ return 0; }
STDMETHOD_(LRESULT, OnWindowPosChanging)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ return 0; }
STDMETHOD_(LRESULT, OnNotifyFormat)(HWND hWnd, WPARAM wParam, LPARAM lParam) { return 0; }
STDMETHOD_(LRESULT, OnShowWindow)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ return 0; }
STDMETHOD_(LRESULT, OnSettingChange)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
STDMETHOD_(LRESULT, OnDisplayChange)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ return 0; }
STDMETHOD_(HRESULT, OnGetObject)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ return S_OK; }
STDMETHOD_(LRESULT, WindowProc)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
STDMETHOD_(BOOL, OnEraseBkGnd)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ return FALSE; }
STDMETHOD_(void, OnThemeChanged)(HWND hWnd, WPARAM wParam, LPARAM lParam);
STDMETHOD_(void, UpdateUI)(LPCRECT prc);
STDMETHOD_(void, SetCapture)(int);
STDMETHOD_(void, ModalMouseNotify)(UINT uMsg, LONG x, LONG y) { }
STDMETHOD_(void, OnAnimationStart)() { }
STDMETHOD_(void, OnAnimationEnd)();
STDMETHOD_(void, HandleMouseMsg)(UINT uMsg, LONG x, LONG y);
STDMETHOD_(void, ClientRectToWindowRect)(LPRECT pRect);
STDMETHOD_(void, GetWindowFrameSize)(LPSIZE pSize);
};
/////////////////////////////////////////////////////////////////////////////
class CUIFToolTip : public CUIFWindow
{
protected:
CUIFWindow *m_pToolTipOwner;
CUIFObject *m_pToolTipTarget;
LPWSTR m_pszToolTipText;
BOOL m_bShowToolTip;
DWORD m_dwUnknown10; //FIXME: name and type
LONG m_nDelayTimeType2;
LONG m_nDelayTimeType3;
LONG m_nDelayTimeType1;
RECT m_rcToolTipMargin;
LONG m_cxToolTipWidth;
BOOL m_bToolTipHasBkColor;
BOOL m_bToolTipHasTextColor;
COLORREF m_rgbToolTipBkColor;
COLORREF m_rgbToolTipTextColor;
friend class CUIFObject;
friend class CTipbarWnd;
public:
enum { TOOLTIP_TIMER_ID = 0x3216 };
CUIFToolTip(HINSTANCE hInst, DWORD style, CUIFWindow *pToolTipOwner);
~CUIFToolTip() override;
LONG GetDelayTime(UINT uType);
void GetMargin(LPRECT prc);
COLORREF GetTipBkColor();
COLORREF GetTipTextColor();
CUIFObject* FindObject(HWND hWnd, POINT pt);
void ShowTip();
void HideTip();
void GetTipWindowSize(LPSIZE pSize);
void GetTipWindowRect(LPRECT pRect, SIZE toolTipSize, LPCRECT prc);
void RelayEvent(LPMSG pMsg);
STDMETHOD_(void, OnPaint)(HDC hDC) override;
STDMETHOD_(void, Enable)(BOOL bEnable) override;
STDMETHOD_(void, OnTimer)(WPARAM wParam) override;
};
class CUIFShadow : public CUIFWindow
{
protected:
CUIFWindow *m_pShadowOwner;
COLORREF m_rgbShadowColor;
DWORD m_dwUnknown11[2];
INT m_xShadowDelta;
INT m_yShadowDelta;
BOOL m_bLayerAvailable;
public:
CUIFShadow(HINSTANCE hInst, DWORD style, CUIFWindow *pShadowOwner);
~CUIFShadow() override;
void InitSettings();
void InitShadow();
void AdjustWindowPos();
void OnOwnerWndMoved(BOOL bDoSize);
STDMETHOD_(BOOL, Initialize)() override;
STDMETHOD_(DWORD, GetWndStyleEx)() override;
STDMETHOD_(void, OnPaint)(HDC hDC) override;
STDMETHOD_(LRESULT, OnWindowPosChanging)(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) override;
STDMETHOD_(LRESULT, OnSettingChange)(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) override;
STDMETHOD_(void, Show)(BOOL bVisible) override;
};
/////////////////////////////////////////////////////////////////////////////
// m_style flags for CUIFMenu
enum
{
UIF_MENU_USE_OFF10 = 0x10000000,
};
class CUIFMenu : public CUIFWindow
{
public:
CUIFMenu *m_pVisibleSubMenu;
CUIFMenu *m_pParentMenu;
CUIFMenuItem *m_pSelectedItem;
UINT m_nSelectedID;
CicArray<CUIFMenuItem*> m_MenuItems;
HFONT m_hMenuFont;
BOOL m_bModal;
BOOL m_bHasMargin;
DWORD m_dwUnknown14;
LONG m_cxyMargin;
LONG m_cxMenuExtent;
friend class CUIFMenuItem;
public:
CUIFMenu(HINSTANCE hInst, DWORD style, DWORD dwUnknown14);
~CUIFMenu() override;
void CancelMenu();
void ClearMenuFont();
CUIFMenuItem* GetNextItem(CUIFMenuItem *pItem);
CUIFMenuItem* GetPrevItem(CUIFMenuItem *pItem);
CUIFMenu* GetTopSubMenu();
BOOL InsertItem(CUIFMenuItem *pItem);
BOOL InsertSeparator();
void PostKey(BOOL bUp, WPARAM wParam, LPARAM lParam);
void SetMenuFont();
void SetSelectedId(UINT nSelectID);
void SetSelectedItem(CUIFMenuItem *pItem);
UINT ShowModalPopup(CUIFWindow *pWindow, LPCRECT prc, BOOL bFlag);
void ShowSubPopup(CUIFMenu *pSubMenu, LPCRECT prc, BOOL bFlag);
STDMETHOD_(void, OnKeyDown)(HWND hWnd, WPARAM wParam, LPARAM lParam) override;
STDMETHOD_(void, HandleMouseMsg)(UINT uMsg, LONG x, LONG y) override;
STDMETHOD_(void, ModalMouseNotify)(UINT uMsg, LONG x, LONG y) override;
STDMETHOD_(void, ModalMessageLoop)();
STDMETHOD_(BOOL, InitShow)(CUIFWindow *pWindow, LPCRECT prc, BOOL bFlag, BOOL bDoAnimation);
STDMETHOD_(BOOL, UninitShow)();
};
/////////////////////////////////////////////////////////////////////////////
class CUIFMenuItem : public CUIFObject
{
protected:
UINT m_nMenuItemID;
LPWSTR m_pszMenuItemLeft;
UINT m_cchMenuItemLeft;
LPWSTR m_pszMenuItemRight;
UINT m_cchMenuItemRight;
UINT m_nMenuItemVKey;
UINT m_ichMenuItemPrefix;
HBITMAP m_hbmColor;
HBITMAP m_hbmMask;
BOOL m_bMenuItemChecked;
BOOL m_bMenuItemForceChecked;
BOOL m_bMenuItemGrayed;
BOOL m_bMenuItemDisabled;
CUIFMenu *m_pMenu;
CUIFMenu *m_pSubMenu;
SIZE m_MenuLeftExtent;
SIZE m_MenuRightExtent;
friend class CUIFMenu;
void DrawArrow(HDC hDC, INT x, INT y);
void DrawBitmapProc(HDC hDC, INT xLeft, INT yTop);
void DrawCheck(HDC hDC, INT xLeft, INT yTop);
void DrawUnderline(HDC hDC, INT xText, INT yText, HBRUSH hbr);
public:
CUIFMenuItem(CUIFMenu *pMenu, BOOL bDisabled = FALSE);
~CUIFMenuItem() override;
BOOL Init(UINT nMenuItemID, LPCWSTR pszText);
BOOL IsCheck();
void Check(BOOL bChecked) { m_bMenuItemChecked = bChecked; }
void Gray(BOOL bGrayed) { m_bMenuItemGrayed = bGrayed; }
void SetBitmap(HBITMAP hbmColor) { m_hbmColor = hbmColor; }
void SetBitmapMask(HBITMAP hbmMask);
void SetSub(CUIFMenu *pSubMenu) { m_pSubMenu = pSubMenu; }
void ShowSubPopup();
STDMETHOD_(void, OnLButtonUp)(LONG x, LONG y) override;
STDMETHOD_(void, OnMouseIn)(LONG x, LONG y) override;
STDMETHOD_(void, OnPaint)(HDC hDC) override;
STDMETHOD_(void, OnTimer)() override;
STDMETHOD_(void, InitMenuExtent)();
STDMETHOD_(void, OnPaintDef)(HDC hDC);
STDMETHOD_(void, OnPaintO10)(HDC hDC);
STDMETHOD_(void, OnUnknownMethod)() { } // FIXME: method name
};
/////////////////////////////////////////////////////////////////////////////
class CUIFMenuItemSeparator : public CUIFMenuItem
{
public:
CUIFMenuItemSeparator(CUIFMenu *pMenu);
STDMETHOD_(void, InitMenuExtent)() override;
STDMETHOD_(void, OnPaintDef)(HDC hDC) override;
STDMETHOD_(void, OnPaintO10)(HDC hDC) override;
};
/////////////////////////////////////////////////////////////////////////////
// m_style flags for CUIFButton
enum
{
UIF_BUTTON_H_ALIGN_LEFT = 0,
UIF_BUTTON_H_ALIGN_CENTER = 0x1,
UIF_BUTTON_H_ALIGN_RIGHT = 0x2,
UIF_BUTTON_H_ALIGN_MASK = UIF_BUTTON_H_ALIGN_CENTER | UIF_BUTTON_H_ALIGN_RIGHT,
UIF_BUTTON_V_ALIGN_TOP = 0,
UIF_BUTTON_V_ALIGN_MIDDLE = 0x4,
UIF_BUTTON_V_ALIGN_BOTTOM = 0x8,
UIF_BUTTON_V_ALIGN_MASK = UIF_BUTTON_V_ALIGN_MIDDLE | UIF_BUTTON_V_ALIGN_BOTTOM,
UIF_BUTTON_LARGE_ICON = 0x100,
UIF_BUTTON_VERTICAL = 0x400,
};
class CUIFButton : public CUIFObject
{
protected:
UINT m_uButtonStatus;
LPWSTR m_pszButtonText;
CUIFIcon m_ButtonIcon;
DWORD m_dwUnknown9;
HBITMAP m_hbmButton1;
HBITMAP m_hbmButton2;
BOOL m_bPressed;
SIZE m_IconSize;
SIZE m_TextSize;
friend class CUIFToolbarButton;
void DrawBitmapProc(HDC hDC, LPCRECT prc, BOOL bPressed);
void DrawEdgeProc(HDC hDC, LPCRECT prc, BOOL bPressed);
void DrawIconProc(HDC hDC, LPRECT prc, BOOL bPressed);
void DrawTextProc(HDC hDC, LPCRECT prc, BOOL bPressed);
public:
CUIFButton(CUIFObject *pParent, DWORD nObjectID, LPCRECT prc, DWORD style);
~CUIFButton() override;
void SetIcon(HICON hIcon);
void SetText(LPCWSTR pszText);
void GetIconSize(HICON hIcon, LPSIZE pSize);
void GetTextSize(LPCWSTR pszText, LPSIZE pSize);
STDMETHOD_(void, Enable)(BOOL bEnable) override;
STDMETHOD_(void, OnMouseIn)(LONG x, LONG y) override;
STDMETHOD_(void, OnMouseOut)(LONG x, LONG y) override;
STDMETHOD_(void, OnLButtonDown)(LONG x, LONG y) override;
STDMETHOD_(void, OnLButtonUp)(LONG x, LONG y) override;
STDMETHOD_(void, OnPaintNoTheme)(HDC hDC) override;
STDMETHOD_(void, SetStatus)(UINT uStatus);
};
/////////////////////////////////////////////////////////////////////////////
class CUIFButton2 : public CUIFButton
{
protected:
SIZE m_BitmapSize;
public:
CUIFButton2(CUIFObject *pParent, DWORD nObjectID, LPCRECT prc, DWORD style);
~CUIFButton2() override;
DWORD MakeDrawFlag();
STDMETHOD_(BOOL, OnPaintTheme)(HDC hDC) override;
STDMETHOD_(void, OnPaintNoTheme)(HDC hDC) override;
};
/////////////////////////////////////////////////////////////////////////////
class CUIFToolbarMenuButton : public CUIFButton2
{
public:
CUIFToolbarButton *m_pToolbarButton;
CUIFToolbarMenuButton(CUIFToolbarButton *pParent, DWORD nObjectID, LPCRECT prc, DWORD style);
~CUIFToolbarMenuButton() override;
STDMETHOD_(void, OnLButtonUp)(LONG x, LONG y) override;
STDMETHOD_(BOOL, OnSetCursor)(UINT uMsg, LONG x, LONG y) override;
};
/////////////////////////////////////////////////////////////////////////////
class CUIFToolbarButtonElement : public CUIFButton2
{
public:
CUIFToolbarButton *m_pToolbarButton;
CUIFToolbarButtonElement(CUIFToolbarButton *pParent, DWORD nObjectID, LPCRECT prc, DWORD style);
STDMETHOD_(LPCWSTR, GetToolTip)() override;
STDMETHOD_(void, OnLButtonUp)(LONG x, LONG y) override;
STDMETHOD_(void, OnRButtonUp)(LONG x, LONG y) override;
};
/////////////////////////////////////////////////////////////////////////////
class CUIFToolbarButton : public CUIFObject
{
public:
CUIFToolbarButtonElement *m_pToolbarButtonElement;
CUIFToolbarMenuButton *m_pToolbarMenuButton;
DWORD m_dwToolbarButtonFlags;
LPCWSTR m_pszUnknownText;
CUIFToolbarButton(
CUIFObject *pParent,
DWORD nObjectID,
LPCRECT prc,
DWORD style,
DWORD dwToolbarButtonFlags,
LPCWSTR pszUnknownText);
~CUIFToolbarButton() override { }
BOOL Init();
HICON GetIcon();
void SetIcon(HICON hIcon);
STDMETHOD_(void, ClearWndObj)() override;
STDMETHOD_(void, DetachWndObj)() override;
STDMETHOD_(void, Enable)(BOOL bEnable) override;
STDMETHOD_(LPCWSTR, GetToolTip)() override;
STDMETHOD_(void, SetActiveTheme)(LPCWSTR pszClassList, INT iPartId, INT iStateId) override;
STDMETHOD_(void, SetFont)(HFONT hFont) override;
STDMETHOD_(void, SetRect)(LPCRECT prc) override;
STDMETHOD_(void, SetToolTip)(LPCWSTR pszToolTip) override;
STDMETHOD_(void, OnUnknownMouse0)() { }
STDMETHOD_(void, OnLeftClick)() { }
STDMETHOD_(void, OnRightClick)() { }
};
/////////////////////////////////////////////////////////////////////////////
// m_style flags for CUIFGripper
enum
{
UIF_GRIPPER_VERTICAL = 0x1,
};
class CUIFGripper : public CUIFObject
{
protected:
POINT m_ptGripper;
public:
CUIFGripper(CUIFObject *pParent, LPCRECT prc, DWORD style);
~CUIFGripper() override;
STDMETHOD_(void, OnMouseMove)(LONG x, LONG y) override;
STDMETHOD_(void, OnLButtonDown)(LONG x, LONG y) override;
STDMETHOD_(void, OnLButtonUp)(LONG x, LONG y) override;
STDMETHOD_(BOOL, OnPaintTheme)(HDC hDC) override;
STDMETHOD_(void, OnPaintNoTheme)(HDC hDC) override;
STDMETHOD_(BOOL, OnSetCursor)(UINT uMsg, LONG x, LONG y) override;
STDMETHOD_(void, SetStyle)(DWORD style) override;
};
/////////////////////////////////////////////////////////////////////////////
class CUIFWndFrame : public CUIFObject
{
protected:
DWORD m_dwHitTest;
POINT m_ptHit;
RECT m_rcWnd;
INT m_cxFrame;
INT m_cyFrame;
INT m_cxMin;
INT m_cyMin;
public:
CUIFWndFrame(CUIFObject *pParent, LPCRECT prc, DWORD style);
void GetFrameSize(LPSIZE pSize);
DWORD HitTest(LONG x, LONG y);
STDMETHOD_(void, OnMouseMove)(LONG x, LONG y) override;
STDMETHOD_(void, OnLButtonDown)(LONG x, LONG y) override;
STDMETHOD_(void, OnLButtonUp)(LONG x, LONG y) override;
STDMETHOD_(BOOL, OnPaintTheme)(HDC hDC) override;
STDMETHOD_(void, OnPaintNoTheme)(HDC hDC) override;
STDMETHOD_(BOOL, OnSetCursor)(UINT uMsg, LONG x, LONG y) override;
};
/////////////////////////////////////////////////////////////////////////////
class CUIFBalloonButton : public CUIFButton
{
protected:
UINT m_nCommandID;
friend class CUIFBalloonWindow;
public:
CUIFBalloonButton(CUIFObject *pParent, DWORD nObjectID, LPCRECT prc, DWORD style);
STDMETHOD_(void, OnPaint)(HDC hDC) override;
void DrawTextProc(HDC hDC, LPCRECT prc, BOOL bPressed);
};
/////////////////////////////////////////////////////////////////////////////
// m_style flags for CUIFBalloonWindow
enum
{
UIF_BALLOON_WINDOW_OK = 0x10000,
UIF_BALLOON_WINDOW_YESNO = 0x20000,
UIF_BALLOON_WINDOW_TYPE_MASK = 0xF0000,
};
class CUIFBalloonWindow : public CUIFWindow
{
protected:
LPWSTR m_pszBalloonText;
HRGN m_hRgn;
RECT m_rcMargin;
DWORD m_dwUnknown6;
BOOL m_bHasBkColor;
BOOL m_bHasTextColor;
COLORREF m_rgbBkColor;
COLORREF m_rgbTextColor;
POINT m_ptTarget;
RECT m_rcExclude;
POINT m_ptBalloon;
DWORD m_dwUnknown7;
UINT m_nBalloonType;
DWORD m_dwUnknown8[2];
UINT m_cButtons;
WPARAM m_nActionID;
HWND m_hwndNotif;
UINT m_uNotifMsg;
public:
CUIFBalloonWindow(HINSTANCE hInst, DWORD style);
~CUIFBalloonWindow() override;
STDMETHOD_(BOOL, Initialize)() override;
STDMETHOD_(LPCTSTR, GetClassName)() override { return TEXT("MSIME_PopupMessage"); }
STDMETHOD_(LPCTSTR, GetWndTitle)() override { return TEXT("MSIME_PopupMessage"); }
STDMETHOD_(void, OnCreate)(HWND hWnd) override;
STDMETHOD_(void, OnDestroy)(HWND hWnd) override;
STDMETHOD_(void, OnKeyDown)(HWND hWnd, WPARAM wParam, LPARAM lParam) override;
STDMETHOD_(LRESULT, OnObjectNotify)(CUIFObject *pObject, WPARAM wParam, LPARAM lParam) override;
STDMETHOD_(void, OnPaint)(HDC hDC) override;
void AddButton(UINT nCommandId);
void AdjustPos();
HRGN CreateRegion(LPCRECT prc);
void DoneWindowRegion();
CUIFBalloonButton *FindButton(UINT nCommandID);
CUIFObject *FindUIObject(UINT nObjectID);
COLORREF GetBalloonBkColor();
COLORREF GetBalloonTextColor();
void GetButtonSize(LPSIZE pSize);
void GetMargin(LPRECT prcMargin);
void SetExcludeRect(LPCRECT prcExclude);
void SetTargetPos(POINT ptTarget);
void SetText(LPCWSTR pszText);
void InitWindowRegion();
void LayoutObject();
void PaintFrameProc(HDC hDC, LPCRECT prc);
void PaintMessageProc(HDC hDC, LPRECT prc, LPCWSTR pszText);
void SendNotification(WPARAM wParam);
};
/////////////////////////////////////////////////////////////////////////////
void cicInitUIFLib(void);
void cicDoneUIFLib(void);
void cicInitUIFSys(void);
void cicDoneUIFSys(void);
void cicUpdateUIFSys(void);
void cicInitUIFScheme(void);
void cicUpdateUIFScheme(void);
void cicDoneUIFScheme(void);
void cicGetWorkAreaRect(POINT pt, LPRECT prc);
void cicGetScreenRect(POINT pt, LPRECT prc);
BOOL cicIsFullScreenSize(HWND hWnd);
BOOL cicGetIconSize(HICON hIcon, LPSIZE pSize);
/////////////////////////////////////////////////////////////////////////////