[MFC] CFormView ๊ธฐ๋ฐ Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
์ง๋ ํฌ์คํ
์์ 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 ์ค์์นญํ๊ธฐ(์์ ํฌํจ)
์ง๋ ํฌ์คํ ์์ ๋ฉ์ธ ๋ค์ด์ผ๋ก๊ทธ์ ์๋ก์ด ๋ค์ด์ผ๋ก๊ทธ๋ฅผ ๋ถ์ด๋ ์์ ๋ฅผ ๋ณด์ฌ๋๋ ธ์์ต๋๋ค. [MFC] Dialog์ Form(Dialog) ๋ถ์ด๊ธฐ(์์ ํฌํจ) [MFC] Dialog์ Form(Dialog) ๋ถ์ด๊ธฐ(์์ ํฌํจ) Dialog์ Dialog๋ฅผ ๋ถ.
luckygg.tistory.com
์๊ฐ
์ด๋ฒ ์์ ๋ Main Dialog
์ Picture Control
๋ก ์์ญ์ ์ง์ ํ๊ณ , ํด๋น ์์ญ์ ์ฌ๋ฌ ๊ฐ์ Dialog
๋ฅผ ์ค์์นญํ๋ฉฐ ๋ณด์ฌ์ฃผ๋ ๋์์ ๋ณด์ฌ์ค๋๋ค. Main Dialog
๋ฐ ํ์ Dialog
๊ฐ ์๋ ์ํ์์ Dynamic Layout
์ ์ ์ฉํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
์ฌ์ค ์์ฃผ ๊ฐ๋จํฉ๋๋ค. Main Dialog
์์ ํ์ Dialog
3๊ฐ๋ฅผ Dyname Layout
์ ๋ฑ๋กํ๊ณ , ๊ฐ ํ์ Dialog
์์๋ ๋์ํ ์ปจํธ๋กค์ ๋ฑ๋กํ๋ฉด ๋๋ ๊ฒ์
๋๋ค. ์์ธํ ๊ฑด ์ฐจ๋ก์ฐจ๋ก ์์ ์ฝ๋๋ก ์ค๋ช
ํ๊ฒ ์ต๋๋ค.
์ด๋ฒ ์์ ๋ Visual Studio 2015 MFC
๊ธฐ์ค, Dialog ํ๋ก์ ํธ
์์ ์งํํ๊ฒ ์ต๋๋ค. ์ฝ๋์ ์ค์ํ ๋ถ๋ถ๋ง ๋ณธ๋ฌธ์์ ์๊ฐํ๊ณ , ์์ธํ ๋ด์ฉ์ ์ฒจ๋ถ๋ ์์ ์ฝ๋์์ ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค.
๋ฐ๋ผ ํ๊ธฐ
UI ์ปจํธ๋กค ๊ตฌ์ฑ
์๋ ๋งํฌ์ ์์ ์ฝ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Dynamic Layout
์ ์๊ฐํฉ๋๋ค. ์ฝ๊ฐ์ UI๊ฐ ๋ณ๊ฒฝ๋์ง๋ง, ์ด๋ ต์ง ์์ผ๋ฏ๋ก ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
[MFC] Tab Control์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๋ฌ Form ์ค์์นญํ๊ธฐ(์์ ํฌํจ)
๊ฐ ํ์ Dialog์ ๋ฒํผ์ ์ถ๊ฐํ์ต๋๋ค.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
Main Dialog์ ๋์ ๋ ์ด์์ ์ค์
Main Dialog
์์ ๋์ ๋ ์ด์์
์ ์ฉ์ ์ํด, ์๋์ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค. ์ด์ ์์ ์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ฌ๋ฌ ๊ฐ์ ์ด๋ ๋ฐ ํฌ๊ธฐ ์กฐ์ ์ต์
์ ๋ณด์ฌ์ฃผ๊ณ ์์ต๋๋ค. ํ์ Dialog
๋ ์ด๋ํ์ง ์๊ณ , X, Y ๋ฐฉํฅ์ผ๋ก 100% ๋น์จ๋ก ํฌ๊ธฐ๋ง ์กฐ์ ํ๋๋ก ํฉ๋๋ค.
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(IDD_DIALOG_FORM1, move_none, size_both_100); manager->AddItem(IDD_DIALOG_FORM2, move_none, size_both_100); manager->AddItem(IDD_DIALOG_FORM3, move_none, size_both_100); }
์ ํจ์๋ OnOnInitDialog()
์ ์ถ๊ฐํ์ฌ, ๋ค์ด์ผ๋ก๊ทธ ์ด๊ธฐํ ๋ ํธ์ถ๋๋๋ก ํฉ๋๋ค.
BOOL CExamDynamicLayoutDlg::OnInitDialog() { CDialogEx::OnInitDialog(); //... // ํ์ Dialog ์ด๊ธฐํ. InitializeForms(); // ๋์ ๋ ์ด์์ ์ค์ . SetupForDynamicLayout(); // ๋ฆฌ์ฌ์ด์ง ์ต์ ํฌ๊ธฐ๋ฅผ ์ํ ์์ญ ํ๋. GetClientRect(&m_rcMinimumDialog); CalcWindowRect(m_rcMinimumDialog); return TRUE; // ํฌ์ปค์ค๋ฅผ ์ปจํธ๋กค์ ์ค์ ํ์ง ์์ผ๋ฉด TRUE๋ฅผ ๋ฐํํฉ๋๋ค. }
InitializeForms()
๋ ํ์ Dialog
์ด๊ธฐํ๋ฅผ ์ํ ํจ์์ด๊ณ , GetClientRect()
, CalcWindowRect()
๋ Resizing
์ ์ต์ ๊ฐ์ ์ค์ ํ๊ธฐ ์ํ ์ฝ๋์
๋๋ค.
ํ์ Dialog์ ๋์ ๋ ์ด์์ ์ค์
์ด ์์ ์ ํ์ Dialog
๋ CDialogEx
๋ฅผ ์์๋ฐ์ ๊ฒ์ด ์๋๋ผ, CFormView
๋ฅผ ์์๋ฐ์ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์, ๋์ ๋ ์ด์์์ ์ค์ ์ OnInitDialog()
๊ฐ ์๋ HandleInitDialog()
์ธ ์ ์ ์ฃผ์๋ฅผ ํด์ผ ํฉ๋๋ค. HandleInitDialog()
๋ ํด๋์ค ๋ง๋ฒ์ฌ์์ ๋ฑ๋ก์ด ์๋๋ฏ๋ก, ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋์์ ๋ฑ๋กํฉ๋๋ค.
// CForm Header ์ ์. LRESULT HandleInitDialog(WPARAM, LPARAM); void SetupForDynamicLayout(); // CForm Source ๊ตฌํ. BEGIN_MESSAGE_MAP(CForm1, CFormView) ON_MESSAGE(WM_INITDIALOG, HandleInitDialog) END_MESSAGE_MAP() LRESULT CForm1::HandleInitDialog(WPARAM, LPARAM) { Default(); // allow default to initialize first (common dialogs/etc) // create OLE controls COccManager* pOccManager = afxOccManager; if ((pOccManager != NULL) && (m_pOccDialogInfo != NULL)) { if (!pOccManager->CreateDlgControls(this, m_lpszTemplateName, m_pOccDialogInfo)) { TRACE0("Warning: CreateDlgControls failed during form view init.\n"); return FALSE; } SetupForDynamicLayout(); } return FALSE; // don't set focus until later } void CForm1::SetupForDynamicLayout() { this->EnableDynamicLayout(); auto move_none = CMFCDynamicLayout::MoveSettings{}; auto size_both_100 = CMFCDynamicLayout::SizeSettings{}; size_both_100.m_nXRatio = 100; size_both_100.m_nYRatio = 100; auto manager = this->GetDynamicLayout(); manager->Create(this); manager->AddItem(IDC_BUTTON1, move_none, size_both_100); }
์ด์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ํ์ Dialog ๋ชจ๋ ๋์ ๋ ์ด์์์ ์ํ ์ฝ๋๋ฅผ ์ ์ฉํฉ๋๋ค. ๋ณธ๋ฌธ์ ์ฒจ๋ถ๋ ์์ ์ฝ๋๋ฅผ ์คํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
![](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
'Programming > MFC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #1
[MFC] ๊ทธ๋ฆผํ(mspaint) ๋ง๋ค๊ธฐ ํ๋ก์ ํธ #1
2020.12.31 -
[MFC] MFC์์ XLNT๋ฅผ ์ด์ฉํ ์์ (Excel)ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (์์ ํฌํจ)
[MFC] MFC์์ XLNT๋ฅผ ์ด์ฉํ ์์ (Excel)ํ์ผ ์ฝ๊ณ ์ฐ๊ธฐ (์์ ํฌํจ)
2020.05.31 -
[MFC] Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
[MFC] Dynamic Layout ์ ์ฉํ์ฌ ์ปจํธ๋กค Resizingํ๊ธฐ(์์ ํฌํจ)
2020.05.16 -
[MFC] Tab Control์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๋ฌ Form ์ค์์นญํ๊ธฐ(์์ ํฌํจ)
[MFC] Tab Control์ ์ฌ์ฉํ์ง ์๊ณ ์ฌ๋ฌ Form ์ค์์นญํ๊ธฐ(์์ ํฌํจ)
2019.09.09
๋๊ธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.