±ò²ûÇÑ ºÐÇÒ À©µµ¿ì ¸¸µé±â
¿©±â¼ Âü°íÇÑ ÀÚ·á´Â ¸¶ÀÌÅ©·Î¼ÒÇÁÆ®¿þ¾î 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¸¦ »ç¿ëÇÏ¸é ±ò²ûÇÑ ºÐÇÒ À©µµ¿ì¸¦ ¸¸µé ¼ö ÀÖ´Ù.