|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef ANCHORMGR_H
#define ANCHORMGR_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/utlvector.h"
enum ESimpleAnchor { k_eSimpleAnchorAllSides, k_eSimpleAnchorBottomRight, // The whole control follows the bottom right.
k_eSimpleAnchorStretchRight, // Only grow in width.
k_eSimpleAnchorRightSide, k_eSimpleAnchorBottomSide }; enum EAnchorHorz { k_eAnchorLeft, // Anchor this side of the control to the left of its parent window.
k_eAnchorRight // Anchor this side of the control to the right of its parent window.
}; enum EAnchorVert { k_eAnchorTop, // Anchor this side of the control to the top of its parent window.
k_eAnchorBottom // Anchor this side of the control to the bottom of its parent window.
};
class CAnchorDef { public: friend class CAnchorMgr; // You can use the first constructor for simple cases.
CAnchorDef() {} CAnchorDef( int dlgItemID, ESimpleAnchor eSimpleAnchor ); CAnchorDef( HWND hWnd, ESimpleAnchor eSimpleAnchor );
CAnchorDef( int dlgItemID, EAnchorHorz eLeftSide=k_eAnchorLeft, EAnchorVert eTopSide=k_eAnchorTop, EAnchorHorz eRightSide=k_eAnchorRight, EAnchorVert eBottomSide=k_eAnchorBottom ); CAnchorDef( HWND hWnd, EAnchorHorz eLeftSide=k_eAnchorLeft, EAnchorVert eTopSide=k_eAnchorTop, EAnchorHorz eRightSide=k_eAnchorRight, EAnchorVert eBottomSide=k_eAnchorBottom );
// Only one of hWnd or dlgItemID should be set.
void Init( HWND hWnd, int dlgItemID, ESimpleAnchor eSimpleAnchor ); void Init( HWND hWnd, int dlgItemID, EAnchorHorz eLeftSide, EAnchorVert eTopSide, EAnchorHorz eRightSide, EAnchorVert eBottomSide );
public: int m_DlgItemID; HWND m_hInputWnd; // Either this or m_DlgItemID is set.
EAnchorHorz m_AnchorLeft, m_AnchorRight; EAnchorVert m_AnchorTop, m_AnchorBottom;
private: int m_OriginalPos[4]; // left, top, right, bottom
HWND m_hWnd; };
//-----------------------------------------------------------------------------
// Purpose: This class helps a resizable window resize and move its controls
// whenever the window is resized. First, you call Init() to tell it how
// you want all the child windows anchored, then just call OnSize() whenever
// the parent window is sized.
//-----------------------------------------------------------------------------
class CAnchorMgr { public: CAnchorMgr(); void Init( HWND hParentWnd, CAnchorMgr::CAnchorDef *pAnchors, int nAnchors );
// Call this when the parent window's size changes and it'll resize all the subcontrols.
void OnSize(); private: CUtlVector<CAnchorMgr::CAnchorDef> m_Anchors; HWND m_hParentWnd; int m_OriginalParentSize[2]; // wide, tall
};
#endif // ANCHORMGR_H
|