ºÐÇÒ À©µµ¿ì¿¡¼ ÇÑÂÊ Ã¢ÀÇ ¹öÆ°À» ´·¶À» ¶§ ´Ù¸¥ âÀÇ ºä°¡ »õ·Î¿î ºä·Î ÀüȯµÇµµ·Ï ÇÏ·Á°í Çϴµ¥ Àß ¾ÈµÇ³×¿ä. ¹æ¹ýÀ» ÀÏ·¯ÁÖ¼¼¿ä.
CSplitterWnd¿¡¼ »ó¼Ó¹ÞÀº ´Ù¸¥ Ŭ·¡½º¸¦ Çϳª »ý¼ºÇÏ°í, ´ÙÀ½°ú °°Àº ÇÔ¼ö¸¦ Çϳª ¸¸µì´Ï´Ù.
BOOL CSplitter::ReplaceView(int row, int col,
CRuntimeClass
*pViewClass, Size size)
{
CCreateContext
context;
BOOL bSetActive;
if((GetPane(row,
col)->IsKindOf(pViewClass)) == TRUE)
return
FALSE;
// CDocument *pDoc = GetParentFrame()->GetActiveDocument();
//
Get pointer to CDocument object so that it can be used
// in
the creation process of the new view
CDocument
*pDoc = ((CView *)GetPane(row, col))->GetDocument();
CView
*pActiveView = GetParentFrame()->GetActiveView();
if(pActiveView
== NULL || pActiveView == GetPane(row, col))
bSetActive
= TRUE;
else
bSetActive
= FALSE;
// set flag so that document will
not be deleted when view is
// destroyed
pDoc->m_bAutoDelete
= FALSE;
// Delete existing view
((CView
*)GetPane(row, col))->DestroyWindow();
//
set flag back to default
pDoc->m_bAutoDelete
= TRUE;
// Create new view
context.m_pNewViewClass
= pViewClass;
context.m_pCurrentDoc = pDoc;
context.m_pNewDocTemplate
= NULL;
context.m_pLastView = NULL;
context.m_pCurrentFrame
= NULL;
CreateView(row, col, pViewClass,
size, &context);
CView *pNewView =
(CView *)GetPane(row, col);
if(bSetActive
== TRUE)
GetParentFrame()->SetActiveView(pNewView);
RecalcLayout();
GetPane(row,
col)->SendMessage(WM_PAINT);
return
TRUE;
}
<MDI¿¡¼ Child LIST¸¦ ¾ò´Â ¹æ¹ý>
MDI ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÏ°í ÀÖ½À´Ï´Ù. ±×·±µ¥ ÇÁ·Î±×·¥ ½ÇÇà Áß ÀÓÀÇÀÇ ½Ã°£¿¡ ¸ðµç ¿·ÁÁø MDIÀÇ CHILD ³»¿ëÀ» ÁÖ±âÀûÀ¸·Î ÀúÀåÇÏ°í ½Í½À´Ï´Ù. ±×·¡¼ Á¦ »ý°¢¿¡ ¸ðµç CHILD¿¡ 'Save Message' ¶Ç´Â ÇÔ¼ö¸¦ ÄÝÇÏ°íÀÚ ÇÕ´Ï´Ù. ²À ¸ðµç CHILD °¡ ¾Æ´Ñ °æ¿ìµµ Àִµ¥ ƯÁ¤ CHILD¸¦ ã¾Æ¼ ÀÛ¾÷À» ÇÒ ¶§µµ ÀÖ½À´Ï´Ù. ÀÌ ¶§ ¾î¶»°Ô ¿øÇÏ´Â CHILD¸¦ ãÀ» ¼ö ÀÖ´ÂÁö¿ä?
Áú¹®¿¡¼ ÇöÀç MDI¸¦ ´ÜÀÏ ÅÛÇø´(Single Template)À¸·Î ±¸¼ºÇÑ °ÇÁö, ¸ÖƼ ÅÛÇø´(Multi Template)À¸·Î ±¸¼ºÇÑ °ÇÁö ¼³¸íµÅ ÀÖÁö ¾Ê¾Æ¼ ÀÏ´Ü ¸ÖƼ ÅÛÇø´ÀÎ °æ¿ì¸¦ ±âÁØÀ¸·Î ¼³¸íÇÏ°Ú½À´Ï´Ù. ´ÜÀÏ ÅÛÇø´ÀÎ °æ¿ì´Â ¾ÕÀÇ ÅÛÇø´À» ã´Â ºÎºÐ ÀÌÇϸ¸ º¸¸é µË´Ï´Ù. ÀÏ´Ü ¿©·¯ ÅÛÇø´ÀÌ µî·ÏµÅ ÀÖ´Â °æ¿ì °¢ ÅÛÇø´Àº °íÀ¯ÀÇ À̸§À» °®½À´Ï´Ù. µû¶ó¼ °¢ ÅÛÇø´ÀÇ Æ÷ÀÎÅ͸¦ ·çÇÁ(Loop)¿¡¼ ¸ðµÎ À̸§À¸·Î °Ë»öÇØ Ã£½À´Ï´Ù. ÄÚµå´Â ´ÙÀ½°ú °°Àº ÇüÅ°¡ µÇ°Ú½À´Ï´Ù.
POSITION curTemplatePos = GetFirstDocTemplatePosition();
while(curTemplatePos
!= NULL) {
CDocTemplate* curTemplate = GetNextDocTemplate(curTemplatePos);
CString
str;
curTemplate->GetDocString(str, CDocTemplate::docName);
if(str
== sDocName)
´ÙÀ½ ó¸®.....
}
±× ´ÙÀ½ ÇϳªÀÇ ÅÛÇø´ÀÌ °áÁ¤µÇ¸é ÇØ´ç ÅÛÇø´ ¾Æ·¡ÀÇ °¢ µµÅ¥¸ÕÆ®¸¦ ºñ½ÁÇÑ ¹æ¹ýÀ¸·Î ã¾Æ³À´Ï´Ù. ±× ÇÔ¼ö´Â GetFirstDocPosition() °ú GetNextDoc Àε¥ À§ÀÇ ÅÛÇø´À» ãÀ» ¶§¿Í °°Àº ¹æ¹ýÀ¸·Î ·çÇÁ¿¡¼ ãÀ¸¸é µË´Ï´Ù. ÀÌ ¶§ ã´Â ±âÁØÀº Á÷Á¢ ¸¸µé¾î¾ß ÇÕ´Ï´Ù(º¯¼ö¸¦ »ç¿ëÇϰųª À©µµ¿ì ŸÀÌƲ·Î ÇϵçÁö ÇÏ¸é µË´Ï´Ù). ±× ´ÙÀ½ ¸¸¾à ÇØ´ç µµÅ¥¸ÕÆ®ÀÇ ºä(View)¿¡ Á¢±ÙÇÏ°íÀÚ ÇÒ ¶§´Â µµÅ¥¸ÕÆ®´ç Çϳª ÀÌ»óÀÇ ºä°¡ ÀÖÀ» ¼ö ÀÖÀ¸¹Ç·Î ¶Ç´Ù½Ã °°Àº ·ÎÁ÷À¸·Î ´ÙÀ½ÀÇ ÇÔ¼öµéÀ» »ç¿ëÇØ ºä Æ÷ÀÎÅÍ(View Pointer)¸¦ ¾òÀ¸¸é µË´Ï´Ù.
GetFirstViewPosition(), GetNextView
¹°·Ð ·çÇÁ¿¡¼ Çϳª¾¿ °Ë»öÇØ¾ß ÇÕ´Ï´Ù. º¸ÅëÀÇ °æ¿ì ÇϳªÀÇ µµÅ¥¸ÕÆ®¿¡ ÇϳªÀÇ ºäÀ̴ϱî ù° ºä Æ÷ÀÎÅ͸¦ ±×³É »ç¿ëÇÏ¸é µË´Ï´Ù.
¿¡µðÆ® ÄÁÆ®·Ñ¿¡¼ ¿£ÅÍÅ°¸¦ °¨ÁöÇÏ´Â ¹æ¹ýÀ» ¾Ë°í ½Í½À´Ï´Ù.
±âÁ¸ ÄÁÆ®·Ñ¿¡ Áú¹®ÇÑ °Í°ú °°ÀÌ ¾î¶² ´Ù¸¥ ±â´ÉÀ» ³Ö°íÀÚ ÇÒ °æ¿ì´Â ÀϹÝÀûÀÎ ¹æ¹ýÀ¸·Î´Â µÇÁö ¾Ê½À´Ï´Ù. °¡Àå ½±°Ô ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ¸·Î´Â SubClassing ±â¹ýÀ» »ç¿ëÇÏ¸é µË´Ï´Ù. ¼ºêŬ·¡½º¶õ ¾î¶² °´Ã¼(Object)¿¡¼ ¹ß»ýÇÏ´Â ¸ðµç ¸Þ½ÃÁö¸¦ ¾î¶² ´Ù¸¥ Ŭ·¡½ºÀÇ °´Ã¼·Î º¸³¾ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀε¥(Á¤È®ÇÑ Àǹ̴ ¾Æ´ÏÁö¸¸), CWnd::SubClassDlgItem ÇÔ¼ö¸¦ »ç¿ëÇØ ¼ºêŬ·¡½ÌÇÏ¸é µË´Ï´Ù.
¹æ¹ýÀº CEdit Ŭ·¡½º¿¡¼ »ó¼Ó¹ÞÀº »õ·Î¿î Ŭ·¡½º¸¦ ¸¸µé°í ÇØ´ç Ŭ·¡½º¿¡¼ Å°ÀÔ·Âó¸® Member ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵åÇØ ¿£ÅÍÅ° 󸮸¦ ÇØ ÁÝ´Ï´Ù. ±× ´ÙÀ½ »õ·Î ¸¸µç Ŭ·¡½ºÀÇ °´Ã¼·Î ¿øÇÏ´Â ¿¡µðÆ® ÄÁÆ®·ÑÀ» ¼ºêŬ·¡½ºÇØ Áֱ⠹ٶø´Ï´Ù. ÀÌ·¸°Ô ÇÏ¸é ¿£ÅÍÅ° »Ó¸¸ ¾Æ´Ï¶ó ¿ø·¡ ÄÁÆ®·ÑÀÌ °¡Áö´Â µðÆúÆ® ±â´ÉÀ» ¿øÇϴ´ë·Î ¹Ù²Ü ¼ö ÀÖ°Ô µË´Ï´Ù.
- the end of this article -