<ÇöÀç ÀÛ¾÷ÁßÀÎ ¸ñ·ÏÀ» ¸¸µé·Á¸é>

 ¸®½ºÆ® ¹Ú½º¿¡ ÇöÀç ÀÛ¾÷ÁßÀÎ À©µµ¿ìÀÇ ¸ñ·ÏÀ» ³Ö°í ½ÍÀºµ¥, ¾î¶² ¹æ¹ýÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁö °¨À» ÀâÀ» ¼ö ¾ø½À´Ï´Ù.  

ÀÛ¾÷ °ü¸®ÀÚ(Task Manager)´Â ÃÖ»óÀ§ ´Ü°è À©µµ¿ì ¸ñ·ÏÀ» Ãâ·ÂÇϹǷΠÀ̸¦ ÀÌ¿ëÇϸé
µË´Ï´Ù. ´Ü, ÀÌ ¸ñ·Ï¿¡ Æ÷ÇԵǴ À©µµ¿ì´Â È­¸é¿¡¼­ Á÷Á¢ º¼ ¼ö ÀÖ¾î¾ß ÇÏÁö¸¸ ´Ù¸¥ â¿¡
¼ÒÀ¯µÅ¼­´Â ¾ÈµÈ´Ù´Â °Í¿¡ À¯ÀÇÇϱ⠹ٶø´Ï´Ù. ÃÖ»óÀ§ À©µµ¿ìÀÇ ¸ñ·ÏÀ» ÀÐÀ¸·Á¸é
CWnd::GetWndow()¸¦ È£ÃâÇÑ ÈÄ À©µµ¿ì°¡ ¸ñ·Ï¿¡ Æ÷Ç﵃ ¼ö ÀÖ´ÂÁöÀÇ ¿©ºÎ¸¦ È®ÀÎÇÏ·Á°í
CWndÀÇ ¸Þ½îµåÀÎ IsWindowVisible(), GetWindowTextLength(), GetOwner()¸¦ ºÎ¸¨´Ï´Ù.
±×·± ´ÙÀ½ ÀÛ¾÷ °ü¸® À©µµ¿ìÀÇ Ä¸¼ÇÀ» ¸ñ·Ï»óÀÚ¿¡ ä¿ì¸é µË´Ï´Ù. ¹æ¹ýÀº ´ÙÀ½°ú °°½À´Ï´Ù.

  void GetTaskList(CListBox& list)
  CString strCaption; // À©µµ¿ì ĸ¼Ç
  list.ResetContent;   // ¸®½ºÆ®¹Ú½º¸¦ Áö¿î´Ù.
  //À©µµ¿ì ¸ñ·Ï¿¡¼­ ù¹ø° À©µµ¿ì¸¦ ±¸ÇÑ´Ù.
  CWnd* pWnd=AfxGetMainWnd()->GetWindow(GW_HWNDFIRST);
  //À©µµ¿ìÀÇ ¸ñ·ÏÀ» ÅëÇØ È®ÀÎÇÑ´Ù.
    while(pWnd) {
       // À©µµ¿ì°¡ º¸À̸é ĸ¼ÇÀ» °®Áö¸¸ ¼ÒÀ¯ÀÚ¸¦ °®Áö ¾Ê´ÂÁö È®ÀÎÇÑ´Ù.
       if(pWnd->IsWindowVisible()&&
       pWnd->GetWindowTextLength() && !pWnd->Getowner)) {
          // À©µµ¿ì ĸ¼ÇÀ» ¸®½ºÆ®¹Ú½º¿¡ Ãß°¡ÇÑ´Ù.
          pWnd->GetWindowText(strCaption);
          List.AddString(strCaption);
      }
      // À©µµ¿ì ¸ñ·Ï¿¡¼­ ´ÙÀ½ À©µµ¿ì¸¦ ±¸ÇÑ´Ù.
      pWnd = pWnd->GetWindow(GW_HWNDNEXT);
    }
  }

 <¸®½ºÆ®¹Ú½º ±ô¹ÚÀÓ ¸ØÃß±â>

 ¸®½ºÆ® ¹Ú½º¿¡ ¸¹Àº Ç׸ñÀ» Ãß°¡ÇÏ·Á°í ÇÏ´Ï ¸®½ºÆ® ¹Ú½º°¡ ±ô¹ÚÀÔ´Ï´Ù. ÀÌ·¯ÇÑ Çö»óÀ» Á¦°ÅÇÏ°í ½ÍÀºµ¥ ¾î¶² ¹æ¹ýÀ» »ç¿ëÇÏ¸é µÇ³ª¿ä.  

 CListBoxÇüÀÇ ÄÁÆ®·ÑÀ̳ª À©µµ¿ìÀÇ ÀçÃâ·Â Ç÷¡±×¸¦ Ãë¼ÒÇϸé ÇØ´ç ÄÁÆ®·ÑÀÌ ´Ù½Ã Ãâ·ÂµÇÁö ¾ÊÀ¸¹Ç·Î ±ô¹ÚÀÌ´Â Çö»óÀ» ¸·À» ¼ö ÀÖ½À´Ï´Ù. ¸ÕÀú ÀÌ Ç÷¡±×¸¦ º¯°æÇÏ·Á¸é
