<´ÙÀ̾ó·Î±×¹Ú½º¿¡ ÅøÆÁÀ» Ãß°¡ÇÏ·Á¸é>

 ºñÁÖ¾ó C++ 5.0À¸·Î ¸¸µç ¾ÖÇø®ÄÉÀ̼ÇÀÇ ´ÙÀ̾ó·Î±×¹Ú½º¿¡ ÅøÆÁÀ» ³ªÅ¸³»°í ½Í½À´Ï´Ù.  

 ÅøÆÁÀº CToolTipCtrl Ŭ·¡½º¸¦ ÀÌ¿ëÇÏ¸é ½±°Ô ±¸ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¸ÕÀú Create()¸¦ È£ÃâÇؼ­ ÅøÆÁ °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù. ±×¸®°í ³ª¼­ AddTool()¸¦ È£ÃâÇØ °¢°¢ÀÇ ÄÁÆ®·Ñ°ú ÅøÆÁ ¹®ÀÚ¿­À» ¿¬°áÇØ ÁÝ´Ï´Ù. ¿©±â¼­ ÅøÆÁ ¹®ÀÚ¿­À» Ç¥½ÃÇØ ÁÖ´Â ÇÔ¼ö´Â ReplyEvent()À̸ç, ÅøÆÁ ÄÁÆ®·Ñ °´Ã¼¸¦ »ý¼ºÇØ ÁÖ°í ÄÁÆ®·Ñ°ú ¿¬°áÇÒ ¼ö ÀÖ´Â °¡Àå Àû´çÇÑ °÷Àº WM_INITDIALOG ¸Þ½ÃÁöÀÇ Çڵ鷯(OnInitDialog())ÀÔ´Ï´Ù.
 ÀÌ·¸°Ô ÅøÆÁÀ» ÃʱâÈ­ÇØ ÁØ ÈÄ¿¡ ReplyEvent()¸¦ È£ÃâÇϸé ÅøÆÁÀ» º¼ ¼ö ÀÖÀ¸¸ç, ³ª¸ÓÁö 󸮴 PreTranslateMessage()¿¡¼­ ´ã´çÇÕ´Ï´Ù.

// ´ÙÀ̾ó·Î±× ¹Ú½º¿¡ ¹öÆ° 2°³¿Í ¿¡µðÆ® ¹Ú½º Çϳª¸¦ ³ÖÀº °Ì´Ï´Ù.
void CTooltipDlg::DoDataExchange(CDataExchange* pDX) {
    CDialog::DoDataExchange(pDX);
    //{{AFX_DATA_MAP(CTooltipDlg)
    DDX_Control(pDX, IDOK, m_btnOK);
    DDX_Control(pDX, IDCANCEL, m_btnCancel);
    DDX_Control(pDX, IDC_EDIT, m_edit);
    //}}AFX_DATA_MAP
}

BOOL CTooltipDlg::OnInitDialog() {
    CDialog::OnInitDialog();
    // ÅøÆÁ ÄÁÆ®·ÑÀ» »ý¼ºÇØ ÁØ´Ù.
    m_tooltip.Create(this);
    // AddTool ÇÔ¼ö¿¡ ÄÁÆ®·Ñ °´Ã¼ÀÇ Æ÷ÀÎÅÍ¿Í ÅøÆÁ ¹®ÀÚ¿­À» ¼³Á¤ÇÑ´Ù.
    m_tooltip.AddTool(&m_edit, "¿©±â¿¡ À̸§À» ³ÖÀ¸¼¼¿ä");
    m_tooltip.AddTool(&m_btnOK, "¿©±â¸¦ ´©¸£¸é È®ÀÎÀÔ´Ï´Ù");
    m_tooltip.AddTool(&m_btnCancel, "¿©±â¸¦ ´©¸£¸é Ãë¼ÒÀÔ´Ï´Ù.");
    return TRUE;
}

