<Åø¹Ù ¼û±â±â/º¸ÀÌ±â ¿É¼Ç ÁÖ±â>

 MFC·Î ÀÛ¼ºÇÑ ¾ÖÇø®ÄÉÀ̼ǿ¡¼­ Åø¹Ù¿Í »óŹٴ ±âº»À¸·Î Ãß°¡µÇ´Âµ¥, ¸Þ´ºÀÇ º¸±â Ç׸ñ¿¡ Åø¹Ù¸¦ ¼û±æ ¼ö ÀÖ´Â ¿É¼ÇÀÌ ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô Åø¹Ù¸¦ ¼û±â°Å³ª º¸ÀÌ°Ô ¼±Åà ¿É¼ÇÀ» ÁÖ´Â ¹æ¹ýÀÌ ÀÖ³ª¿ä?

¹°·Ð ÀÖ½À´Ï´Ù. ÇÁ·Î±×·¥À¸·Î Åø¹Ù(¶Ç´Â »óŹÙ)¸¦ ¼û±â°Å³ª º¸ÀÌ°Ô ÇÏ·Á¸é ¸ÞÀÎÇÁ·¹ÀÓ¿¡ ÀÌ ¸Þ½ÃÁö¸¦ º¸³»¸é °£´ÜÈ÷ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. º¸±â ¸Þ´º¿¡¼­ Åø¹Ù¸¦ º¸À̱â/¼û±â±â ¸í·ÉÀº ¸ÞÀÎÇÁ·¹ÀÓÀÌ À̸¦ ´ë½Å ó¸®ÇϹǷΠ¸ÞÀÎÇÁ·¹ÀÓ¿¡´Â ±âº»ÀûÀ¸·Î ÀÌ ¸í·É¿¡ ´ëÇÑ Çڵ鷯°¡ ÀÛ¼ºµÅ ÀÖ½À´Ï´Ù. À̶§ wParam°ªÀÌ 0ÀÌ¸é ¼û±â°í, 0ÀÌ ¾Æ´Ï¸é ´Ù½Ã º¸¿© ÁÝ´Ï´Ù. ¿©±â¼­ Åø¹Ù³ª »óŹٸ¦ ¾ø¾Ö°Å³ª ´Ù½Ã º¸ÀÌ°Ô ÇÏ´Â ¸Þ´º ¸í·É ID´Â ID_VIEW_TOOLBAR¿Í ID_VIEW_STATUSBARÀÔ´Ï´Ù.

´ÙÀ½ÀÇ ¼Ò½º´Â Åø¹Ù¿Í »óŹٸ¦ ¼û±â´Â ÄÚµåÀÔ´Ï´Ù. ¹Ý´ë·Î Åø¹Ù³ª »óŹٸ¦ º¸ÀÌ°Ô ÇÏ·Á¸é wParam°ªÀ» 0ÀÌ ¾Æ´Ñ °ªÀ» ³Ö¾î ÁÖ¸é µË´Ï´Ù.

if( ((CMainFrame*)GetParent())->m_wndToolBar.IsWindowVisible()) {
        GetParent()->SendMessage(WM_COMMAND, ID_VIEW_TOOLBAR, 0L);
}

if( ((CMainFrame*)GetParent())->m_wndStatusBar.IsWindowVisible()) {
        GetParent()->SendMessage(WM_COMMAND, ID_VIEW_STATUS_BAR, 0L);
}

 

<Ŭ¶óÀ̾ðÆ® ¿µ¿ªÀ» Ŭ¸¯ÇØ À©µµ¿ì¸¦ À̵¿ÇÏ·Á¸é>

 Ä¸¼Ç »Ó ¾Æ´Ï¶ó À©µµ¿ìÀÇ ´Ù¸¥ °÷À» Ŭ¸¯ÇßÀ» ¶§µµ À©µµ¿ì¸¦ À̵¿½Ãų ¼ö ÀÖ´Â ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ°í ½Í½À´Ï´Ù.  

À©µµ¿ì´Â ¸¶¿ì½º À§Ä¡¸¦ °áÁ¤ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§ WM_NCHITTEST ¸Þ½ÃÁö¸¦ À©µµ¿ì¿¡ Àü´ÞÇÕ´Ï´Ù. ±×·¯¹Ç·Î ¸¶¿ì½º°¡ ĸ¼Ç¿¡ À§Ä¡ÇÏÁö ¾Ê¾Ò´õ¶óµµ À©µµ¿ì¸¦ ¼ÓÀÏ ¼ö ÀÖ½À´Ï´Ù.
 ¹æ¹ýÀº ¸ÕÀú À§Àúµå¸¦ »ç¿ëÇØ WM_NCHITTEST ¸Þ½ÃÁö¸¦ ó¸®ÇÏ°í, ±âº» Ŭ·¡½º ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù. ÇÔ¼ö°¡ HTCLINE¸¦ ¹ÝȯÇÑ ÈÄ ¸¶¿ì½º°¡ Ŭ¶óÀ̾ðÆ® ¿µ¿ª¿¡ ÀÖ´Ù°í ¾Ë·Á ÁÙ ¶§ ¸¶¿ì½º À§Ä¡¸¦ ĸ¼ÇÀ¸·Î ÀνÄÇÏ°Ô²û HTCATION°ªÀ» µ¹·ÁÁÖ¸é µË´Ï´Ù.

