Æûºä¿¡ ÇÁ·ÎÆÛƼ ½ÃÆ® ³Ö±â 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. Æûºä Ŭ·¡½º¿¡ »õ·Î ¸¸µç ÇÁ·ÎÆÛƼ ½ÃÆ®ÀÇ Æ÷ÀÎÅ͸¦ Ãß°¡ÇÑ´Ù.

 ¹°·Ð »õ·Î ¸¸µç Ŭ·¡½º¸¦ ¾²±â Àü¿¡ ÆûºäÀÇ Çì´õÆÄÀÏ¿¡ »õ·Î ¸¸µç ÇÁ·ÎÆÛƼ ½ÃÆ®ÀÇ Çì´õÆÄÀÏÀ» ÀÎŬ·çµå ÇÑ´Ù.

 

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)

9. CPropertySheet ÀÇ »ý¼ºÀÚ¿¡ AddPage() ÇÔ¼ö¸¦ ½á¼­ °¢°¢ÀÇ ÆäÀÌÁö¸¦ Ãß°¡ÇÑ´Ù.

CMyPropertySheet::CMyPropertySheet(CWnd *pParentWnd)
{
        AddPage(&m_Page1);
        AddPage(&m_Page2);

}

 

- the end of this article -