QuakeGod
2022-01-16 326d3e312c74726814c39c9d112faab03c4a167c
提交 | 用户 | age
4b03ae 1 #pragma once
Q 2
3 #include <vector>
4
5 using namespace std;
6
7 typedef enum
8 {
9     LT_LayoutH = 1,
10     LT_LayoutV = 2,
11     LT_Window = 4,
12     LT_LayWinH = 5,
13     LT_LayWinV = 6
14 } LayoutType;
15
16 class Layout
17 {
18 public:
19     /************************************************************************/
20     //  Layout 构造函数
21     //  @param  type Layout类型,Layout、Window、LayoutWindow, Layout水平或垂直二选一
22     //     @param  pWndParent 父窗口
23     // 
24     //     @param  expandToFill 是否可以扩展以填充上层Layout空间 
25     //
26     //  同一个父Layout的所有子Layout占用的全部空间,
27     //  减去固定大小的子Layout占用的全部空间,为所有可填充子Layout的可填充空间,
28     //  除以所有可填充子Layout的全部份数,可得到每一份的尺寸,
29     //  再按照每个子Layout的份数计算其所占尺寸,或者非填充时的真实尺寸
30     //
31     //     @param  fillSpaceOrRealSize 填充时所占空间份数,或非填充时的真实尺寸
32     // 
33     //     @param  wndID 窗口控件ID,
34     //
35     //  如果是Window类型,减去OuterPadding后得到的才是Window真实Rect
36     //
37     //     @param  outerPaddingLeft 
38     //     @param  outerPaddingRight
39     //     @param  outerPaddingUp
40     //     @param  outerPaddingDown
41     //
42     //  如果是Layout类型,子Layout占用的空间还需再减去InnerPadding
43     //
44     //     @param  innerPaddingLeft
45     //     @param  innerPaddingRight
46     //     @param  innerPaddingUp
47     //     @param  innerPaddingDown
48     /************************************************************************/
49     Layout(
50         LayoutType type , 
51         CWnd* pWndParent , 
52
53         bool expandToFill = true , 
54         int fillSpaceOrRealSize = 1,
55
56         int wndID = 0,
57
58         int outerPaddingLeft = 0 , 
59         int outerPaddingRight = 0 , 
60
61         int outerPaddingUp = 0 , 
62         int outerPaddingDown = 0 ,
63
64         int innerPaddingLeft = 0 ,
65         int innerPaddingRight = 0 ,
66
67         int innerPaddingUp = 0 ,
68         int innerPaddingDown = 0);
69
70     ~Layout();
71
72     /************************************************************************/
73     //  窗口大小更新
74     //  @param w 新窗口宽度
75     //  @param h 新窗口高度
76     /************************************************************************/
77     void UpdateSize(int w , int h);
78
79     /************************************************************************/
80     //  Layout  添加子Layout, 子Layout的父窗口同父Layout
81     //  @param  type Layout类型,Layout、Window、LayoutWindow, Layout水平或垂直二选一
82     // 
83     //     @param  expandToFill 是否可以扩展以填充上层Layout空间 
84     //     @param  fillSpaceOrRealSize 填充时所占空间份数,或者非填充时的真实尺寸
85     // 
86     //     @param  wndID 窗口控件ID,
87     //
88     //  如果是Window类型,减去OuterPadding后得到的才是Window真实Rect
89     //
90     //     @param  outerPaddingLeft 
91     //     @param  outerPaddingRight
92     //     @param  outerPaddingUp
93     //     @param  outerPaddingDown
94     //
95     //  如果是Layout类型,子Layout占用的空间还需再减去InnerPadding
96     //
97     //     @param  innerPaddingLeft
98     //     @param  innerPaddingRight
99     //     @param  innerPaddingUp
100     //     @param  innerPaddingDown
101     /************************************************************************/
102     Layout* AddChild(
103         LayoutType type , 
104
105         bool expandToFill = true, 
106         int fillSpaceOrRealSize = 1,
107
108         int wndID = 0,
109
110         int outerPaddingLeft = 5 , 
111         int outerPaddingRight = 5 , 
112
113         int outerPaddingUp = 3 , 
114         int outerPaddingDown = 3 ,
115
116         int innerPaddingLeft = 0 ,
117         int innerPaddingRight = 0 ,
118
119         int innerPaddingUp = 0 ,
120         int innerPaddingDown = 0);
121
122     int m_x;
123     int m_y;
124     int m_width;
125     int m_height;
126
127
128     bool m_bExpandToFill;
129     int m_FillSpaceOrRealSize;
130 private:
131     LayoutType m_type;
132
133     CWnd* m_pWndParent;
134     int m_wndID;
135
136     vector<Layout*> m_children;
137
138     int m_outerPaddingUp;
139     int m_outerPaddingLeft;
140     int m_outerPaddingDown;
141     int m_outerPaddingRight;
142
143     int m_innerPaddingUp;
144     int m_innerPaddingLeft;
145     int m_innerPaddingDown;
146     int m_innerPaddingRight;
147
148     void UpdateLayout();
149     void UpdateLayoutH();
150     void UpdateLayoutV();
151     void UpdateWindow();
152 };