UNIT CSampleDialog::OnNchitTest(CPoint point) {
   UINT nHiTest = CDialog::OnNchitTest(point);
   return (nHitest ==HTCLINT) ? HTCAPTION : nHitest
}

 ±× ´ÙÀ½¿¡ Ŭ·¡½º À§Àúµå¸¦ »ç¿ëÇØ ºä¿¡¼­ WM_LBUTTONDOWN ¸Þ½ÃÁö¸¦ ó¸®ÇÏ°í, ÇÁ·¹ÀÓ À©µµ¿ì¿¡ ¸¶¿ì½ºÀÇ ´­¸² »óŸ¦ HTCATION·Î ÁöÁ¤ÇØ WM_NCLBUTTONDOWN ¸Þ½ÃÁö¸¦ Àü´ÞÇÏ¸é µË´Ï´Ù.

void CSampleView::OnLBottonDown(UNIT nFlags, CPoint point) {
   CView;;OnLBottonDown(nFlags, point) ;
   //»ç¿ëÀÚ°¡ ĸ¼ÇÀ» Ŭ¸¯ÇÑ °ÍÀ¸·Î ÀνÄÇÏ°Ô ÇÁ·¹ÀÓÀ» ¼ÓÀδÙ.
   GetParent()->PostMessage(WM_ NCLBUTTONDOWN, HTCATION)
   MAKELPARAM(point.x, point.y) ;
}

¿©±â¼­ Cwnd::Getparent¿¡ ´ëÇÑ È£ÃâÀº ÇÊ¿äÇÏÁö ¾Ê½À´Ï´Ù.

void CSampleDialog::OnLBottonDown(UNIT nFlags, CPoint point) {
   CDialog::OnLBottonDown(nFlags, point)
   //»ç¿ëÀÚ°¡ ĸ¼ÇÀ» Ŭ¸¯ÇÑ °ÍÀ¸·Î ÀνÄÇÏ°Ô²û ´ëÈ­»óÀÚ¸¦ ¼ÓÀδÙ.
   PostMessage(WM_ NCLBUTTONDOWN, HTCAPTION,
                MAKELPARAM(point.x, point.y));
}

 ÇÏÁö¸¸ ÀÌ ¹æ¹ýÀº µÎ °¡Áö ¹®Á¦Á¡ÀÌ ÀÖ½À´Ï´Ù. Çϳª´Â Ŭ¶óÀ̾ðÆ® ¿µ¿ªÀ» ´õºíŬ¸¯Çϸé À©µµ¿ì°¡ ÃÖ´ëÈ­µÅ¾ß Çϴµ¥, ºä¸¦ °¡Áö´Â ÇÁ·¹ÀÓ À©µµ¿ì¿¡¼­´Â Çã¿ëÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ°í, ¶Ç´Ù¸¥ Çϳª´Â ¿ÞÂÊ ¸¶¿ì½º ´ÜÃ߸¦ Ŭ¸¯ÇÒ ¶§ ĸ¼Ç¹Ù¸¦ Ŭ¸¯ÇÑ °Íó·³ Àνĵȴٴ °ÍÀÔ´Ï´Ù.

 

<ÃÖ´ëÈ­µÈ SDI À©µµ¿ì¸¦ ½ÇÇàÇÏ·Á¸é>

 Ã³À½ À©µµ¿ì¸¦ ½ÇÇàÇÒ ¶§ ÃÖ´ëÈ­(Maximize)µÈ »óÅ·Π½ÇÇàÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÏ´ÂÁö ¾Ë°í ½Í½À´Ï´Ù. MDIÀÇ °æ¿ì´Â À§Àúµå¿¡¼­ ¿É¼ÇÀ» ¼³Á¤ÇÏ¸é µÇÁö¸¸ SDIÀÇ °æ¿ì´Â À§Àúµå¿¡¼­ ¿É¼ÇÀ» ¼³Á¤Çصµ ÃÖ´ëÈ­µÇÁö ¾Ê½À´Ï´Ù.  

CWinAppÀÇ InitInstance ÇÔ¼ö¿¡¼­ ´ÙÀ½°ú °°ÀÌ Äڵ带 º¯°æÇØ ÁÖ¸é
°¡´ÉÇÕ´Ï´Ù.

