You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.7 KiB
86 lines
2.7 KiB
//========= 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
|
|
|