//----------------------------------------------------------------------------- // File: uiglobals.h // // Desc: CUIGlobals is a class that packs and holds most information // relevent to a UI session. Many classes make reference to // CUIGlobals all the time. // // CPaintHelper encapsulates GDI calls, simplifying GDI operations. // // Copyright (C) 1999-2000 Microsoft Corporation. All Rights Reserved. //----------------------------------------------------------------------------- #ifndef __UIGLOBALS_H__ #define __UIGLOBALS_H__ #include "uielements.h" struct UIELEMENTINFO { UIELEMENT eElement; UIFONT eFont; UIBRUSH eBrush; UIPEN ePen; UICOLOR eText, eBk; }; struct UIFONTINFO { UIFONT eFont; LPCTSTR lfFaceName; int nPointSize; BOOL bBold; HGDIOBJ hFont; }; struct UIBRUSHINFO { UIBRUSH eBrush; UICOLOR eColor; HGDIOBJ hBrush; HGDIOBJ hPen; }; struct UIPENINFO { UIPEN ePen; int fnPenStyle; int nWidth; UICOLOR eColor; HGDIOBJ hPen; }; struct UICOLORINFO { UICOLOR eColor; COLORREF rgb; }; enum UIRECTTYPE { UIR_OUTLINE, UIR_NORMAL, UIR_SOLID, }; #define UIG_PARAMS_DEFINE \ DWORD dwFlags, \ LPCWSTR wszUserNames, \ DWORD dwNumAcFor, \ LPDIACTIONFORMATW lpAcFor, \ LPDICOLORSET lpDIColorSet, \ IUnknown FAR *lpSurface, \ LPDICONFIGUREDEVICESCALLBACK lpCallback, \ LPVOID pvRefData #define UIG_PARAMS_DEFINE_PASS \ dwFlags, \ wszUserNames, \ dwNumAcFor, \ lpAcFor, \ lpDIColorSet, \ lpSurface, \ lpCallback, \ pvRefData class CUIGlobals { public: CUIGlobals(UIG_PARAMS_DEFINE); ~CUIGlobals(); // UI Variables/States/Etc... public: HRESULT GetInitResult() {return m_hrInit;} HINSTANCE GetInstance() {return m_hInst;} LPDIRECTINPUT8W GetDI(); int GetUserNameIndex(LPCWSTR); int GetNumUserNames(); LPCWSTR GetUserName(int i); // GetSurface should not be used as only IDirect3DSurface8 should be used. Instead, use GetSurface3D. IDirectDrawSurface *GetSurface(); // must release when done with returned surface (it's addref'd before returned) IDirect3DSurface8 *GetSurface3D(); // must release when done with returned surface (it's addref'd before returned) LPDICONFIGUREDEVICESCALLBACK GetCallback() {return m_lpCallback;} LPVOID GetRefData() {return m_pvRefData;} //@@BEGIN_MSINTERNAL #ifdef DDKBUILD BOOL QueryAllowEditLayout() { return m_bAllowEditLayout; } #endif //@@END_MSINTERNAL DWORD GetFlags() {return m_dwFlags;} BOOL IsFlagSet(DWORD dwFlag) {return AreFlagsSet(dwFlag);} BOOL AreFlagsSet(DWORD dwFlags) {return (m_dwFlags & dwFlags) == dwFlags;} BOOL InEditMode() {return IsFlagSet(DICD_EDIT);} const DIACTIONFORMATW &RefMasterAcFor(int i); int GetNumMasterAcFors() {return m_MasterAcForArray.GetSize();} const DICOLORSET &GetColorSet() const { return m_ColorSet; } void SetFinalResult(HRESULT); HRESULT GetFinalResult(); private: HRESULT Init(UIG_PARAMS_DEFINE); void Dump(); HRESULT m_hrInit; HRESULT m_hrFinalResult; BOOL InitColorsAndTablesAndObjects(LPDICOLORSET lpDIColorSet); BOOL IsValidUserIndex(int i); BOOL IsValidMasterAcForIndex(int i); HRESULT InitMasterAcForArray(const DIACTIONFORMATW *af, int n); void ClearMasterAcForArray(); HINSTANCE m_hInst; LPDIRECTINPUT8W m_lpDI; DWORD m_dwFlags; LPCWSTR m_wszUserNames; CArray m_MasterAcForArray; BOOL m_bUseColorSet; DICOLORSET m_ColorSet; void SetTableColor(UICOLOR, COLORREF); IDirectDrawSurface *m_pSurface; IDirect3DSurface8 *m_pSurface3D; LPDICONFIGUREDEVICESCALLBACK m_lpCallback; LPVOID m_pvRefData; BOOL m_bAllowEditLayout; // UI Elements... public: UIELEMENTINFO *GetElementInfo(UIELEMENT); UIFONTINFO *GetFontInfo(UIFONT); UIBRUSHINFO *GetBrushInfo(UIBRUSH); UIPENINFO *GetPenInfo(UIPEN); UICOLORINFO *GetColorInfo(UICOLOR); HGDIOBJ GetFont(UIELEMENT); HGDIOBJ GetFont(UIFONT); HGDIOBJ GetBrush(UIELEMENT); HGDIOBJ GetBrush(UIBRUSH); HGDIOBJ GetPen(UIELEMENT); HGDIOBJ GetPen(UIBRUSH); HGDIOBJ GetPen(UIPEN); COLORREF GetBrushColor(UIELEMENT); COLORREF GetPenColor(UIELEMENT); COLORREF GetTextColor(UIELEMENT); COLORREF GetBkColor(UIELEMENT); COLORREF GetColor(UIBRUSH); COLORREF GetColor(UIPEN); COLORREF GetColor(UICOLOR); void DeleteObjects(); void CreateObjects(); void RecreateObjects(); private: BOOL InitTables(); void ClearTables(); UIELEMENTINFO *m_pElement; int m_nElements; UIFONTINFO *m_pFont; int m_nFonts; UIBRUSHINFO *m_pBrush; int m_nBrushes; UIPENINFO *m_pPen; int m_nPens; UICOLORINFO *m_pColor; int m_nColors; }; class CPaintHelper { public: CPaintHelper(CUIGlobals &uig, HDC hDC); ~CPaintHelper(); CUIGlobals &m_uig; HDC &m_hDC; void SetElement(UIELEMENT eElement); void SetFont(UIFONT eFont); void SetBrush(UIBRUSH eBrush); void SetPen(UIPEN ePen); void SetText(UICOLOR eText, UICOLOR eBk = UIC_LAST); BOOL LineTo(SPOINT p) {return LineTo(p.x, p.y);} BOOL LineTo(int x, int y); BOOL MoveTo(SPOINT p, SPOINT *last = NULL) {return MoveTo(p.x, p.y, last);} BOOL MoveTo(int x, int y, SPOINT *last = NULL); BOOL Rectangle(SRECT r, UIRECTTYPE eType = UIR_NORMAL); BOOL Rectangle(int l, int t, int r, int b, UIRECTTYPE eType = UIR_NORMAL) {SRECT s(l,t,r,b); return Rectangle(s, eType);} private: HDC m_priv_hDC; HGDIOBJ m_hOldFont, m_hOldBrush, m_hOldPen; BOOL m_bOldFont, m_bOldBrush, m_bOldPen; COLORREF m_oldtextcolor, m_oldbkcolor; int m_oldbkmode; UIFONT m_eFont; UIBRUSH m_eBrush; UIPEN m_ePen; UICOLOR m_eText, m_eBk; }; #endif //__UIGLOBALS_H__