// ¿ø·¡ ÄÚµå
BOOL CMailApp::InitInstance() {
.    m_pMainWnd->ShowWindow(SW_SHOW);
     m_pMainWnd->UpdateWindow();
     return TRUE;
}

// ¹Ù²ï ÄÚµå
BOOL CMailApp::InitInstance() {
.    m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);
     m_pMainWnd->UpdateWindow();
     return TRUE;
}

 

<DC ÇÚµé·Î CDC °´Ã¼¸¦ ¸¸µé·Á¸é>

 ¿À³Ê µå·Î¿ì(owner draw) ¹öÆ°À» ¸¸µé ¶§ WM_DRAWITEM ¸Þ½ÃÁö¿¡¼­´Â DRAWITEMSTRUCT ±¸Á¶Ã¼¿Í DC ÇÚµéÀ» ³Ñ±â´Âµ¥, À̸¦ ÀÌ¿ëÇØ CDC °´Ã¼¸¦ »ý¼ºÇÏ°í ½Í½À´Ï´Ù.

 CDCÀÇ ¸â¹ö ÇÔ¼öÁß FormHandle()À̶ó´Â ¸â¹ö ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù. ÇÚµéÀ» °¡Áö°í °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ°Ô ÇÏ´Â ÇÔ¼ö·Î Çڵ鸸 ¾Ë°í ÀÖÀ¸¸é °´Ã¼¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. FromHandle()Àº CDC »Ó¸¸ ¾Æ´Ï¶ó ÇÚµéÀ» °®°í ÀÖ´Â À©µµ¿ì ¿ÀºêÁ§Æ®¿¡ ¸ðµÎ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
 ¿¹¸¦ µé¸é CFont³ª CBrush¿Í °°Àº GDI °´Ã¼³ª CWnd, CSocketÀ» ºñ·ÔÇÑ ÇÚµéÀ» ÀÌ¿ëÇÏ´Â °´Ã¼´Â ¸ðµÎ ÀÌ·± ¸â¹ö ÇÔ¼ö¸¦ °®°í ÀÖÀ¸¹Ç·Î ÇÚµéÀ» ¾Ë°í ÀÖÀ¸¸é ¾ðÁ¦µçÁö °´Ã¼¸¦ ±¸¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
 ´ÙÀ½ ÄÚµå´Â DC ÇÚµéÀ» ÀÌ¿ëÇØ CDC °´Ã¼¸¦ »ý¼ºÇÏ´Â ¿¹¸¦ º¸¿© ÁÖ´Â ÄÚµåÀÔ´Ï´Ù.

void MyODList::DrawItem(LPDRAWITEMSTRUCT lpDrawItem) {
    CDC* pDC;
    pDC = CDC:FromHandle(lpDrawItem->hDC);
}

 

<Æ®¸® ÄÁÆ®·ÑÀ» ÀÌ¿ëÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â>

 CTreeView¸¦ ÀÌ¿ëÇØ ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ·Á°í ÇÕ´Ï´Ù. ±×·±µ¥ Á¦°¡ Á÷Á¢ Á¤ÀÇÇÑ Æ®¸® ÄÁÆ®·ÑÀ» ÀÌ¿ëÇÏ°í ½Í½À´Ï´Ù.  

¸ÕÀú CTreeCtrl·ÎºÎÅÍ »ó¼Ó¹ÞÀº Ŭ·¡½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù. ±×¸®°í ³ª¼­ CTreeViewÀÇ GetTreeCtrl()¸¦ ÀÌ¿ëÇØ CTreeView·ÎºÎÅÍ Æ®¸® ÄÁÆ®·ÑÀ» ¾ò¾î ¿É´Ï´Ù.
 ´ÙÀ½Àº ¾ò¾î¿Â Æ®¸® ÄÁÆ®·ÑÀ» ÀÚ½ÅÀÌ Á¦ÀÛÇÑ Æ®¸® ÄÁÆ®·Ñ·Î ¼­ºêŬ·¡½ÌÇÏ´Â °ÍÀÔ´Ï´Ù. ±×·¯¸é Æ®¸®ºä¿¡¼­ »ç¿ëÀÚ°¡ Á¤ÀÇÇÑ Æ®¸® ÄÁÆ®·ÑÀ» »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.

// ¸ÕÀú ÄÁÆ®·ÑÀ» ÀÛ¼ºÇÑ´Ù.
class CYourTreeCtrl : public CTreeCtrl {
// ¿©±â¿¡ ÀÛ¼º.
};

// Æ®¸®ºä¿¡ ÀÚ½ÅÀÌ ÀÛ¼ºÇÑ Æ®¸® ÄÁÆ®·ÑÀ» ¸â¹ö·Î ¼±¾ðÇÑ´Ù.
Class CYourTreeView : public CTreeView {
protected: CYourTreeCtrl m_yourTreeCtrl;
.};

