±ò²ûÇÑ ºÐÇÒ À©µµ¿ì ¸¸µé±â

 ¿©±â¼­ Âü°íÇÑ ÀÚ·á´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î 97³â 12¿ùÈ£¿Í 99³â 6¿ùÈ£ÀÔ´Ï´Ù.

 

 ½ºÇø´À» ¸¹ÀÌ ³ª´©´Â ÇÁ·Î±×·¥ÀÇ °æ¿ì È­¸éÀÌ ²Ï ÁöÀúºÐ ÇÒ ¼ö ÀÖ´Ù. ½ºÇø´¹Ùµµ µ¹ÃâµÅ º¸ÀÌ°í, °¢ È­¸éÀÇ ÄÁÆ®·Ñµµ µéÂß³¯ÂßÇϱ⠶§¹®¿¡ ÀüüÀûÀÎ ÀÎÅÍÆäÀ̽º°¡ ¾Æ¸¶Ãß¾î °°Àº ´À³¦À» µé°ÔÇÑ´Ù. ¿©±â¼­´Â ½ºÇø´ ±â´ÉÀ» Çϸ鼭 º¸ÀÌÁö ¾Ê°Ô ÇÏ´Â ·çƾÀ» »ìÆ캸°Ú´Ù.

 

 ½ºÇø´À» ¸¸µé¾îÁÖ´Â CSplitterWnd Ŭ·¡½º¿¡ OnDrawSplitter() ¶ó´Â °¡»óÇÔ¼ö°¡ ÀÖ´Ù. CDCÀÇ °´Ã¼¸¦ ¾ò¾î È­¸é¿¡ ±×·ÁÁÖ±â Á÷Àü¿¡ È£ÃâµÇ´Â ÇÔ¼öÀÌ´Ù. ±âÁ¸ ·çƾÀÎ CSplitterWnd::OnDrawSplitter() ¿¡¼­ ÇØÁÖ´Â ÀÏÀº ±×·Á¾ß ÇÒ ºÎºÐÀ» ¹Ù, º¸´õ, ¹Ú½º µîÀ¸·Î ±¸ºÐÇØ ½ºÇø´Ã³·³ º¸À̵µ·Ï °¢°¢ ±×·ÁÁÖ´Â ±â´ÉÀ» ¼öÇàÇÑ´Ù. µû¶ó¼­ ÀÌ ÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇØ µ¹Ãâ·çƾÀ» ½ÇÇàÇÏÁö ¾Êµµ·Ï ÇÏ¸é µÈ´Ù.

 °¡»óÇÔ¼ö¸¦ ÀçÁ¤ÀÇÇϱâ À§Çؼ± CSplitterWnd¸¦ ±â¹Ý Ŭ·¡½º·Î ÇÏ´Â ÆÄ»ýŬ·¡½º¸¦ Çϳª ¸¸µé¾î¾ß ÇÑ´Ù. ±×·±µ¥ Ŭ·¡½º À§Àúµå¿¡¼­ Ŭ·¡½º¸¦ »õ·Î ¸¸µé ¶§ Base class¸¦ ¾Æ¹«¸® µÚÁ®ºÁµµ CSplitterWnd ¶ó´Â Ŭ·¡½º´Â º¸ÀÌÁö ¾Ê´Â´Ù. splitter¶ó´Â °Ç º¸ÀÌÁö¸¸ ÀÌ°Ç ¾Æ¹«·± »ó°üÀÌ ¾ø´Â °Í °°´Ù. ºñÁÖ¾ó C++À» ¸¸µé ¶§ Base Class·Î ¾µ ¼ö Àִ Ŭ·¡½º¸¦ Á¦ÇÑÇØ ³õ¾Ò±â ¶§¹®¿¡ Ŭ·¡½º À§Àúµå·Î ÀÛ¾÷ÇÒ ¶§´Â ¸ðµç Ŭ·¡½º¸¦ ¸ðµÎ Base Class·Î ¾µ ¼ö ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù. ÇÏÁö¸¸ Ŭ·¡½º À§Àúµå°¡ Áö¿øÇÏÁö ¾Ê´Â´Ù°í Çؼ­ ¾µ ¼ö ¾ø´Â °ÍÀº ¾Æ´Ï´Ù. ¸¸¾à ±×·¯ÇÑ ¸î¸î Ŭ·¡½º¸¦ Base Class·Î ¾²·Á°í ÇÑ´Ù¸é generic CWnd¸¦ ¼±ÅÃÇÏ°í ³ªÁß¿¡ CWnd ºÎºÐÀ» ¸ðµÎ ÀڱⰡ Base Class·Î ¾²±æ ¿øÇϴ Ŭ·¡½º·Î ¹Ù²Ù¾î ÁÖ¸é µÈ´Ù. ¿©±â¼­´Â CWnd¸¦ CSplitterWnd·Î ¹Ù²Ù¾î ÁÖ¸é µÈ´Ù.

 Help¸¦ º¸¸é ´õ ÀÚ¼¼ÇÑ ³»¿ëÀ» È®ÀÎÇØ º¼ ¼ö ÀÖ´Ù. ¿©±â¼­´Â »õ·Î¸¸µç ÆÄ»ý Ŭ·¡½º¸¦ CMySplitterWnd ¶ó°í À̸§Áö¾ú´Ù. ´ÙÀ½ ¼Ò½º Äڵ忡¼­ ±½Àº ±Û¾¾ ºÎºÐÀÌ °íÄ£ ºÎºÐÀÌ´Ù.

 

