ÀÓÀÇÀÇ Å¬·¡½ºÀÇ Æ÷ÀÎÅÍ ¾ò±â
Visual C++·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰíÀÚ ÇÒ ¶§, °¡Àå ¸ÕÀú ¸·È÷´Â ºÎºÐ ÁßÀÇ Çϳª°¡ ¾î¶² Ŭ·¡½º ÀνºÅϽºÀÇ Æ÷ÀÎÅ͸¦ ¾ò´Â °ÍÀÌÁÒ. ÀϹÝÀûÀ¸·Î ºä Ŭ·¡½º¸¦ °¡Àå ¸¹ÀÌ ´Ù·ç°Ô µÇ°í, ±× ´ÙÀ½ÀÌ µµÅ¥¸ÕÆ® Ŭ·¡½º, ±× ´ÙÀ½ÀÌ ¸ÞÀÎ ÇÁ·¹ÀÓ Å¬·¡½º ¼øÀÏ °ÍÀÔ´Ï´Ù. ±×¸®°í °ÅÀÇ º¯°æÇÒ Çʿ䰡 ¾ø´Â ¾ÖÇø®ÄÉÀÌ¼Ç Å¬·¡½ºµµ ÀÖ±¸¿ä.
¹°·Ð »ç¿ëÀÚ°¡ ¸¸µç Ŭ·¡½º³ª ¹öư °°Àº ÄÁÆ®·Ñ¿¡ °ü·ÃµÈ Ŭ·¡½º¿¡ Á¢±ÙÇØ¾ß ÇÒ °æ¿ìµµ Àִµ¥, ±×·² ¶§ Ãʺ¸ÀÚ´Â ¸·¸·ÇØ Áú ¼ö¹Û¿¡ ¾ø½À´Ï´Ù. °æÇè´ãÀ̱⵵ ÇÏÁÒ.
¿©±â¼´Â ±×·¯ÇÑ °æ¿ìÀÇ °¢ Ŭ·¡½ºÀÇ Æ÷ÀÎÅ͸¦ ¾ò´Â °æ¿ì¿¡ °üÇØ ¾Ë¾Æº¾´Ï´Ù.¿©±â¼´Â ÇÁ·ÎÁ§Æ® À̸§ÀÌ Test¶ó°í °¡Á¤ÇÏÁÒ. »ç¿ëÀÚ¿¡ µû¶ó ÇÁ·ÎÁ§Æ®ÀÇ À̸§ÀÌ ´Ù¸£°ÚÁÒ?
±×¸®°í Áß°£¿¡ ÂüÁ¶µÇ´Â ¸ðµç Ŭ·¡½ºÀÇ Çì´õÆÄÀÏÀÌ ÀÎŬ·çµå µÇ¾î¾ß Çϱ¸¿ä. ºäÀÇ Çì´õ°¡ ÀÎŬ·çµå µÈ´Ù¸é ¹Ýµå½Ã ±× ¾Õ¿¡ µµÅ¥¸ÕÆ®ÀÇ Çì´õ°¡ ÀÎŬ·çµå µÇ¾î¾ß ÇÕ´Ï´Ù.
![]()
ÀϹÝÀûÀÎ
SDI ÇÁ·Î±×·¥¿¡¼.
1.¾ÖÇø®ÄÉÀÌ¼Ç Å¬·¡½ºÀÇ Æ÷ÀÎÅ͸¦ ¾òÀ» ¶§
CWinApp* AfxGetApp()
ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
2.¸ÞÀÎ ÇÁ·¹ÀÓ Å¬·¡½ºÀÇ Æ÷ÀÎÅ͸¦ ¾òÀ» ¶§
CWnd* AfxGetMainWnd()
ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù.
ÀÌµé µÎ ÇÔ¼ö´Â MFCÀÇ Àü¿ªÇÔ¼ö·Î½á ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â µµÁß ¾îµð¿¡¼³ª »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. MFC¿¡¼´Â Afx~·Î ½ÃÀÛÇÏ´Â ÇÔ¼öµéÀº ¸ðµÎ Àü¿ªÇÔ¼ö¸¦ ÀǹÌÇÕ´Ï´Ù.
¹°·Ð ŸÀÔ Ä³½ºÆÃÀ» ÇØ¾ß Çϱ¸¿ä. »ç¿ë¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.
CTestApp *pApp = (CTestApp *)AfxGetApp();
CMainFrame *pFr = (CMainFrame
*)AfxGetMainWnd();
ÀÌ·¸°Ô ½áÁØ ´ÙÀ½¿¡´Â pApp¿Í pFrÀº °¢°¢ ¾ÖÇø®ÄÉÀÌ¼Ç Å¬·¡½º¿Í ¸ÞÀÎ ÇÁ·¹ÀÓ Å¬·¡½ºÀÇ ÀνºÅϽº Æ÷ÀÎÅ͸¦ °¡¸®Å°°Ô µË´Ï´Ù.
ÀÌ ¿Ü¿¡ ºä Ŭ·¡½º¿¡¼ ±× ºä¸¦ µÑ·¯½Î°í ÀÖ´Â ÇÁ·¹ÀÓ À©µµ¿ì¸¦ ÂüÁ¶ÇÒ ¶§´Â
CFrameWnd* GetParentFrame() const
ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¹°·Ð ºä Ŭ·¡½º»Ó¸¸ÀÌ ¾Æ´Ï¶ó ÀϹÝÀûÀÎ À©µµ¿ì¸¦ µÑ·¯½Î´Â Ʋ·Î½á ÇÁ·¹ÀÓ À©µµ¿ì°¡ »ç¿ëµÉ ¼ö Àֱ⠶§¹®¿¡ GetParentFrame() ÇÔ¼ö´Â CWnd() Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼ö·Î µÇ¾îÀÖ½À´Ï´Ù.
ÀÌ ÇÔ¼ö¿Í AfxGetMainWnd() ÇÔ¼ö´Â SDI¿¡¼´Â °°Àº ±â´ÉÀ» ÇÏÁö¸¸, MDI¿¡¼´Â ¸ÞÀÎ ÇÁ·¹ÀÓ À©µµ¿ì¿Í ºä¸¦ µÑ·¯½Î°í ÀÖ´Â ÇÁ·¹ÀÓ À©µµ¿ì°¡ ´Ù¸£±â ¶§¹®¿¡ ±× °¢°¢À» ±¸ÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.
3.µµÅ¥¸ÕÆ® Ŭ·¡½ºÀÇ Æ÷ÀÎÅ͸¦ ¾òÀ» ¶§´Â ¸î °¡Áö °æ¿ì°¡ ÀÖ½À´Ï´Ù.
(a) ºä Ŭ·¡½º¿¡¼ µµÅ¥¸ÕÆ® Ŭ·¡½º¿¡ Á¢±ÙÇÒ ¶§.
À̶§´Â ¸»ÇÒ Çʿ䵵 ¾øÀÌ GetDocument() ÇÔ¼ö¸¦ ¾²¸é µË´Ï´Ù. ºä¿¡ ÀÌ¹Ì Á¤ÀǵǾî ÀÖ´Â ÇÔ¼öÁÒ. ÇÏÁö¸¸ »ç¿ëÀÚ°¡ ÀÓÀÇ·Î ºä¸¦ Ãß°¡ÇÑ °æ¿ì¿¡´Â ÀÌ GetDocument() ÇÔ¼ö°¡ Æ÷ÇԵǾî ÀÖÁö ¾Ê½À´Ï´Ù. ÀÌ·² °æ¿ì ±âÁ¸¿¡ ÀÖ´Â ºä¿¡¼ GetDocument() ÇÔ¼ö ºÎºÐÀ» º¹»çÇØ´Ù°¡ ³ÖÀ¸¸é µË´Ï´Ù. ÀÌ ºÎºÐÀº Debug ¸ðµå¿Í Release ¸ðµå µÎ °¡ÁöÀÇ ÇÔ¼ö°¡ ÀÖÀ¸¹Ç·Î ¸ðµÎ º¹»çÇØ ³Ö¾Æ¾ß ÇÕ´Ï´Ù.
(b) ÀÓÀÇÀÇ Å¬·¡½º¿¡¼ µµÅ¥¸ÕÆ® Ŭ·¡½º¿¡ Á¢±ÙÇÒ ¶§.
CMainFrame *pFr = (CMainFrame *)AfxGetMainWnd();
CTestDoc
*pDoc = (CTestDoc *)pFr->GetActiveDocument();
À§¿Í °°ÀÌ µÎ ÁÙ¿¡ °ÉÃÄ ½áµµ µÇ°í ´ÙÀ½Ã³·³ ÇÑ ÁÙ·Î ÁÙ¿©½áµµ µË´Ï´Ù.
CTestDoc *pDoc = (CTestDoc *) ((CMainFrame *)AfxGetMainWnd())->GetActiveDocument();
4. ºä Ŭ·¡½ºÀÇ Æ÷ÀÎÅ͸¦ ¾òÀ» °æ¿ì.
(a) ÀÓÀÇÀÇ Å¬·¡½º¿¡¼ ºä Ŭ·¡½º¿¡ Á¢±ÙÇÒ ¶§
ºä Ŭ·¡½ºÀÇ Æ÷ÀÎÅ͸¦ ¾ò¾î¾ß ÇÏ´Â °æ¿ì´Â ´ëºÎºÐ ´ÙÀ̾ó·Î±×¿¡¼ ºä¿¡ Á¢±ÙÇϰųª, ½ºÇø´À» »ç¿ëÇÑ °æ¿ì ´Ù¸¥ ºä Ŭ·¡½º¿¡¼ Á¢±ÙÇÏ´Â °æ¿ì°¡ ´ëºÎºÐÀÏ °Ì´Ï´Ù. ¹¹ ¾î¶»µç »ó°ü¾øÀÌ ´ÙÀ½°ú °°ÀÌ ÇÏ¸é ¾îµð¼µç ºä¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù.
CTestView *pView = (CTestView *) ((CMainWnd *)AfxGetMainWnd())->GetActiveView();¹°·Ð À§ÀÇ 3¹øÀÇ °æ¿ìó·³ µÎ ÁÙ·Î ³ª´©¾î ½áµµ »ó°üÀÌ ¾ø½À´Ï´Ù.
(b) µµÅ¥¸ÕÆ® Ŭ·¡½º¿¡¼ ºä Ŭ·¡½º¿¡ Á¢±ÙÀ» ÇÒ ¶§
µµÅ¥¸ÕÆ® Ŭ·¡½º¿¡¼ ºä Ŭ·¡½ºÀÇ ÀνºÅϽº Æ÷ÀÎÅ͸¦ ¾òÀ¸·Á¸é GetFirstViewPosition() ÇÔ¼ö¿Í GetNextView() ÇÔ¼ö¸¦ Á¶ÇÕÇÏ¿© »ç¿ëÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô º¹ÀâÇØÁö´Â ÀÌÀ¯´Â µµÅ¥¸ÕÆ® Çϳª¿¡ ¿©·¯°³ÀÇ ºä°¡ ¿¬°áµÉ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù.
µµÅ¥¸ÕÆ®¿¡´Â ÀÌ¿¡ ¿¬°áµÈ ºä°¡ ¿¬°á ¸®½ºÆ® ÇüÅ·Π°ü¸®µÇ°í Àֱ⠶§¹®¿¡ ¸î ¹øÂ° ºä¸¦ ¾òÀ» °ÍÀÎÁö ¼±ÅÃÇÏ°í ³ª¼ À§ÀÇ ÇÔ¼ö¸¦ Á¶ÇÕÇÏ¿© »ç¿ëÇÏ¸é µË´Ï´Ù.
´ÙÀ½Àº µµÅ¥¸ÕÆ®¿Í ¿¬°áµÈ ¸ðµç ºä Ŭ·¡½º¸¦ Â÷·Ê·Î ¾ò¾î ºä Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼öÀÎ UpdateWindow() ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¿¹Á¦ÀÔ´Ï´Ù.
POSITION pos = GetFirstViewPosition();
while(pos != NULL)
{
CView *pView = GetNextView(pos);
pView->UpdateWindow();
}
¹°·Ð ÀÌ¿Í °°Àº È¿°ú¸¦ ³»±â À§Çؼ µµÅ¥¸ÕÆ® Ŭ·¡½ºÀÇ ¸â¹öÇÔ¼öÀÎ UpdateAllViews(NULL) ÇÔ¼ö¸¦ È£ÃâÇØµµ µË´Ï´Ù. ¿©±â¼ ¾²ÀÌ´Â ÀÎÀÚÀÎ NULL Àº ¸ðµç ºä¸¦ ¾÷µ¥ÀÌÆ®ÇÏ´Â °ÍÀ̰í, NULL ´ë½Å, ½ÅÈ£¸¦ º¸³»´Â ºäÀÇ Æ÷ÀÎÅ͸¦ ³Ö¾îÁÖ¸é ½ÅÈ£¸¦ º¸³»´Â ºä´Â »©°í ³ª¸ÓÁö ºä¸¸ ¾÷µ¥ÀÌÆ®¸¦ ÇÕ´Ï´Ù.
µµÅ¥¸ÕÆ®¿¡ ºä°¡ ¿ÀÁ÷ Çϳª¸¸ ¿¬°áµÇ¾î ÀÖ´Â °æ¿ì¿¡´Â ´ÙÀ½°ú °°ÀÌ °£´ÜÇÏ°Ô ºä Ŭ·¡½ºÀÇ ÀΚÀÅϽº Æ÷ÀÎÅ͸¦ ¾ò¾î³¾ ¼öµµ ÀÖ½À´Ï´Ù. m_viewList ´Â CDocument Ŭ·¡½ºÀÇ ¸â¹öº¯¼ö·Î¼, ºä¸¦ °ü¸®ÇÏ´Â ¿¬°á ¸®½ºÆ®ÀÔ´Ï´Ù. À̰ÍÀ» ÀÌ¿ëÇÏ¿© GetHead() ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ¸®½ºÆ®¿¡ µé¾îÀִ ù ¹øÂ° ºä°¡ ¾ò¾îÁý´Ï´Ù.
void CTestDoc::OnRepaintViews()
{
CView
*pView = m_viewList.GetHead();
pView->UpdateWindows();
}
(c) ½ºÇø®Æ® À©µµ¿ì¿¡¼ÀÇ °¢ ºä Ŭ·¡½º¿¡ Á¢±ÙÇÒ ¶§
µ¿Àû ½ºÇø®Æ® À©µµ¿ì¶ó¸é ¸ðµç ÆäÀο¡¼ °°Àº ºä¸¦ »ç¿ëÇϹǷΠº° ¹®Á¦°¡ µÇÁö ¾Ê´Âµ¥, Á¤Àû ½ºÇø®Æ® À©µµ¿ì¶ó¸é °¢ ÆäÀθ¶´Ù ´Ù¸¥ ºä¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ¸¹Ç·Î °¢ ÆäÀκ°·Î ºäÀÇ ÀνºÅϽº Æ÷ÀÎÅ͸¦ ¾ò´Â °ÍÀÌ ¹®Á¦°¡ µÇ´Â °æ¿ì°¡ »ý±æ ¼ö ÀÖ½À´Ï´Ù.
ÀÌ·¸¶§´Â ¸ÞÀÎ ÇÁ·¹ÀÓ Å¬·¡½º¿¡¼ Á¤ÀÇÇÑ CSplitterWnd Ŭ·¡½ºÀÇ º¯¼öÀÎ m_wndSplitter ÀÇ ¸â¹öÇÔ¼ö GetPane()À» »ç¿ëÇÏ¸é °¢ ÆäÀÎÀÇ ºä¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿ì¼± ¸ÞÀÎ ÇÁ·¹ÀÓ¿¡¼ Á¤ÀÇµÈ m_wndSplitter º¯¼ö¸¦ public: ¼Ó¼ºÀ¸·Î ¹Ù²Ù°í(¿ÜºÎ¿¡¼ Á¢±ÙÇØ¾ß ÇϹǷÎ) ¸ÞÀΠŬ·¡½ºÀÇ ÀνºÅϽº Æ÷ÀÎÅ͸¦ ¾òÀº ´ÙÀ½, ´Ù½Ã ¿©±â¼ m_wndSplitter º¯¼ö¿¡ Á¢±ÙÇÏ¿© ÀÌ ¸â¹öº¯¼öÀÇ ¸â¹öÇÔ¼ö GetPane()À» ÀÌ¿ëÇÏ¸é µË´Ï´Ù. ´ÙÀ½Àº GetPane()ÀÇ ÇÔ¼ö ¿øÇüÀÔ´Ï´Ù. ¸®ÅϰªÀº ´ëºÎºÐÀÇ °æ¿ì CView¿¡¼ ÆÄ»ýµÈ Ŭ·¡½ºÀÇ ÀνºÅϽº Æ÷ÀÎÅͰ¡ µË´Ï´Ù.
CWnd* GetPane( int row, int col );
ÀÓÀÇÀÇ Å¬·¡½º¿¡¼ ´ÙÀ½°ú °°ÀÌ »ç¿ëÇÏ¸é ÆäÀο¡ ¿¬°áµÈ ºäÀÇ Æ÷ÀÎÅ͸¦ ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.
CTestView *pView = (CTestView *)((CMainFrame *)AfxGetMainWnd())->m_wndSplitter.GetPane(0,1);
- the end of this article -