// OnCreate Çڵ鷯¿¡¼­ ÀÚ½ÅÀÌ Á¦ÀÛÇÑ ÄÁÆ®·Ñ·Î ¼­ºêŬ·¡½ÌÇÑ´Ù.
void  CYourTreeCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    if(CTreeView::OnCreate(plCreateStruct) != 0)
        return 1;
    if(!m_yourTreeCtrl.SubclassWindow(GetTreeCtrl().GetSafeHwnd()))
        return 1;
    return 0;
}

 

<±âº» ºê¶ó¿ìÀú¸¦ ¶ç¿ì·Á¸é>

 ÇÁ·Î±×·¥ ¾È¿¡¼­ ½Ã½ºÅÛ¿¡ ¼³Á¤µÅ ÀÖ´Â ±âº» ºê¶ó¿ìÀú¸¦ ¶ç¿ì´Â ¹æ¹ýÀ» ¾Ë°í ½Í½À´Ï´Ù.  

À©µµ¿ì APIÁß¿¡¼­ ShellExecute()¸¦ ÀÌ¿ëÇÏ¸é °£´ÜÈ÷ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù.
ÇÔ¼öÀÇ ¿øÇüÀº ´ÙÀ½°ú °°½À´Ï´Ù.

HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile,
       LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd);

ShellExecute()ÀÇ ¼¼¹ø° ÀÎÀÚÀÎ plFile¿¡ URLÀ» Àû¾îÁÖ¸é ½Ã½ºÅÛ¿¡ ¼³Á¤µÅ
ÀÖ´Â ±âº» ºê¶ó¿ìÀú¸¦ ½ÇÇàÇØ ÁöÁ¤ÇÑ URLÀ» ¿­¾î ÁÝ´Ï´Ù.

ShellExcute(NULL, NULL, http://www.somesite.com, NULL, SW_SHOWNORMAL);

 

<µµÅ¥¸ÕÆ® ¾ø´Â ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â>

 MFC·Î µµÅ¥¸ÕÆ®³ª ºä°¡ ¾ø´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé°í ½Í½À´Ï´Ù.  

 µÎ °¡Áö ¹æ¹ýÀÌ Àִµ¥, Çϳª´Â À§Àúµå¿¡¼­ ´ÙÀ̾ó·Î±× º£À̽º(dialog based) ¿É¼ÇÀ» ¼±ÅÃÇÏ´Â °ÍÀÔ´Ï´Ù. ´ÙÀ̾ó·Î±× º£À̽ºÀÇ ¾ÖÇø®ÄÉÀ̼ÇÀº µµÅ¥¸ÕÆ®³ª ºä°¡ »ý¼ºµÇÁö ¾Ê½À´Ï´Ù. ´Ù¸¥ ÇÑ °¡Áö´Â CWinApp¿Í CFrameWnd¸¦ Á÷Á¢ ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù. MFC ¾ÖÇø®ÄÉÀ̼ÇÀº ¹Ýµå½Ã CWinApp¿Í CFrameWnd°¡ Á¸ÀçÇØ¾ß Çϱ⠶§¹®ÀÔ´Ï´Ù.
 ÀÌ·¸°Ô À§Àúµå¸¦ ÀÌ¿ëÇÏÁö ¾Ê°í ÀÛ¼ºÇϸé CFramewnd¿¡¼­ WM_PAINT µîÀÇ ÀϹÝÀûÀ¸·Î À©µµ¿ì°¡ ó¸®ÇÏ´Â ¸Þ½ÃÁö¸¦ ó¸®ÇØ ÁÖ¾î¾ß ÇÕ´Ï´Ù. ´ÙÀ½ ¿¹´Â MFC »ùÇÿ¡¼­ ¹ßÃéÇÑ ³»¿ëÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ¸é µµÅ¥¸ÕÆ®¿Í ºä°¡ ¾ø´Â À©µµ¿ì¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. (Âü°í : VC++ 6.0 ¿¡´Â µû·Î ÀÌ·¯ÇÑ ±â´ÉÀ» Á¦°øÇÕ´Ï´Ù.)

#include <afxwin.h>
class CNoviewWindow : public CFrameWnd {
public:
    CNoviewWindow() {
    Create(NULL, _T("Hello World!"), WS_OVERLAPPEDWINDOW, rectDefault); }
};

class CNoviewApp : public CWinApp {
public:
    virtual BOOL InitInstance();
};

BOOL CNoviewApp::InitInstance() {
    m_pMainWnd = new CNoviewWindow();
    m_pMainWnd->ShowWindow(m_nCmdShow);
    m_pMainWnd->UpdateWindow();
    return TRUE;
}
CNoviewApp NoviewApp;