Æûºä¿¡ ÇÁ·ÎÆÛƼ ½ÃÆ® ³Ö±â ver 2.0
ver 2.0 ¼öÁ¤»çÇ× : ÇÁ·ÎÆÛƼ ½ÃÆ®ÀÇ ¿À¸¥Âʰú ¾Æ·¡ÂÊ ºÎºÐÀÇ °æ°è°¡ ³ª¿ÀÁö ¾Ê´Â ºÎºÐ ÇØ°á.
Âü°íÀÚ·á : ¼Àû 'µû¶óÇØº¸¼¼¿ä Visual C++ 6',
www.codeguru.comÀÇ
Property Sheet ¼½¼Ç "Creating a Property Sheet Inside a Dialog" ÀÇ
Comments ºÎºÐ "Solution to minimum width problem"
ÀϹÝÀûÀ¸·Î ÇÁ·ÎÆÛƼ ½ÃÆ®´Â ´ëÈ »óÀÚ¿¡¼ ±¸ÇöµÇ´Âµ¥ ¿©±â¼´Â Æûºä¿¡ ÇÁ·ÎÆÛƼ ½ÃÆ®¸¦ ³Ö¾îº¼ °ÍÀÌ´Ù.
1. Æûºä¸¦ °¡Áö´Â ÇÁ·ÎÁ§Æ®¸¦ Çϳª ¸¸µç´Ù.
2. ÀÚ½ÅÀÇ Æûºä¿¡ ÇÁ·ÎÆÛƼ ½ÃÆ®¸¦ ³ÖÀ» À§Ä¡¸¦ Ç¥½ÃÇÏ´Â ÄÁÆ®·ÑÀ» ¸¸µç´Ù. ½ÃÆ®ÀÇ ºÎ¸ð À§µµ¿ì·Î ±×¸² ÄÁÆ®·Ñ(picture ÄÁÆ®·Ñ)À» »ç¿ëÇÑ´Ù. ±×¸² ÄÁÆ®·ÑÀ» Visible·Î ŸÀÔÀ» FrameÀ¸·Î Çϰí, ID´Â IDC_PLACEHOLDER·Î ÇÏÀÚ.
3. CPropertySheet¿¡¼ ÆÄ»ýµÈ CMyPropertySheet Ŭ·¡½º¸¦ ¸¸µç´Ù.
ÀÌ Å¬·¡½º¿¡¼ ´ÙÀ½°ú °°Àº »ý¼ºÀÚ¸¦ »õ·Î ¸¸µç´Ù.
CMyPropertySheet::CMyPropertySheet(CWnd *pParentWnd = NULL);
±×¸®°í ³ª¸ÓÁö´Â ¸ðµÎ Áö¿î´Ù.
(Ãß°¡³»¿ë : ÆÄ»ýŬ·¡½º¸¦ ¸¸µéÁö ¾Ê°í CPropertySheet¸¦ ±×³É »ç¿ëÇÒ °æ¿ì, ¿©·¯°³ÀÇ ÆäÀÌÁö¸¦ Ãß°¡ÇßÀ» ¶§ óÀ½ ÆäÀÌÁö¸¸ Ç¥½ÃµÇ°í, ´Ù¸¥ ÆäÀÌÁö°¡ ³ªÅ¸³ªÁö ¾Ê´õ±º¿ä)
4. Æûºä Ŭ·¡½º¿¡ »õ·Î ¸¸µç ÇÁ·ÎÆÛƼ ½ÃÆ®ÀÇ Æ÷ÀÎÅ͸¦ Ãß°¡ÇÑ´Ù.
public:
CMyPropertySheet*
m_pMyPropertySheet;
¹°·Ð »õ·Î ¸¸µç Ŭ·¡½º¸¦ ¾²±â Àü¿¡ ÆûºäÀÇ Çì´õÆÄÀÏ¿¡ »õ·Î ¸¸µç ÇÁ·ÎÆÛƼ ½ÃÆ®ÀÇ Çì´õÆÄÀÏÀ» ÀÎŬ·çµå ÇÑ´Ù.
#include "MyPropertySheet.h"
5. ÆûºäÀÇ OnInitialUpdate() ÇÔ¼ö¿¡ ´ÙÀ½À» Ãß°¡ÇÑ´Ù.
void CFSView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
//
create and associated the property sheet with the "place holder" window
CWnd
*pPlaceHolder = GetDlgItem(IDC_PLACEHOLDER);
m_pMyPropertySheet
= new CMyPropertySheet(pPlaceHolder);
if(!m_pMyPropertySheet->Create(pPlaceHolder,
WS_CHILD | WS_VISIBLE, 0)) {
delete
m_pMyPropertySheet;
m_pMyPropertySheet
= NULL;
return;
}
//
fit the property sheet into the place holder window, and show it
CRect
rcSheet;
pPlaceHolder->GetWindowRect(&rcSheet);
ScreenToClient(&rcSheet);
//
ÀÌ ºÎºÐÀÌ ¿À¸¥Âʰú ¾Æ·¡ÂÊÀÇ borderºÎºÐÀ» ÇØ°áÇÑ ºÎºÐ
CTabCtrl
*TabCtrl = m_pMyPropertySheet->GetTabControl();
TabCtrl->MoveWindow(0,
0, rcSheet.Width(), rcSheet.Height());
m_pMyPropertySheet->SetWindowPos(NULL,
0, 0,
rcSheet.Width(),
rcSheet.Height(), SWP_NOZORDER | SWP_NOACTIVATE);
m_pMyPropertySheet->ModifyStyleEx(0,
WS_EX_CONTROLPARENT);
m_pMyPropertySheet->ModifyStyle(0,
WS_TABSTOP);
m_pMyPropertySheet->SetActivePage(0);
// Force the right & bottom borders to appear
}
6. ÇÁ·ÎÆÛƼ ½ÃÆ® ¾È¿¡ ³ÖÀ» ÇÁ·ÎÆÛƼ ÆäÀÌÁö¸¦ À§ÇÑ ´ÙÀ̾ó·Î±×¸¦ ¸¸µç´Ù.
style : child , Border : thin, Title bar ¸¸ üũµÇµµ·Ï ÇÑ´Ù.
7. ¸¸µé¾îÁø ´ÙÀ̾ó·Î±×¿¡ ¿¬°áµÇ´Â Ŭ·¡½ºµéÀ» °¢°¢ ¸¸µç´Ù. °ü¸®»óÀÇ ÆíÀǸ¦ À§ÇØ ÇÑ ÆÄÀÏ¿¡ ÇÁ·ÎÆÛƼ ÆäÀÌÁöÀÇ Å¬·¡½ºµéÀ» ¸ð¾ÆµÎ´Â °Íµµ ÁÁ°Ú´Ù. ¿©±â¼´Â ´ÙÀ̾ó·Î±×¸¦ 2°³ ¸¸µé°í,±×¿¡ ¿¬°áµÇ´Â Ŭ·¡½º¸¦ CPage1, CPage2 ¶ó°í À̸§À» Áö¾ú´Ù.
º£À̽º Ŭ·¡½º´Â ¹Ýµå½Ã CPropertyPage ·Î ÇØ¾ßÇÑ´Ù.
8. CMyPropertySheet Ŭ·¡½º¿¡ °¢ ÆäÀÌÁöÀÇ °´Ã¼¸¦ ¸â¹öº¯¼ö·Î ¼±¾ðÇÑ´Ù. ±×¸®°í Çì´õÆÄÀϵµ ÀÎŬ·çµåÇÑ´Ù. (MyPropertySheet.h)
#include "Page1.h"
#include "Page2.h"
private:
CPage1
m_Page1;
CPage2 m_Page2;
9. CPropertySheet ÀÇ »ý¼ºÀÚ¿¡ AddPage() ÇÔ¼ö¸¦ ½á¼ °¢°¢ÀÇ ÆäÀÌÁö¸¦ Ãß°¡ÇÑ´Ù.
CMyPropertySheet::CMyPropertySheet(CWnd *pParentWnd)
{
AddPage(&m_Page1);
AddPage(&m_Page2);
}
- the end of this article -