122 TParam p(loc, layout.
Clone());
135 return Add(layout, m_defaultLocation);
144 return m_params->GetSize();
154 return m_params->At(index).pLayout;
164 return m_params->At(index).pLayout;
174 return m_params->At(index).locate;
189 ret.cx = max(ret.cx, sz.cx);
190 ret.cy = max(ret.cy, sz.cy);
255 TParam p(dis, val, g);
272 TParam& par = m_params->At(i);
280 par.value =
static_cast<size_t>(a - v);
281 if ( par.value <= 0 )
286 v =
static_cast<size_t>(a);
297 return m_params->GetSize();
307 return m_params->At(index).parallel;
317 return m_params->At(index).parallel;
327 return m_params->At(index).distance;
337 return m_params->At(index).value;
379 SIZE adSize = { 0, 0 };
385 INT_PTR x = ret.cx * val / 100;
386 if ( sizes[i].cx > x )
388 adSize.cx = max(adSize.cx, down_cast<LONG>(sizes[i].cx * 100 / val));
390 INT_PTR y = ret.cy * val / 100;
391 if ( sizes[i].cy > y )
393 adSize.cy = max(adSize.cy,
ToInt(sizes[i].cy * 100 / val));
397 if ( adSize.cx != 0 || adSize.cy != 0 )
399 ret.cx = max(ret.cx, adSize.cx);
400 ret.cy = max(ret.cy, adSize.cy);
415 TParam(
EDistance dis,
int v, CParallelGroup& para) : distance(dis), value(v), parallel(para) { }
489 virtual void Decide(
int x,
int y, WPARAM wParam, LPARAM lParam)
493 SIZE chinkSize = { 0, 0 };
496 if ( x >= 0 && hcnt > 0 )
500 INT_PTR widthOrg = width;
505 INDEX rastItem = INVALID_INDEX;
515 if ( index == hcnt - 1 && rastItem == INVALID_INDEX )
526 val = widthOrg * val / 100;
533 ASSERT( rastItem == INVALID_INDEX );
545 if ( rastItem != INVALID_INDEX )
548 xlen[rastItem] = width;
549 for (
size_t i = rastItem + 1; i < hcnt; i++ )
564 if ( y >= 0 && vcnt > 0 )
568 INT_PTR heightOrg = height;
573 INDEX rastItem = INVALID_INDEX;
583 if ( index == vcnt - 1 && rastItem == INVALID_INDEX )
594 val = heightOrg * val / 100;
601 ASSERT( rastItem == INVALID_INDEX );
613 if ( rastItem != INVALID_INDEX )
616 ylen[rastItem] = height;
617 for (
size_t i = rastItem + 1; i < vcnt; i++ )
687 CSequentialGroup m_hGroup;
688 CSequentialGroup m_vGroup;
#define loop(VAR, CNT)
loop構文.
void HorizontalItemDecide(ILayout *pLayout, INT_PTR x, INT_PTR xx, INT_PTR width, ELocation loc, WPARAM wParam, LPARAM lParam)
[設定] 水平方向アイテム決定.
SIZE m_gapSize
各アイテム間のギャップ(縦、横)
SIZE m_layoutSize
レイアウト全体サイズ(縦、横)
void VerticalItemDecide(ILayout *pLayout, INT_PTR y, INT_PTR yy, INT_PTR height, ELocation loc, WPARAM wParam, LPARAM lParam)
[設定] 垂直方向アイテム決定.
void AddChinkSize(SIZE &_size, size_t cx, size_t cy) const
[加算] 隙間サイズ加算.
CParallelGroup & Add(const ILayout &layout)
[設定] アイテム追加.
ELocation GetItemLocation(INDEX index) const
[取得] アイテムの配置種取得.
const ILayout * GetItemLayout(INDEX index) const
[取得] レイアウトアイテム取得.
ILayout * GetItemLayout(INDEX index)
[取得] レイアウトアイテム取得.
size_t GetItemCount(void) const
[取得] アイテム数取得.
CParallelGroup(ELocation defloc=DEFAULT)
コンストラクタ
SIZE GetMinimumSize(void) const
[取得] 最小サイズ取得.
CParallelGroup & Add(const ILayout &layout, ELocation loc)
[設定] アイテム追加.
size_t GetGroupCount(void) const
[取得] グループ数取得.
CSequentialGroup & AddGroup(CParallelGroup &g, EDistance dis=Distance_Default, int val=0)
[追加] パラレルグループ追加.
CParallelGroup & GetGroup(INDEX index)
[取得] グループ取得.
EDistance GetGroupDistance(INDEX index) const
[取得] グループ長さ種取得.
CSequentialGroup(void)
コンストラクタ
SIZE GetMinimumSize(void) const
[取得] 最小サイズ取得.
CSequentialGroup & AutoEqualityDistance(int p=100)
[設定] 長さ平均化.
size_t GetGroupValue(INDEX index) const
[取得] グループ長さ値取得.
const CParallelGroup & GetGroup(INDEX index) const
[取得] グループ取得.
virtual bool GetMinimumSize(SIZE &_size) const
[取得] 最小サイズ取得.
void SetHorizontalGroup(CSequentialGroup &g)
[登録] 水平シーケンシャルグループ登録.
friend CParallelGroup Add(const ILayout &layout)
[作成] パラレルグループ作成&アイテム追加.
void SetVerticalGroup(CSequentialGroup &g)
[登録] 垂直シーケンシャルグループ登録.
friend CSequentialGroup AddGroup(CParallelGroup &g, EDistance dis=Distance_Default, int val=0)
[作成] シーケンシャルグループ作成&パラレルグループ追加.
CGroupLayout(void)
コンストラクタ
virtual ILayout * Clone(void) const
[作成] クローン作成.
virtual void Decide(int x, int y, WPARAM wParam, LPARAM lParam)
[処理] 決定.
friend CParallelGroup Add(ELocation defloc)
[作成] パラレルグループ作成.
EDistance
ParallelGroup の長さ種.
@ Distance_Absolute
絶対値(value は縦横の絶対値 MAKELONG(X, Y) で格納)
@ Distance_Rast
余り(一つのシーケンシャルグループに複数指定できません)
@ Distance_Rate
比率(value は比率を格納)
@ Distance_Default
デフォルト( Distance_ItemMax 、最後のみ Distance_Rast になります)。
friend CParallelGroup Add(const ILayout &layout, ELocation loc)
[作成] パラレルグループ作成&アイテム追加.
int ToInt(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
virtual bool GetMinimumSize(SIZE &_size) const =0
[取得] 最小サイズ取得.
virtual ILayout * Clone(void) const =0
[作成] クローン作成.