/*-------------------------------------------------------------------------- ctrlgrp.h Control group switcher Copyright (C) Microsoft Corporation, 1993 - 1997 All rights reserved. Authors: matth Matthew F. Hillman, Microsoft History: 10/14/93 matth Created. 26 oct 95 garykac DBCS_FILE_CHECK --------------------------------------------------------------------------*/ #ifndef _CTRLGRP_H #define _CTRLGRP_H /* #if defined(_DEBUG) && defined(INLINE) #undef THIS_FILE extern char BASED_CODE CTRLGRP_H[]; #define THIS_FILE CTRLGRP_H #endif */ #define INLINE inline #define fTrue TRUE #define fFalse FALSE #define g_fWin4 FALSE #define g_fWinNT TRUE #define EDIT_NORMAL_WIDE L"EDIT" class RGControlInfo; class CGControlInfo { friend class RGControlInfo; friend class ControlGroup; public: CGControlInfo(); CGControlInfo(const CGControlInfo & cgciCopy); ~CGControlInfo(); //DeclareStdDebugMembers() HWND m_hwnd; }; //DeclareGenericArrayBegin(RGControlInfo, CGControlInfo, 10) // DeclareGenericArrayAccessors(RGControlInfo, CGControlInfo) // DeclareGenericArrayConstructDestruct(RGControlInfo, CGControlInfo) // DeclareGenericArrayDebug(RGControlInfo, CGControlInfo) //DeclareGenericArrayEnd typedef CArray tempRGControlInfo; class RGControlInfo : public tempRGControlInfo { }; class ControlGroup : public CObject { public: // INITIALIZATION ControlGroup(int idGroup, int idd, void (*pfnInit)(CWnd * pwndParent)); ~ControlGroup(); //DeclareStdDebugMembers() public: // APIS void LoadGroup(CWnd * pwndParent, int xOffset, int yOffset); void UnloadGroup(); void ShowGroup(HDWP& hdwp, BOOL fShow = fTrue, CWnd *pwndParent = NULL); void EnableGroup(BOOL fEnable); int IDGroup() const; BOOL FLoaded() const; BOOL FVisible() const; int CControls() const; void AddControl(HWND hwnd); void RemoveControl(HWND hwnd); private: static void MaskAccelerator(HWND hwnd, BOOL fMask); #ifdef WIN16 void LoadWin16DialogResource(HWND hDlg, BYTE FAR *lpDlgRes, int x, int y); #else void LoadWin32DialogResource(HWND hDlg, BYTE FAR *lpDlgRes, int x, int y); #endif int m_idGroup; int m_idd; void (*m_pfnInit)(CWnd * pwndParent); RGControlInfo m_rgControls; BOOL m_fLoaded; BOOL m_fVisible; }; typedef ControlGroup * PControlGroup; //DeclareGenericArrayBegin(RGPControlGroup, PControlGroup, 10) // DeclareGenericArrayAccessors(RGPControlGroup, PControlGroup) // DeclareGenericArrayDebug(RGPControlGroup, PControlGroup) // long GroupIndex(int idGroup) const; // PControlGroup PGroup(int idGroup) const; //DeclareGenericArrayEnd typedef CArray tempRGPControlGroup; class RGPControlGroup : public tempRGPControlGroup { public: long GroupIndex(int idGroup) const; PControlGroup PGroup(int idGroup) const; }; enum { cgsPreCreateAll, cgsCreateOnDemand, cgsCreateDestroyOnDemand }; class ControlGroupSwitcher : public CObject { public: // INITIALIZATION ControlGroupSwitcher(); void Create(CWnd * pwndParent, int idcAnchor, int cgsStyle); ~ControlGroupSwitcher(); //DeclareStdDebugMembers(); public: // APIS void AddGroup(int idGroup, int idd, void (*pfnInit)(CWnd * pwndParent)); void RemoveGroup(int idGroup); void ShowGroup(int idGroup); int GetCurrentGroupID() const; void AddControlToGroup(int idGroup, HWND hwnd); void RemoveControlFromGroup(int idGroup, HWND hwnd); void EnableGroup(int idGroup, BOOL fEnable); private: void ComputeAnchorOffsets(); RGPControlGroup m_rgpGroups; int m_iGroup; CWnd * m_pwndParent; int m_cgsStyle; int m_idcAnchor; int m_xOffset; int m_yOffset; }; #ifdef INLINE INLINE CGControlInfo::CGControlInfo() : m_hwnd(NULL) { } INLINE CGControlInfo::CGControlInfo(const CGControlInfo & cgciCopy) : m_hwnd(cgciCopy.m_hwnd) { } INLINE CGControlInfo::~CGControlInfo() { //$ REVIEW: Don't destroy windows -- probably already gone (like in dlg) // if (m_hwnd) // ::DestroyWindow(m_hwnd); } INLINE int ControlGroup::IDGroup() const { return m_idGroup; } INLINE BOOL ControlGroup::FLoaded() const { return m_fLoaded; } INLINE BOOL ControlGroup::FVisible() const { return m_fVisible; } INLINE BOOL ControlGroup::CControls() const { Assert(FLoaded()); return (int)m_rgControls.GetSize(); } INLINE PControlGroup RGPControlGroup::PGroup(int idGroup) const { return GetAt(GroupIndex(idGroup)); } INLINE int ControlGroupSwitcher::GetCurrentGroupID() const { return m_iGroup; } INLINE void ControlGroupSwitcher::AddControlToGroup(int idGroup, HWND hwnd) { m_rgpGroups.PGroup(idGroup)->AddControl(hwnd); } INLINE void ControlGroupSwitcher::RemoveControlFromGroup(int idGroup, HWND hwnd) { m_rgpGroups.PGroup(idGroup)->RemoveControl(hwnd); } #endif // INLINE #endif // _CTRLGRP_H