ĸ¼Ç¹Ù°¡ ¾ø´Â À©µµ¿ì¸¦ ¸¸µé¾ú½À´Ï´Ù. ±×·±µ¥ ÀÌ À©µµ¿ì¸¦ À̵¿½ÃÄÑ¾ß Çϴµ¥ ¹æ¹ýÀ» Àß ¸ð¸£°Ú½À´Ï´Ù. ´Ù¸¥ ÇÁ·Î±×·¥µéÀº ĸ¼Ç¹ÙÀÇ À§Ä¡°¡ ¾Æ´Ï´õ¶óµµ À̵¿ÀÌ °¡´ÉÇÏ´øµ¥ ÀÌ·¯ÇÑ ÇÁ·Î±×·¥µéÀº ¾î¶°ÇÑ ¹æ¹ýÀ¸·Î À̵¿À» ½Ã۰í ÀÖ´ÂÁö ±Ã±ÝÇÕ´Ï´Ù. ±×¸®°í MFC¿¡¼ ÃÖ»óÀ§ À©µµ¿ì¸¦ »ý¼ºÇÏ´Â ¹æ¹ýµµ ¾Ë°í ½Í½À´Ï´Ù.
À©µµ¿ìÀÇ Ä¸¼Ç¹Ù¿¡¼ ¸¶¿ì½º ¹öưÀÌ ´·¯Áö¸é ¸Þ½ÃÁö°¡ »ý¼ºµÇ´Âµ¥, ÀÌ¿Í °°Àº ¿ø¸®¸¦ ÀÌ¿ëÇÏ¸é µË´Ï´Ù. Áï, ÀÓÀÇÀÇ À§Ä¡¿¡¼ ¸¶¿ì½º°¡ ´·ÁÁö°Ô µÇ¸é ÀÌ·¯ÇÑ ¸Þ½ÃÁö¸¦ º¸³»¼ À©µµ¿ì¸¦ ¼ÓÀÌ°Ô ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÓÀÇÀÇ À©µµ¿ì CMyWnd¿¡¼ ´ÙÀ½°ú °°Àº ÇÔ¼ö¸¦ Ãß°¡ÇÏ¸é µË´Ï´Ù.
void CMyWnd::OnLButtonDown(UINT nFlags, CPOint point)
{
DefWindowProc(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x,
point.y));
}
¶Ç À̿ܿ¡µµ ¿©·¯ °¡Áö ¹æ¹ýÀÌ Àִµ¥ WM_NCHITTEST¸¦ »ç¿ëÇÏ´Â ¹æ¹ý°ú WM_SYSCOMMAND¸¦ ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ ÀÖ½À´Ï´Ù. ±×¸®°í ÀϹÝÀûÀÎ À©µµ¿ìÀÇ »ý¼ºÀº Creare¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÏÁö¸¸ ÃÖ»óÀ§ À©µµ¿ìÀÇ »ý¼ºÀº CreateEx¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ÇÔ¼öÀÇ ¼Ó¼ºÀ» º¸¸é WS_EX_TOPMOST¶ó´Â ¼Ó¼ºÀÌ ÀÖ½À´Ï´Ù. À̰ÍÀÌ ¹Ù·Î ÃÖ»óÀ§ À©µµ¿ì·Î ÀÛ¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏ´Â °ÍÀÔ´Ï´Ù. ÀÚ½ÅÀÇ À©µµ¿ì¸¦ º¯È½Ã۱â À§Çؼ´Â PreCreateWindow¿¡¼ ÀÛ¾÷À» ÇÏ¸é µË´Ï´Ù.
BOOL CMyWnd::PreCreateWindow(CREATESTRUCT& cs)
{
cs.dwExStyle = WS_EX_TOPMOST;
return CWnd::PreCreateWindow(cs);
}
¸¸ÀÏ Á÷Á¢ À©µµ¿ì¸¦ »ý¼ºÇÒ·Á¸é ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é µË´Ï´Ù.
BOOL MyFunction()
{
...
CMyWnd* pWnd = new CMyWnd;
if (FALSE == pWnd->CreateMyWindow("My
Top Window"))
{
return FALSE;
}
return TRUE;
}
BOOL CMyWnd::CreateMyWindow(LPCTSTR lpszWindowName)
{
LPCTSTR lpszClassName;
DWORD dwStyle = WS_POPUP | WS_VISIBLE | WS_THICKFRAME;
lpszClassName = AfxRegisterWndClass (CS_HREDRAW
| CS_VREDRAW,
LoadCursor(NULL,
IDC_ARROW), (HBRUSH)(::GetStockObject(LTGRAY_BRUSH)),
NULL);
// ÃÖ»óÀ§ À©µµ¿ì¸¦ ¸¸µé±â À§ÇØ Create°¡ ¾Æ´Ñ CreateEx¸¦ ½è´Ù.
return CWnd::CreateEx(WS_EX_TOPMOST, lpszClassName, lpszWindowName, dwStyle,
0, 0, 0, 0, NULL, NULL, NULL);
°øºÎ¸¦ ÇÏ´Ùº¸´Ï ¿¹¿Ü 󸮶ó´Â »ý¼ÒÇÑ °³³äÀÌ ³ª¿Ô´Âµ¥, ÀÌ¿¡ ´ëÇØ ¿¹Á¦¸¦ ÅëÇÑ ÀÚ¼¼ÇÑ ¼³¸íÀ» ºÎʵ右´Ï´Ù.
¿¹¿Ü 󸮶õ ÇÁ·Î±×·¥ÀÇ ÁøÇàÁß¿¡ ¸¸³ª´Â ¿À·ù¸¦ ó¸®ÇÏ´Â °ÍÀ» ¸»ÇÕ´Ï´Ù. º¸ÅëÀº ¿ì¸®°¡ if¹®À» ½á¼ ±×°ÍµéÀ» ¹æÁöÇϰï Çß½À´Ï´Ù. ¿¹¸¦ µé¾î µÎ A, B¸¦ ÀÔ·Â¹Þ¾Æ A/BÇÑ °ªÀ» Ãâ·ÂÇÏ·Á°í ÇÒ ¶§ BÀÇ °ªÀÌ 0ÀÌ µÇ¸é ³ª´ ¼ö ¾ø´Â ¿À·ù°¡ ¹ß»ýÇÕ´Ï´Ù. À̰ÍÀ» ¸·±â À§Çؼ if¹®À¸·Î b°¡ 0ÀÎÁö¸¦ °Ë»çÇÏ°Ô µÇ´Â °ÍÀÌÁö¿ä. ±×·±µ¥ C++·Î °¡¸é¼ ÀÌ·¯ÇÑ Ã³¸®¸¦ º¸´Ù ÆíÇÏ°Ô ÇØÁÙ ¼ö ÀÖ´Â ÇÔ¼ö°¡ ¹Ù·Î try(), catch()¶ó´Â ÇÔ¼öÀÔ´Ï´Ù. ¿¹¿Ü¸¦ ó¸®ÇÏ´Â ÀýÂ÷´Â ´ÙÀ½°ú °°½À´Ï´Ù.
¨ç ½ÇÆÐ¸¦ À¯¹ßÇÒ¸¸ÇÑ ÄÚµå ºÎºÐ¿¡¼ ¿¹¿Ü¸¦ ´øÁø´Ù(throw).
¨è ±× ¿¹¿Ü¸¦ ÇØ´ç ¿¹¿Ü Çڵ鷯¿¡¼ ¹Þ´Â´Ù(catch).
¨é ÇØ´ç ¿¹¿Ü¿¡ ´ëÇÑ Ã³¸®¸¦ ÇÑ´Ù.
try
{
if(B £¼ 0) throw exception();
else if(B £¾= m_nLength) throw exception();
else if(check_lock(B) == LOCKED)
throw "Array element is locked";
else
{
// ±âŸ ÀÛ¾÷
}
}
catch(const char* pszErr)
{
cout £¼£¼ *pszErr £¼£¼ end1;
}
catch(exception e)
{
cout £¼£¼ e.what() £¼£¼ end1;
}
throw¸¦ ÇÒ ¶§´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ Àü´ÞÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ´ç¿¬È÷ catch¿¡¼´Â ÀÎÀÚÀÇ Çü½Ä¿¡ ¸Â´Â catch°¡ ½ÇÇàµË´Ï´Ù. ¿¹¿Ü°¡ ´øÁ®Áö¸é ¸¸µé¾îÁø ¸ðµç °´Ã¼´Â ÀûÀýÇÏ°Ô ÆÄ±«µË´Ï´Ù. ±×·³À¸·Î½á ÇÁ·Î±×·¥¿¡¼ ¿¡·¯ »óȲÀÌ µÇ´Â °æ¿ì¿¡µµ °è¼Ó ÇÁ·Î±×·¥ÀÌ µ¹¾Æ°¥ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ±×¸®°í °´Ã¼¸¦ ¸¸µé¶§ ¿¹¿Ü 󸮸¦ ÇϰíÀÚ ÇÒ ¶§´Â ´ÙÀ½°ú °°½À´Ï´Ù.
try
{
m_nData = new int[nArraySize];
m_pLogger = new CLog;
}
catch(...)
{
cout £¼£¼ "Error constructing CSafeArray"
£¼£¼ end1;
}
<´ÙÀ̾ó·Î±×¿¡¼ ۰ª ¸Þ½ÃÁö ó¸®>
MFC¸¦ ÀÌ¿ëÇØ °£´ÜÇÑ °ÔÀÓÀ» ¸¸µé·Á°í ÇÕ´Ï´Ù. À©µµ¿ì´Â ´ÙÀ̾ó·Î±× º£À̽º·Î ¸¸µé¾ú½À´Ï´Ù. ±×·±µ¥ Áß¿äÇÑ ¹®Á¦°¡ ¹ß»ýÇß½À´Ï´Ù. ÁÖÀΰø ij¸¯Å͸¦ ¿òÁ÷¿©¾ß Çϴµ¥ ¿òÁ÷ÀÌÁö ¾Ê½À´Ï´Ù. WM_KEY, WM_KEYUP, WM_KEYDOWN µî ¸ðµç ¸Þ½ÃÁö¸¦ °É¾îºÁµµ ۰ªÀÌ µé¾î¿ÀÁö¸¦ ¾Ê½À´Ï´Ù. ÀÌ·² ¶© ¾î¶»°Ô ÇØ¾ß ÇÏ´ÂÁö¿ä. ´ÙÀ̾ó·Î±× º£À̽º À©µµ¿ì¿¡¼´Â ¿ø·¡ ۰ªÀÌ µé¾î¿ÀÁö¸¦ ¾Ê³ª¿ä? ±×·¸´Ù¸é °ÔÀÓÀ» ¸¸µé ¼ö ¾ø´ÂÁö¿ä.
¹°·Ð ´ÙÀ̾ó·Î±× º£À̽º À©µµ¿ì·Îµµ °ÔÀÓÀ» ¸¸µé ¼ö ÀÖ½À´Ï´Ù. À©µµ¿ìÀÇ ´ÙÀ̾ó·Î±×¹Ú½º´Â ±âº»ÀûÀÎ ÄÁÆ®·Ñ ÄÁÅ×ÀÌ³Ê ¿ªÇÒÀ» Çϱâ À§Çؼ ۰ªÀ» »ç¿ëÀÚ¿¡°Ô ³Ñ°ÜÁÖÁö ¾Ê°Ô µÇ¾î ÀÖ½À´Ï´Ù. ´ç¿¬È÷ ۰ªÀ» ¹ÞÁö ¾ÊÀ¸¹Ç·Î ÁÖÀΰøÀÌ ¿òÁ÷ÀÌÁö ¾Ê´Â °ÍÀÔ´Ï´Ù. ´ÙÀ̾ó·Î±× ¸Þ½ÃÁö Áß WM_GETDLGCODE¶ó´Â ¸Þ½ÃÁö°¡ ÀÖ½À´Ï´Ù. ÀÌ ¸Þ½ÃÁö´Â ´ÙÀ̾ó·Î±×°¡ Ãʱâ鵃 ¶§ ÇÁ·Î±×·¥¿¡ ¸Þ½ÃÁö¸¦ º¸³» ¸®ÅϵǴ °ªÀ¸·Î ۰ª ¹× ¹öưµéÀÇ Ã³¸® °áÁ¤À» ¼³Á¤ÇÏ°Ô µË´Ï´Ù. ÇØ´ç ¸Þ½ÃÁö¸¦ ¹Þ¾Æ¼ ¾Æ·¡¿Í °°Àº ¼³Á¤°ªÀ» ¸®ÅÏÇÏ°Ô µÇ¸é ±× ÇØ´çÇÏ´Â ÀÛ¾÷¿¡ °üÇÑ °ªÀ» ȹµæÇÒ ¼ö ÀÖ½À´Ï´Ù.
DLGC_BUTTON : ÀϹÝÀû ¹öưÀÇ ´¸² ó¸®
DLGC_DEFPUSHBUTTON : ±âº» ¹öư ´¸² ó¸®
DLGC_HASSETSEL : ¿¡µðÆ®¹Ú½ºÀÇ Set Select ó¸®. EM_SETSEL ¸Þ½ÃÁö
DLGC_UNDEFPUSHBUTTON : ±âº» ¹öư ÀÌ¿ÜÀÇ ¹öư ´¸² ó¸®
DLGC_RADIOBUTTON : ¶óµð¿À ¹öưÀÇ Ã³¸®
DLGC_STATIC : Á¤Àû ÄÁÆ®·ÑÀÇ Ã³¸®
DLGC_WANTALLKEYS : ¸ðµç ۰ªÀÇ ¹Ýȯ ó¸®
DLGC_WANTARROWS : ¹æÇâ ۰ªÀÇ ¹Ýȯ ó¸®
DLGC_WANTCHARS : WM_CHAR ¸Þ½ÃÁö
DLGC_WANTMESSAGE : ¸ðµç Ű °ªÀÇ Ã³¸®. ÄÁÆ®·Ñ ۰ª ó¸® ¹«½Ã
DLGC_WANTTAB : TAB Ű
´ÙÀ̾ó·Î±× º£À̽º ÇÁ·Î±×·¥ Áß¿¡¼ ¾Æ·¡¿Í °°ÀÌ ÇÏ¸é ¸ðµç ŰÀÇ °ªÀ» ȹµæÇÒ ¼ö ÀÖ½À´Ï´Ù.
CMyDlgWnd::OnGetDlgCode
{
return DLGC_WANTALLKEYS;
}