[MFC] Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
์๊ฐ
Visual Studio 2015 MFC์๋ ๋์ ๋ ์ด์์(Dynamic Layout)
๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ Dialog์ Resizing์ ๋ฐ๋ผ ์๋์ผ๋ก Control๋ค์ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋ ์ ๋๋ฉ์ด์
์ ๋ณด๋ฉด ์ดํดํ๋๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค.

๋ณดํต ์ผ๋ฐ ํ๋ก๊ทธ๋จ๋ค์ ์ด ๊ธฐ๋ฅ์ด ๊ฑฐ์ ๋ค์ด๊ฐ ์์ต๋๋ค. ์คํ๋ ค ๋์ ๋ ์ด์์์ด ์ ์ฉ๋์ง ์์ ํ๋ก๊ทธ๋จ์ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต์ฃ . ํ์ง๋ง ์ฅ๋น ํ๋ก๊ทธ๋จ์์๋ ๋ณดํต ์ฌ์ฉํ์ง ์์ต๋๋ค. ๋ชจ๋ํฐ ํฌ๊ธฐ(๋๋ ์๋์ฐ ํด์๋)๊ฐ ๊ณ ์ ๋์ด ์๊ณ , ์์ ์๊ฐ ํ๋ก๊ทธ๋จ์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๊ฒฝ์ฐ๋ ๊ทนํ ๋๋ฌผ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฒ๋ค๊ฐ ํ๋ก๊ทธ๋จ์ ์๋ง์ ์ปจํธ๋กค์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ๋์ ๋ ์ด์์์ ์ ์ฉํ๋ค๋ ๊ฒ์ ๋ถํ์ํ ์์ ์ด๋ผ ์ฌ๊ฒจ์ง๋๋ค.
์ด๋ฒ ๋ณธ๋ฌธ์์๋ Visual Studio 2015 MFC
๊ธฐ์ค, Dialog ํ๋ก์ ํธ
์์ ๋ช ๊ฐ์ง ์ปจํธ๋กค์ ๋์ ๋ ์ด์์ ์์ ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
๋ฐ๋ผํ๊ธฐ
UI ์ปจํธ๋กค ๊ตฌ์ฑ
MFC์์ Dialog ํ๋ก์ ํธ๋ฅผ ํ๋ ์์ฑํ๊ณ , ๋ฆฌ์์ค ํธ์ง๊ธฐ์์ ์๋์ ๊ฐ์ด ์ปจํธ๋กค์ ์ถ๊ฐํฉ๋๋ค. ์ปจํธ๋กค๋ง ์ถ๊ฐํ๊ณ ์ด๋ฒคํธ๋ ์ถ๊ฐํ์ง ์์ ๊ฒ๋๋ค.

์ฐธ๊ณ ๋ก, Dialog ์์ฑ ์ค Border
์ ๊ฐ์ Resizing
์
๋๋ค. Resizing
์ผ๋ก ๋์ด์์ด์ผ ํฌ๊ธฐ ์กฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค.

๋์ ๋ ์ด์์ ์ค์
๋ฆฌ์์ค ํธ์ง๊ธฐ์์ ์ปจํธ๋กค์ ์์ฑ ์ค ๋์ ๋ ์ด์์ ๊ฐ์ ์ค์ ํ์ฌ, ๋์ ์ด๋ ๋ฐ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ด๋ฒ ์์ ์์๋ ์ฝ๋์์ ์ค์ ํฉ๋๋ค.