CWnd::SetRedraw ÇÔ¼ö¸¦ È£ÃâÇØÁÝ´Ï´Ù. ±×¸®°í ¸®½ºÆ®¹Ú½º¿¡ ¿©·¯ °³ÀÇ Ç׸ñÀ» Ãß°¡ÇÏ´Â
Äڵ忡¼­ ÀçÃâ·Â Ç÷¡±×¸¦ Ãë¼ÒÇÑ ÈÄ Ç׸ñÀ» Ãß°¡ÇØ ÀÌ Ç÷¡±×¸¦ ¼³Á¤ÇÏ¸é µË´Ï´Ù.
¸¶Áö¸·À¸·Î ¸®½ºÆ®¹Ú½º¸¦ ÀûÀýÈ÷ °»½ÅÇؾßÇϹǷΠCWnd::Invalidate ÇÔ¼ö¸¦ È£ÃâÇϸé
¸®½ºÆ®ÀÇ ±ô¹ÚÀÓÀ» ÁÙÀÏ ¼ö ÀÖ½À´Ï´Ù.

  //ÀçÃâ·ÂÀ» ¹æÁöÇÑ´Ù.
  pListBox->SetRedraw(FALSE);
  //¸®½ºÆ®¹Ú½º¸¦ ³ª´«´Ù.
  //ÀçÃâ·ÂÀ» Çã¿ëÇÏ°í ¸®½ºÆ®¹Ú½º¸¦ ´Ù½Ã Ãâ·ÂÇÑ´Ù.
  pListBos->SetRedraw(TRUE);
  pListBos->Invalidate();

 
<º£À̽º Ŭ·¡½º¸¦ º¯°æÇÏ·Á¸é>

 Å¬·¡½º À§Àúµå·Î ÇÁ·ÎÁ§Æ®¸¦ ÀÛ¼ºÇÏ´Ù°¡ º£À̽º Ŭ·¡½º¸¦ À߸ø ÁöÁ¤ÇØ CScrollView¸¦ ¼±ÅÃÇØ¾ß ÇÏ´Â °É ±×¸¸ CView¸¦ ¼±ÅÃÇß½À´Ï´Ù. º£À̽º Ŭ·¡½º¸¦ CScrollView·Î º¯°æÇÏ·Á¸é ¾î¶»ÇØ¾ß Çմϱî?

Çì´õ ÆÄÀÏ¿¡¼­ 'class CMyView : public CView'¸¦ 'class CMyView : public
CScrollView'·Î ¹Ù²Ù¸é °£´ÜÈ÷ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. ´Ü ½ºÅ©·Ñ ºä´Â ½ÃÀ۽à ¸ÊÇÎ ¸ðµå¿Í
Å©±â¸¦ ¼³Á¤ÇϹǷΠOnInitialUpdate()¿¡¼­ SetScrollSizes()¸¦ È£ÃâÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô
º¯°æÇÑ »çÇ×À» ÀúÀåÇÑ ÈÄ ÇÁ·ÎÁ§Æ®¸¦ ÀÐÀ¸¸é º£À̽º Ŭ·¡½º·Î CScrollView()¸¦ ÀνÄÇÕ´Ï´Ù.
 
<¿©·¯ °¡Áö ¸ð¾çÀÇ À©µµ¿ì ¸¸µé±â>

 ÀϹÝÀûÀÎ À©µµ¿ì´Â Á÷»ç°¢ÇüÀε¥ °¡²û¾¿ ƯÀÌÇÑ ¸ð¾çÀÇ À©µµ¿ì¸¦ Áö´Ñ ÇÁ·Î±×·¥À» º¼ ¼ö ÀÖ½À´Ï´Ù. ½Ã°è¿Í °°Àº µÕ±Ù À©µµ¿ì¸¦ ¸¸µå´Â ¹æ¹ýÀ» ¾Ë°í ½Í½À´Ï´Ù.

 µÕ±Ù À©µµ¿ì»Ó¸¸ ¾Æ´Ï¶ó ¹æÆÐ, ³´, È­»ìÇ¥ ÀÌ¿Ü¿¡µµ À©µµ¿ì ¸ð¾çÀ» °¡Áö°¢»öÀ¸·Î ¸¸µé ¼ö