BOOL CTooltipDlg::PreTranslateMessage(MSG* pMsg) {
    switch(pMsg->message)  {
    case WM_LBUTTONDOWN:            
    case WM_LBUTTONUP:              
    case WM_MOUSEMOVE:
        // ÅøÆÁÀ» º¸¿© ÁØ´Ù.
        m_tooltip.RelayEvent(pMsg);
    }
    return CDialog::PreTranslateMessage(pMsg);

 

<¸Þ´º Ç׸ñÀ» »ç¿ëÇÒ ¼ö ¾ø°Ô ÇÏ´Â MFC Ư¼ºÀ» ¹«È¿È­ÇÏ·Á¸é>

 CMenu::EnableMenuItemÀ» È£ÃâÇÒ ¶§ ¸Þ´º Ç׸ñÀÌ »ç¿ëÇÒ ¼ö ¾ø´Â »óÅ·Π³²¾Æ Àִµ¥, ÀÌ Æ¯¼ºÀ» Á¦°ÅÇÏ°í ½Í½À´Ï´Ù.  

 CFrameWnd::m_bAutoMenuEnableÀ» FALSE·Î ¼³Á¤ÇÏ¸é µË´Ï´Ù. ÀÌ µ¥ÀÌÅÍ ¸â¹ö ÇÔ¼ö°¡ TRUEÀ̸é ÇÁ·¹ÀÓ¿÷Àº ON_UPATE_COMMAND_UI³ª ON_COMMAND ó¸® ÇÔ¼ö¸¦ °®Áö ¾ÊÀº ¸ðµç ¸Þ´º Ç׸ñÀ» ÀÚµ¿À¸·Î »ç¿ëÇÒ ¼ö ¾ø°Ô ¸¸µé±â ¶§¹®¿¡ CMenu::EnableMenuItemÀ» È£ÃâÇÒ ¶§ ¸Þ´º Ç׸ñÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ µ¥ÀÌÅÍ ¸â¹ö´Â ÃʱⰪÀ¸·Î TRUE¸¦ °®Áö¸¸ public ¼Ó¼ºÀ̹ǷΠÁ÷Á¢ º¯°æÇÒ ¼ö ÀÖ½À´Ï´Ù.
 
m_bAutoMenuEnable = FALSE;
CMenu* pMenu = Getmenu();
pMenu->EnableMenuItem(ID_MENU_ITEM, MF_BYCOMMAND | MF_DISABLED);

 

<¾ÖÇø®ÄÉÀ̼ÇÀÇ ÀÌÀü À§Ä¡¸¦ º¸Á¸ÇÏ·Á¸é>

 ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¾·áÇÒ ¶§ ¾ÖÇø®ÄÉÀ̼ÇÀÇ Å©±â¿Í À§Ä¡¸¦ ±â¾ïÇØ µÎ¾ú´Ù°¡ ´ÙÀ½ ½ÇÇà ½Ã ÀÌÀü À§Ä¡¿Í °°Àº À§Ä¡¿¡¼­ ¾ÖÇø®ÄÉÀ̼ÇÀ» ½ÇÇàÇÏ°í ½Í½À´Ï´Ù.  

 ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¼ÂÆÃÀ» ÀúÀåÇÏ·Á¸é À©µµ¿ì ·¹Áö½ºÆ®¸®¸¦ ÀÌ¿ëÇÏ¸é µË´Ï´Ù. À̸¦ Áö¿øÇϱâ À§Çؼ­ CWinApp Ŭ·¡½º´Â SetRegistryKey()¿Í WriteProfileInt(), WriteProfileString(), GetProfileInt(), GetProfileString()À» Á¦°øÇÕ´Ï´Ù. SetRegistryKey()ÀÇ ¿øÇüÀº ´ÙÀ½°ú °°½À´Ï´Ù.

void SetRegistryKey(LPCTSTR lpszRegistryKey);

 ÀϹÝÀûÀ¸·Î lpszRegistryKey´Â ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÑ È¸»ç¸íÀÔ´Ï´Ù. ¾ÖÇø®ÄÉÀÌ¼Ç À§Àúµå¸¦ ÀÌ¿ëÇØ Äڵ带 »ý¼ºÇß´Ù¸é ±âº»ÀûÀ¸·Î ´ÙÀ½°ú °°ÀÌ ÄÚµùµË´Ï´Ù.

BOOL CAboutApp::InitInstance() {
    // »ý·«...
    // Change the registry key under which our settings are stored.
    // You should modify this string to be something appropriate
    // such as the name of your company or organization.
    SetRegistryKey(_T("Local AppWizard-Generated Applications"));
    // »ý·«...
}

 ÀÌ ÇÔ¼ö¸¦ È£ÃâÇϸé ÀÚµ¿À¸·Î MRU(Most Recently Used) List°¡ ÀúÀåµË´Ï´Ù. ·¹Áö½ºÆ®¸®¿¡ ÀúÀåµÇ´Â Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.

HKEY_CURRENT_USER\Software\<company name>\
<application name>\<section name>\<value name>

 ¾ÖÇø®ÄÉÀ̼ÇÀÌ À§Ä¡¿Í Å©±â¸¦ º¸°üÇÏ°í ¾ÖÇø®ÄÉÀÌ¼Ç ½ÃÀÛ ½Ã º¸°üµÈ ¾ÖÇø®ÄÉÀ̼ÇÀÇ Å©±â¿Í À§Ä¡¸¦ Àоî¿À´Â ÀÛ¾÷À» Çϱ⿡ °¡Àå ÁÁÀº ºÎºÐÀº CMainFrameÀÇ OnClose()¿Í OnShowWindow()ÀÔ´Ï´Ù.
 ´ÙÀ½ ¿¹´Â CFameWndÀÇ OnClose()¿Í OnShowWindow()¸¦ ¿À¹ö¶óÀ̵åÇÑ °ÍÀ¸·Î ¾ÖÇø®ÄÉÀ̼ÇÀÇ Å©±â¿Í À§Ä¡¸¦ ±â¾ïÇØ µÓ´Ï´Ù.

void CMainFrame::OnClose() {
    // ÇöÀç ¸ÞÀÎ À©µµ¿ìÀÇ À§Ä¡ Á¤º¸¸¦ ¾ò¾î¿Â´Ù.
    WINDOWPLACEMENT wp;
    GetWindowPlacement(&wp);
    // ÇöÀç ¸ÞÀÎ À©µµ¿ìÀÇ À§Ä¡¿Í Å©±â¸¦ ·¹Áö½ºÆ®¸®¿¡ ¾´´Ù.
    AfxGetApp()->WriteProfileInt("Initialization",
        "VertPos",
        wp.rcNormalPosition.top);
    AfxGetApp()->WriteProfileInt("Initialization",
        "HorizPos",
        wp.rcNormalPosition.left);
    AfxGetApp()->WriteProfileInt("Initialization",
        "Height",
        wp.rcNormalPosition.bottom - wp.rcNormalPosition.top);
    AfxGetApp()->WriteProfileInt("Initialization",
        "Width",
        wp.rcNormalPosition.right - wp.rcNormalPosition.left);
    CFrameWnd::OnClose();
}

void CMainFrame::OnShowWindow(BOOL bShow, UINT nStatus) {       
    CFrameWnd::OnShowWindow(bShow, nStatus);
    // ·¹Áö½ºÆ®¸®¿¡¼­ ÀÌÀü¿¡ ÀúÀåµÈ ÇÁ·¹ÀÓ À©µµ¿ìÀÇ Å©±â¿Í À§Ä¡¸¦
    // ¾ò¾î ¿Í¼­ ÇÁ·¹ÀÓ À©µµ¿ìÀÇ Å©±â¸¦ Á¶Á¤ÇÑ´Ù.
    int iVert =
        AfxGetApp()->GetProfileInt("Initialization","VertPos",0);
    int iHoriz =
        AfxGetApp()->GetProfileInt("Initialization","HorizPos",0);
    int Width =
        AfxGetApp()->GetProfileInt("Initialization","Width",400);;
    int Height =
        AfxGetApp()->GetProfileInt("Initialization","Height",280);
    // adjust the application's frame size and position
    SetWindowPos(NULL,iHoriz,iVert,Width,Height, NULL);
}

 

<½Ã½ºÅÛ ¸Þ´º¸¦ ¾ø¾Ö·Á¸é>

 ºñÁÖ¾ó C++¿¡¼­ ŸÀÌƲ¹Ù¿¡ ÀÖ´Â ¾ÆÀÌÄÜ Æ˾÷ ¸Þ´º¸¦ Á¦°ÅÇÏ·Á ÇÕ´Ï´Ù.  

 Å¸ÀÌƲ¹Ù¿¡ ÀÖ´Â ½Ã½ºÅÛ ¸Þ´º¸¦ ¾ø¾Ö·Á¸é CFrameWnd Ŭ·¡½º¿¡¼­ »ó¼Ó¹ÞÀº
CMainFrame¿¡ ÀÖ´Â PreCreateWindow()¿¡ ´ÙÀ½°ú °°ÀÌ ÇÑ ÁÙÀ» Ãß°¡Çϸé
°£´ÜÈ÷ Á¦°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.

cs.style &= ~WS_SYSMENU;

º¸Åë À©µµ¿ì ½ºÅ¸ÀÏÀÎ WS_OVERLAPPEDWINDOW¿¡´Â ½Ã½ºÅÛ ¸Þ´º¿Í ¿©·¯
À©µµ¿ì ½ºÅ¸ÀÏÀÌ Á¤ÀǵŠÀֱ⠶§¹®¿¡ ±âº»°ª¿¡¼­ ½Ã½ºÅÛ ¸Þ´º¸¦ ¾ø¾Ö¸é µÇ´Â
°ÅÁÒ.