์๋์ ๊ฐ์ด ๋์ ๋ ์ด์์์ ์ค์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ์๋ ์ฝ๋์๋ ์ค์ ๊ฐ๋ฅํ ๋ช ๊ฐ์ง ์ด๋ ๋ฐ ํฌ๊ธฐ ์กฐ์ ์ต์
์ด ํฌํจ๋์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ manager
->
AddItem()
์ ํตํด ์ปจํธ๋กค์ ๋์ ๋ ์ด์์ ์ต์
๊ณผ ํจ๊ป ๋ฑ๋ก์ด ๊ฐ๋ฅํฉ๋๋ค.
void CExamDynamicLayoutDlg::SetupForDynamicLayout() { // ๋์ ๋ ์ด์์ ํ์ฑํ. this->EnableDynamicLayout(); /* ์ด๋ ์ต์
*/ // 1. ์ด๋ํ์ง ์์. auto move_none = CMFCDynamicLayout::MoveSettings{}; // 2. X,Y ๋ฐฉํฅ์ผ๋ก 100% ๋น์จ ์ด๋. auto move_both_100 = CMFCDynamicLayout::MoveSettings{}; move_both_100.m_nXRatio = 100; move_both_100.m_nYRatio = 100; // 3. X ๋ฐฉํฅ์ผ๋ก๋ง 100% ๋น์จ ์ด๋. auto move_x_100 = CMFCDynamicLayout::MoveSettings{}; move_x_100.m_nXRatio = 100; // 4. Y ๋ฐฉํฅ์ผ๋ก๋ง 100% ๋น์จ ์ด๋. auto move_y_100 = CMFCDynamicLayout::MoveSettings{}; move_y_100.m_nYRatio = 100; /* ํฌ๊ธฐ ์กฐ์ ์ต์
*/ // 1. ํฌ๊ธฐ ์กฐ์ ํ์ง ์์. auto size_none = CMFCDynamicLayout::SizeSettings{}; // 2. X,Y ๋ฐฉํฅ์ผ๋ก 100% ๋น์จ ํฌ๊ธฐ ์กฐ์ . auto size_both_100 = CMFCDynamicLayout::SizeSettings{}; size_both_100.m_nXRatio = 100; size_both_100.m_nYRatio = 100; // 3. X ๋ฐฉํฅ์ผ๋ก๋ง 100% ๋น์จ ํฌ๊ธฐ ์กฐ์ . auto size_x_100 = CMFCDynamicLayout::SizeSettings{}; size_x_100.m_nXRatio = 100; // 4. Y ๋ฐฉํฅ์ผ๋ก๋ง 100% ๋น์จ ํฌ๊ธฐ ์กฐ์ . auto size_y_100 = CMFCDynamicLayout::SizeSettings{}; size_y_100.m_nYRatio = 100; // Dialog์ ๋์ ๋ ์ด์์ ํฌ์ธํฐ ํ๋. auto manager = this->GetDynamicLayout(); // ๋์ ๋ ์ด์์ ์์ฑ. manager->Create(this); // ๋์ ๋ ์ด์์์ ๋ฑ๋กํ ์ปจํธ๋กค ์ถ๊ฐ. manager->AddItem(IDC_GRP_FORM, move_none, size_both_100); manager->AddItem(IDC_EDIT_NAME, move_none, size_x_100); manager->AddItem(IDC_EDIT_AGE, move_none, size_x_100); manager->AddItem(IDC_BTN_SUBMIT, move_none, size_both_100); }
์ ํจ์๋ OnOnInitDialog()
์ ์ถ๊ฐํ์ฌ, ๋ค์ด์ผ๋ก๊ทธ ์ด๊ธฐํ ๋ ํธ์ถ๋๋๋ก ํฉ๋๋ค.
BOOL CExamDynamicLayoutDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // ... // ๋์ ๋ ์ด์์ ์ค์ . SetupForDynamicLayout(); return TRUE; // ํฌ์ปค์ค๋ฅผ ์ปจํธ๋กค์ ์ค์ ํ์ง ์์ผ๋ฉด TRUE๋ฅผ ๋ฐํํฉ๋๋ค. }
์ด๋ ๊ฒ๋ง ํ๋ฉด ๋ค์ด์ผ๋ก๊ทธ์ ๋์ ๋ ์ด์์์ด ์ ์ฉ๋ฉ๋๋ค. ํ์ง๋ง ๋ฌธ์ ์ ์ด ์์ต๋๋ค. ์๋ ์ ๋๋ฉ์ด์ ๊ณผ ๊ฐ์ด, ์บก์ ๋ฐ๊น์ง ๋ฆฌ์ฌ์ด์ง ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.

๊ด์ฐฎ๋ค๋ฉด ๋์ด๊ฐ๋ ๋์ง๋ง, ์์ ๊ฐ์ ํ์์ ๋ง๊ธฐ ์ํด์๋ ์๋์ ์์ ์ ์ํํด์ผ ํฉ๋๋ค.
์ต์ ๋ฆฌ์ฌ์ด์ง ํฌ๊ธฐ ์ง์ ํ๊ธฐ
๋ฆฌ์ฌ์ด์ง ์ ์ต์ ์ฌ์ด์ฆ๋ฅผ ์ง์ ํ๊ธฐ ์ํด์๋, ๋ค์ด์ผ๋ก๊ทธ์ GetMinMaxInfo
๋ฉ์์ง๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํด๋์ค ๋ง๋ฒ์ฌ์์ ๋ฉ์์ง๋ฅผ ๋ฑ๋กํฉ๋๋ค. ํด๋์ค ๋ง๋ฒ์ฌ๋ ctrl + shift + x
ํค๋ฅผ ์
๋ ฅํ๋ฉด ์์ฑ๋ฉ๋๋ค.

๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ํค๋์ ์ต์ ์์ญ์ ์ํ ๋ณ์๋ฅผ ์ ์ํ๊ณ , OnInitDialog()
์์ ์ต์ด ํ๋ก๊ทธ๋จ ์คํํ์ ๋์ ํฌ๊ธฐ๋ฅผ ์ป์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ํฌ๊ธฐ๋ฅผ ์ต์ ์ฌ์ด์ฆ๋ก ๊ณ ์ ํ๋ ๊ฒ์
๋๋ค.
// ํค๋์ ์ ์. CRect m_rcMinimumDialog; BOOL CExamDynamicLayoutDlg::OnInitDialog() { CDialogEx::OnInitDialog(); /... // ๋์ ๋ ์ด์์ ์ค์ . SetupForDynamicLayout(); // ๋ฆฌ์ฌ์ด์ง ์ต์ ํฌ๊ธฐ๋ฅผ ์ํ ์์ญ ํ๋. GetClientRect(&m_rcMinimumDialog); CalcWindowRect(m_rcMinimumDialog); return TRUE; // ํฌ์ปค์ค๋ฅผ ์ปจํธ๋กค์ ์ค์ ํ์ง ์์ผ๋ฉด TRUE๋ฅผ ๋ฐํํฉ๋๋ค. } void CExamDynamicLayoutDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI) { lpMMI->ptMinTrackSize.x = m_rcMinimumDialog.Width(); lpMMI->ptMinTrackSize.y = m_rcMinimumDialog.Height(); }
๋ง์น๋ฉฐ
์ด๊ฒ์ผ๋ก ๋์ ๋ ์ด์์ ๊ธฐ๋ฅ์ด ํฌํจ๋ ๋ค์ด์ผ๋ก๊ทธ ์์ ์ฝ๋๋ฅผ ์์ฑํด ๋ดค์ต๋๋ค. ์์ ์ฝ๋๋ ์ฒจ๋ถํ๋, ์ฐธ๊ณ ํ์ธ์.
์ฐธ๊ณ
'Programming > MFC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[MFC] MFC์์ XLNT๋ฅผ ์ด์ฉํ ์์ (Excel)ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (์์ ํฌํจ)
[MFC] MFC์์ XLNT๋ฅผ ์ด์ฉํ ์์ (Excel)ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (์์ ํฌํจ)
2020.05.31 -
[MFC] CFormView ๊ธฐ๋ฐ Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
[MFC] CFormView ๊ธฐ๋ฐ Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
2020.05.19์ง๋ ํฌ์คํ ์์ Dialog ๊ธฐ๋ฐ Dynamic Layout ์ ์ฉ ๋ฐฉ๋ฒ์ ์๊ฐํ์์ต๋๋ค. [MFC] Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizing ํ๊ธฐ(์์ ํฌํจ) [MFC] Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ) ์๊ฐ Visual Studio 2015 MFC์๋ ๋์ ๋ ์ด์์(Dynamic Layout) ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ Dialog์ Resizing์ ๋ฐ๋ผ ์๋์ผ๋ก Control๋ค์ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์๋ ์ ๋๋ฉ์ด์ ์ ๋ณด๋ฉดโฆ luckygg.tistory.com ์ด๋ฒ ํฌ์คํ ์์๋ CFormView ๊ธฐ๋ฐ Dynamic Layout ์ ์ฉ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์ ํฉ๋๋ค. ์ด๋ฒ์ ๋ค๋ฃฐ ์์ ๋ ์๋ ๋งํฌ์ ์์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ์์ ์ ๋โฆ -
[MFC] Tab Control์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๋ฌ Form ์ค์์นญํ๊ธฐ(์์ ํฌํจ)
[MFC] Tab Control์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๋ฌ Form ์ค์์นญํ๊ธฐ(์์ ํฌํจ)
2019.09.09์ง๋ ํฌ์คํ ์์ ๋ฉ์ธ ๋ค์ด์ผ๋ก๊ทธ์ ์๋ก์ด ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ๋ถ์ด๋ ์์ ๋ฅผ ๋ณด์ฌ๋๋ ธ์์ต๋๋ค. [MFC] Dialog์ Form(Dialog) ๋ถ์ด๊ธฐ(์์ ํฌํจ) [MFC] Dialog์ Form(Dialog) ๋ถ์ด๊ธฐ(์์ ํฌํจ) Dialog์ Dialog๋ฅผ ๋ถ์ธ๋ค? ์ด๋ฒ ํฌ์คํ ์์๋ ๋ค์ด์ผ๋ก๊ทธ์ ์๋ก์ด ๋ค์ด์ผ๋ก๊ทธ(CFormView ๊ธฐ๋ฐ)๋ฅผ ๋ถ์ด๋ ์์ ๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ณ ์ ํฉ๋๋ค. ์ด๊ฒ ๋ฌด์จ ์๋ฏธ์ธ์ง ๊ฐ์ด ์ ์ค์์ฃ ? ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ์๋ ์ด๋ฏธ์ง๋ฅผโฆ luckygg.tistory.com Form ์ค์์นญ? Tab Control๊ณผ ๋ค๋ฅธ ์ ์? ์ด๋ฒ์๋ ์ด ๋ฐฉ๋ฒ์ ์์ฉํ์ฌ ์ฌ๋ฌ Form์ ์ค์์นญํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ ค๊ณ ํฉ๋๋ค. ์ฌ์ค ์ด ๊ธฐ๋ฅ์ MFC์ Tab Control๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ธ๋ฐ์. ์์๋ค์ํผ MFC UI ์ปจโฆ -
[MFC] Dialog์ Form(Dialog) ๋ถ์ด๊ธฐ(์์ ํฌํจ)
[MFC] Dialog์ Form(Dialog) ๋ถ์ด๊ธฐ(์์ ํฌํจ)
2019.09.06Dialog์ Dialog๋ฅผ ๋ถ์ธ๋ค? ์ด๋ฒ ํฌ์คํ ์์๋ ๋ค์ด์ผ๋ก๊ทธ์ ์๋ก์ด ๋ค์ด์ผ๋ก๊ทธ(CFormView ๊ธฐ๋ฐ)๋ฅผ ๋ถ์ด๋ ์์ ๋ฅผ ๋ณด์ฌ๋๋ฆฌ๊ณ ์ ํฉ๋๋ค. ์ด๊ฒ ๋ฌด์จ ์๋ฏธ์ธ์ง ๊ฐ์ด ์ ์ค์์ฃ ? ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ์๋ ์ด๋ฏธ์ง๋ฅผ ์ค๋นํ์ต๋๋ค. ์ฆ, ๋ฉ์ธ ๋ค์ด์ผ๋ก๊ทธ์ ํน์ ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ํน์ ์์ญ์ ๋ถ์ด๋ ๊ฒ์ ๋๋ค. ์ด๋ฐ ์์ ์ด ์ ํ์ํ ๊น์? ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ๋ชจ๋ํ๋ ์ ๋ง ์ค์ํฉ๋๋ค. ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ํ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ฃ . ๋ง์ฝ, ๋ชจ๋ํ๋ฅผ ํ์ง ์๊ณ ํ๋์ ํด๋์ค ์์ ์จ๊ฐ ์ฝ๋๋ฅผ ๊ตฌํํด ๋์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ง์ ๊ฐ๋ฐํ ๊ฐ๋ฐ์๋ ๋ฌผ๋ก ํฅํ ์ ์ง๋ณด์ ๊ฐ๋ฐ์๋ ์์๋ณด๊ธฐ๊ฐ ํ๋ค ๊ฒ์ ๋๋ค. ์ด๋๋ถํฐ ์ ๋ชฝ์ด ์์๋๊ฒ ์ฃ . UI๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ํ๋์ ๋ค์ด์ผ๋ก๊ทธ์ ๋ณด์ธ๋ค๊ณ ํด์ ์จ๊ฐ ์ปจํธ๋กค๋ค์ ๋ฐฐ์นํด๋ฒโฆ
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.