==========================¼Ò½º ÄÚµå=========================


// MySplitterWnd.h
#if !defined(AFX_MYSPLITTERWND_H__9F0AFD05_1618_11D3_BB2A_C7F3CB57D251__INCLUDED_)
#define AFX_MYSPLITTERWND_H__9F0AFD05_1618_11D3_BB2A_C7F3CB57D251__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// MySplitterWnd.h : header file
//

/////////////////////////////////////////////////////////////////////////////
// CMySplitterWnd window

class CMySplitterWnd : public CSplitterWnd
{
// Construction
public:
        CMySplitterWnd();

// Attributes
public:

// Operations
public:

// Overrides
        // ClassWizard generated virtual function overrides
        //{{AFX_VIRTUAL(CMySplitterWnd)
protected:
        // Á÷Á¢ Ãß°¡ÇÑ °Í
        virtual void OnDrawSplitter( CDC* pDC, ESplitType nType, const CRect& rect );
        //}}AFX_VIRTUAL

// Implementation
public:
        virtual ~CMySplitterWnd();

        // Generated message map functions
protected:
        //{{AFX_MSG(CMySplitterWnd)
                // NOTE - the ClassWizard will add and remove member functions here.
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
};

/////////////////////////////////////////////////////////////////////////////

//{{AFX_INSERT_LOCATION}}
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_MYSPLITTERWND_H__9F0AFD05_1618_11D3_BB2A_C7F3CB57D251__INCLUDED_)


=============================================================================================


// MySplitterWnd.cpp : implementation file
//
#include "stdafx.h"
#include "MySplitterWnd.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMySplitterWnd

CMySplitterWnd::CMySplitterWnd()
{
}

CMySplitterWnd::~CMySplitterWnd()
{
}


BEGIN_MESSAGE_MAP(CMySplitterWnd, CSplitterWnd)
        //{{AFX_MSG_MAP(CMySplitterWnd)
                // NOTE - the ClassWizard will add and remove mapping macros here.
        //}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CMySplitterWnd message handlers