ÀÖ½À´Ï´Ù. ¹Ù·Î SetWindowRgn()°¡ Àֱ⠶§¹®¿¡ °¡´ÉÇÑ °Ì´Ï´Ù.
 ÀÌ ÇÔ¼öÀÇ µµ¿ò¸»À» ÂüÁ¶ÇÏ¸é ¾Ë°ÚÁö¸¸, ¿µ¿ª(Rigion)¿¡ ´ëÇÑ ¾à°£ÀÇ Áö½ÄÀÌ ÇÊ¿äÇÕ´Ï´Ù.
HRGN¿¡ ´ëÇÑ °³°ýÀûÀÎ ¼³¸íÀ» º» ÈÄ ¿øÇÏ´Â ¸ð¾çÀ» RgnÀ¸·Î ¸¸µé¾î ÀÌ°ÍÀ»
SetWindowRgn() ¿¡ º¸³»¸é ¿øÇÏ´Â ÀÛ¾÷À» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº µµ¿ò¸»À» ÂüÁ¶ÇÏ¸é ¾î·ÆÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ´Ü ÇÑ °¡Áö MFCÀÇ CRgn Ŭ·¡½º¸¦ ÀÌ¿ëÇÑ´Ù¸é ¹Ýµå½Ã Detach()¸¦ ÀÌ¿ëÇØ HRGN ¿µ¿ª ÇÚµéÀ» Á¦°ÅÇÑ ´ÙÀ½ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù(CRgn Ŭ·¡½º´Â Æı«µÉ ¶§ ÇÚµé±îÁö »èÁ¦Çϱ⠶§¹®ÀÔ´Ï´Ù).

 

<ÀÔ·Â ÄÁÆ®·Ñ¿¡ ÅؽºÆ®¸¦ Ãß°¡ÇÏ·Á¸é>  

MFC 4.0 »ç¿ëÀÚÀÔ´Ï´Ù. ÀÔ·Â ÄÁÆ®·Ñ¿¡ ÅؽºÆ®¸¦ Ãß°¡ÇÏ´Â ·çƾÀ» ³Ö°í ½ÍÀºµ¥, CEdit Ŭ·¡½º¿¡¼­ À̸¦ Áö¿øÇÏ´Â ¸â¹öÇÔ¼ö¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù.

 ´ç¿¬ÇÕ´Ï´Ù. CEdit::AppendText()¶ó´Â ÇÔ¼ö´Â ¾øÀ¸¹Ç·Î Á÷Á¢ ÇÔ¼ö¸¦ ÀÛ¼ºÇØ¾ß ÇÕ´Ï´Ù.
CEdit::SetSel()À» È£ÃâÇØ ¼±Åà Ç׸ñÀ» ÀÔ·Â ÄÁÆ®·ÑÀÇ ¸¶Áö¸·À¸·Î À̵¿½ÃŲ ÈÄ
CEdot::ReplaceSel()À» È£ÃâÇØ ÅؽºÆ®¸¦ Ãß°¡ÇÏ¸é °£´ÜÇÏ°Ô Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. »õ·Î
¸¸µé¾î¾ßÇÒ AppendText ÇÔ¼ö´Â ´ÙÀ½°ú °°½À´Ï´Ù.

  void AppendText(CEdit& edit, LPCSTR pText){
    int nLen=edit.GetWindowTextLength();
    edit.SetFocus();
    edit.SetSel(nLen, nLen)
    edit.ReplaceSel(pText);
  }

 

 <À©µµ¿ì¿¡ Àü´ÞµÈ ¸¶Áö¸· ¸Þ½ÃÁö ¾ò±â>

 MFC 4.0À¸·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´ø Áß ÇöÀç À©µµ¿ì¿¡ Àü´ÞµÈ ¸¶Áö¸· ¸Þ½ÃÁö¸¦ ´Ù¸¥ ÇÔ¼ö·Î ³Ñ°Ü¾ß Çϴµ¥ ¹æ¹ýÀ» ¸ð¸¨´Ï´Ù.

 ÇöÀç ó¸®ÁßÀÎ MSG ±¸Á¶Ã¼ Æ÷ÀÎÅ͸¦ ¾òÀ¸·Á¸é CWnd::GetCurrentMessage¸¦ È£ÃâÇÏ¸é µË´Ï´Ù. Ŭ·¡½º À§Àúµå¸¦ »ç¿ëÇØ ÇϳªÀÇ °øµ¿ ÇÔ¼ö¿¡ ¿©·¯ ¸Þ´º Ç׸ñÀÇ Ã³¸® ÇÔ¼ö¸¦ ¿¬°áÇÑ ´ÙÀ½ GetCurrentMessage() ¸¦ È£ÃâÇØ ¼±ÅÃµÈ ¸Þ´ºÇ׸ñÀ» È®ÀÎÇÏ¸é ½±°Ô ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ Äڵ带 Âü°íÇϼ¼¿ä.

