<ÇöÀç ÀÛ¾÷ÁßÀÎ ¸ñ·ÏÀ» ¸¸µé·Á¸é>
¸®½ºÆ® ¹Ú½º¿¡ ÇöÀç ÀÛ¾÷ÁßÀÎ À©µµ¿ìÀÇ ¸ñ·ÏÀ» ³Ö°í ½ÍÀºµ¥, ¾î¶² ¹æ¹ýÀ» »ç¿ëÇØ¾ß ÇÏ´ÂÁö °¨À» ÀâÀ» ¼ö ¾ø½À´Ï´Ù.
ÀÛ¾÷ °ü¸®ÀÚ(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);
}