// MySplitterWnd ¿¡¼­ overriding ÇÑ ÇÔ¼ö
// VC 5.0¿¡¼­ CSplitterWnd °¡ ¼³Á¤µÇÁö ¾ÊÀ¸¹Ç·Î CWnd¿¡¼­ »ó¼Ó¹Þ¾Æ
// CWnd¸¸ CSplitterWnd·Î º¯°æ
// ÇÔ¼ö´Â Á÷Á¢ Ãß°¡
void CMySplitterWnd::OnDrawSplitter( CDC* pDC, ESplitType nType, const CRect& rect )
{
        if( nType == splitBorder ) {
                CClientDC dc( this );
                CPen *pBorderPen, *pOldPen;
                pBorderPen = new CPen( PS_SOLID, 3, ::GetSysColor( COLOR_3DFACE ) );
                pOldPen = dc.SelectObject( pBorderPen );
                dc.SelectStockObject( HOLLOW_BRUSH );
                dc.Rectangle( rect );
                dc.SelectObject( pOldPen );
                if ( pBorderPen ) delete pBorderPen;    
        }
        if( nType == splitBar )
        {
                CSplitterWnd::OnDrawSplitter( pDC, nType, rect );
         }
}

 

 ÇÔ¼öÀÇ ÀÎÀÚ¸¦ º¸¸é µð¹ÙÀ̽º ÄÁÅؽºÆ®ÀÇ Æ÷ÀÎÅÍÀÎ pDC°¡ ÀÖ°í, ±×·Á¾ß ÇÒ ½ºÇø´ÀÇ ºÎÀ§¸¦ ±¸ºÐÇØÁÖ´Â nType, ±×¸± ¿µ¿ªÀÇ ÁÂÇ¥¸¦ °¡Áö°í ÀÖ´Â rect µîÀÌ ÀÖ´Ù. ÀÌ Áß¿¡¼­ nType ¿¡ µé¾î¿Ã ¼ö ÀÖ´Â °ªÀº splitBox, splitBar, splitIntersection, splitBorder µîÀÌ´Ù. splitBox´Â ºÐÇÒ À©µµ¿ì°¡ µå·¡±ëÇÒ ¶§ ±×·ÁÁö´Â »óÀÚ¸¦ ³ªÅ¸³»¸ç, splitBar´Â ½ºÇø´ÀÇ Ç¥¸éÀ» ±×·ÁÁÙ ¶§ ³Ñ¾î¿Â´Ù. splitIntersectionÀº  ºÐÇÒ À©µµ¿ìÀÇ ±³Â÷µÇ´Â ºÎºÐÀ» ±×¸± ¶§ ³Ñ¾î¿À´Â °ªÀε¥ À©µµ¿ì 95¿¡¼­´Â ¹ß»ýÇÏÁö ¾Ê´Â´Ù. ¸¶Áö¸·À¸·Î splitBorder´Â ½ºÇø´ Áß µ¹Ãâ ºûÀ» ¹Þ´Â ºÎÀ§¿Í ±×¸²ÀÚ¸¦ ±×·ÁÁÙ ¶§ ³Ñ¾î¿Â´Ù. À§ÀÇ Äڵ带 º¸¸é Ç¥¸éÀ» ±×·ÁÁÙ ¶©(splitBar) ±âÁ¸ ·çƾÀ» ±×³É ½ÇÇàÇÏ°í splitBorderÀÏ ¶§¸¸ Ç¥¸é°ú °°Àº »ö»óÀ¸·Î Å׵θ®¸¸ ÀÖ´Â Åõ¸í »ç°¢ÇüÀ» ±×·Á º¸´õ ºÎºÐÀ» ±×·ÁÁÖ°Ô µÇ¾îÀÖ´Ù.

 

 ÀÌ¿Í °°ÀÌ ÀçÁ¤ÀÇÇÑ ´ÙÀ½ MySplitterWnd.h Çì´õÆÄÀÏÀ» MainFrm.h Çì´õÆÄÀÏ¿¡ include ½ÃÄÑÁÖ°í CSplitterWnd ´ë½Å CMySplitterWnd¸¦ »ç¿ëÇÏ¸é ±ò²ûÇÑ ºÐÇÒ À©µµ¿ì¸¦ ¸¸µé ¼ö ÀÖ´Ù.