void CMainFrame::OnCommonMenuHandler() {
   // ¼±ÅÃµÈ ¸Þ´ºÇ׸ñÀ» µð¹ö±× â¿¡ Ãâ·ÂÇÑ´Ù.
   TRACE("Menu item %u was selected.",
      GetCurrentMessage()->wParam);
}

<¾ÖÇø®ÄÉÀÌ¼Ç À§Àúµå·Î »ý¼ºÇÑ Ã¢ÀÇ ±âº» ½ºÅ¸ÀÏÀ» º¯°æÇÏ·Á¸é>

 MFC ¾ÖÇø®ÄÉÀÌ¼Ç À§Àúµå¸¦ ÀÌ¿ëÇØ ±âº»ÀûÀÎ MDI ÇÁ·¹ÀÓ Ã¢À» »ý¼ºÇß½À´Ï´Ù. À̸¦ º¯°æÇØ Ã¢ÀÇ À§Ä¡¿Í ÆøÀ» Á¶Á¤ÇÏ°í ½ÍÀºµ¥ ¾î¶»°Ô ÇØ¾ß Çϳª¿ä?

 ¾ÖÇø®ÄÉÀ̼ÇÀÇ 4¹ø° ´Ü°è¿¡ 'Advanced' ¶ó´Â ´ÜÃ߸¦ ´©¸£¸é ÀÀ¿ë ÇÁ·Î±×·¥°ú MDI ÇÁ·¹ÀÓ Ã¢À» Á¦¾îÇÏ´Â °í±Þ â Ç׸ñÀ» ¼±ÅÃÇØÁÖ´Â ´ëÈ­»óÀÚ¸¦ º¼ ¼ö ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¥ »ý¼º ÀüÀ̶ó¸é ÀÌ ¹æ¹ýÀ» »ç¿ëÇÏ´Â °Ô °¡Àå ÁÁ°ÚÁö¸¸, À©µµ¿ì¸¦ »ý¼ºÇß´Ù¸é CWnd::PreCreateWindow¸¦ ¿À¹ö¶óÀ̵ùÇÏ°í CREATESTRUCT ÆĶó¹ÌÅÍÀÇ ½ºÅ¸ÀÏ ¸â¹ö¸¦ º¯°æÇØ À©µµ¿ì ½ºÅ¸ÀÏÀ» ¹Ù²Ù¸é µË´Ï´Ù. ±×¸®°í CREATESTRUCTÀÇ ´Ù¸¥ ¸â¹ö·Î À©µµ¿ìÀÇ À§Ä¡¿Í ÆøÀ» ÁöÁ¤ÇÏ¸é ¿øÇÏ´Â ½ºÅ¸ÀÏÀÇ À©µµ¿ì¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½ Äڵ带 ÂüÁ¶Çϼ¼¿ä.

// À©µµ¿ì »ý¼º½Ã ÆĶó¹ÌÅ͸¦ º¯°æÇÑ´Ù.
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT &cs) {
   // À©µµ¿ì¿¡¼­ ÃÖ´ëÈ­ ´ÜÃß ½ºÅ¸ÀÏÀ» Á¦°ÅÇÑ´Ù.
   cs.style &= WS_MAXIMIZEBOX;
   // âÀÇ À§Ä¡¸¦ ÁÂÃø»ó´Ü ±¸¼®À¸·Î ¼³Á¤ÇÑ´Ù.
   cs.cx = GetSystemMetrics(SM_CXSCREEN);
   cs.cy = GetSystemMetrics(SM_SYSCREEN)/2;
   return CMDIFrameWnd::PreCreateWindow(cs);
}