Åø ÆÁ

¡¡WTL¿¡¼­´Â °ø¿ë ÄÁÆ®·ÑÀÇ Åø ÆÁ ÄÁÆ®·ÑÀ»CToolTipCtrlT À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼­ ĸ½¶È­Çϰí ÀÖ½À´Ï´Ù.  ÅÛÇø´ Àμö¿¡´Â Ŭ·¡½º¸¦ ÁöÁ¤ÇÕ´Ï´Ù¸¸,, ±× Ŭ·¡½º´ÂCToolTipCtrlTŬ·¡½ºÀÇ base class·Î¼­ »ç¿ëµË´Ï´Ù. atlctrls.hÇì´õ¿¡¼­´Âtypedef¿¡ ÀÇÇØ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.

// atlctrls.h¾È

typedef CToolTipCtrlT<ATL::CWindow>   CToolTipCtrl;

                      


À̰ÍÀº CToolTipCtrlŬ·¡½º´ÂCWindowŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½ºÀÎ °ÍÀ» ÀǹÌÇÕ´Ï´Ù.

¡¡WTL
ÀÇCToolTipCtrlŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í µ¿µîÀÇ ±â´ÉÀ» °®Ãß°í ÀÖ´Â °Í ¿Ü¿¡ È®Àå ±â´Éµµ °®Ãß°í ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CToolTipCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. Ç¥½ÃÇÏ´Â Åø ÆÁÀ» Á¤ÀûÀ¸·Î ¼³Á¤ÇÏ´Â ¹æ¹ý°ú µ¿ÀûÀ¸·Î ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù.



Á¤ÀûÀÎ Åø ÆÁ

¡¡¿ì¼± , Åø ÆÁÀ» Á¤ÀûÀ¸·Î ¼³Á¤ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ÀÌÇÏÀÇ ¿¹´Â ´ÙÀ̾ó·Î±×»óÀÇ ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º Ä¿¼­¸¦ ½ÇÀ¸¸é ¡¸edit control¡¹À̶ó°í ÇÏ´Â Åø ÆÁÀ» Ç¥½ÃÇÕ´Ï´Ù.

 

// stdafx.h

#include <atlbase.h>

#include <atlapp.h>

extern CAppModule _Module;

#include <atlwin.h>

 

#include <atlcrack.h>

#include <atlmisc.h>

#include <atlctrls.h>  // ÄÁÆ®·Ñ¿ë Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§ÇØ

                      

 

// maindlg.h

class CMainDlg : public CDialogImpl<CMainDlg>

{

public:

    enum { IDD = IDD_MAINDLG };

 

    CEdit m_edit_tooltip;    // Åø ÆÁ Ç¥½Ã¿ë

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_ID_HANDLER_EX(IDOK, OnOK)

        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)

    END_MSG_MAP()

 

    LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){

        // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡

        CenterWindow();

 

        // Å« ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));

        SetIcon(hIcon, TRUE);

       

        // ÀÛÀº ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));

        SetIcon(hIconSmall, FALSE);

 

        // ÄÁÆ®·Ñ ¼³Á¤

        m_edit_tooltip = GetDlgItem(IDC_EDIT_TOOLTIP);

 

        // Åø ÆÁ ÄÁÆ®·Ñ ÀÛ¼º

        CToolTipCtrl tooltip;

        tooltip.Create(m_hWnd);

        tooltip.Activate(TRUE);

 

        // ¿¡µðÆ® ÄÁÆ®·ÑÀÇ Åø ÆÁ Á¤º¸¸¦ Åø ÆÁ ÄÁÆ®·Ñ¿¡ Ãß°¡

        CToolInfo tiEdit(TTF_SUBCLASS, m_edit_tooltip, 0, NULL, _T("edit control"));

        tooltip.AddTool(tiEdit);

 

        return TRUE;

    }

 

    void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

 

    void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

};

                      

 

// Control.cpp³»

#include "stdafx.h"

 

#include "resource.h"

 

#include "maindlg.h"

 

CAppModule _Module;

 

int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow)

{

    HRESULT hRes = ::CoInitialize(NULL);

    ATLASSERT(SUCCEEDED(hRes));

 

    ::DefWindowProc(NULL, 0, 0, 0L);

 

    AtlInitCommonControls(ICC_COOL_CLASSES | ICC_WIN95_CLASSES);

 

    hRes = _Module.Init(NULL, hInstance);

    ATLASSERT(SUCCEEDED(hRes));

 

    int nRet = 0;

    // BLOCK: ¾îÇø®ÄÉÀÌ¼Ç ½ÇÇà

    {

        CMainDlg dlgMain;

        nRet = dlgMain.DoModal();

    }

 

    _Module.Term();

    ::CoUninitialize();

 

    return nRet;

}

                      


¡¡
¿ì¼±, ÀÚ¿øÀ» ÀÛ¼ºÇÕ´Ï´Ù. ´ÙÀ̾ó·Î±×¿¡ ¿¡µðÆ® ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ ÀÚ¿øID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© ¿¡µðÆ® ÄÁÆ®·ÑÀÇ[½ºÅ¸ÀÏ]¿¡¼­´Â µðÆúÆ®¿¡ [¼öÆò ½ºÅ©·Ñ ¹Ù], [¼öÁ÷ ½ºÅ©·Ñ ¹Ù],[¼öÁ÷ ¿ÀÅä ½ºÅ©·Ñ],[°³ÇàÀ» Çã°¡]¿¡ üũ¸¦ ÇÕ´Ï´Ù.

ÄÁÆ®·Ñ¸í

ÀÚ¿øID

¿¡µðÆ®

IDC_EDIT_TOOLTIP


¡¡
´ÙÀ½¿¡ stdafx.h¾È¿¡¼­´Â CToolTipCtrlŬ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ­ atlctrls.h Çì´õ¸¦ Æ÷ÇÔ ÇÕ´Ï´Ù.

¡¡
´ÙÀ½¿¡ CMainDlgŬ·¡½ºÀÇ WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ¿¡µðÆ® ÄÁÆ®·ÑÀ» ÃʱâÈ­Çϰí Åø ÆÁ ÄÁÆ®·ÑÀ» ÀÛ¼ºÇÕ´Ï´Ù. ±× ÈÄ ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ ´ëÇÑ Åø ÆÁ Á¤º¸¸¦ ÀÛ¼ºÇØ ±×°ÍÀ» Åø ÆÁ ÄÁÆ®·Ñ¿¡ Ãß°¡ÇÕ´Ï´Ù.

À̰ÍÀ¸·Î  ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º Ä¿¼­¸¦ °®´Ù ´ë¸é Åø ÆÁÀÌ Ç¥½ÃµË´Ï´Ù.

¡¡
µ¡ºÙ¿© Ç¥½ÃÇÏ´Â Åø ÆÁ ij¸¯ÅÍ ¶óÀÎÀ» º¹¼ö ÇàÀ¸·Î ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ±×·¯±â À§Çؼ­´Â CToolTipCtrlŬ·¡½ºÀÇ ¸â¹ö ÇÔ¼öÀÎ SetMaxTipWidth()À» »ç¿ëÇØ  Åø ÆÁÀÇ ÆøÀ» ¼³Á¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÏ´Â °ÍÀ¸·Î Æøº¸´Ù ±ä ij¸¯ÅÍ ¶óÀÎÀº ÀÚµ¿ÀûÀ¸·Î º¹¼ö ÇàÀ¸·Î Ç¥½ÃµË´Ï´Ù.

 

// OnInitDialog()

CToolTipCtrl tooltip;

tooltip.Create(m_hWnd);

tooltip.Activate(TRUE);

 

// Åø ÆÁÆøÀ» ¼³Á¤

tooltip.SetMaxTipWidth(80);

 

CToolInfo tiEdit(TTF_SUBCLASS, m_edit_tooltip, 0, NULL, _T("º¹¼öÇàÀÇ Åø ÆÁ"));

tooltip.AddTool(tiEdit);

                      


±×¸®°í ij¸¯ÅÍ ¶óÀÎÀÇ ÀÓÀÇÀÇ Àå¼Ò¿¡¼­ °³Çà ÇÏ°í ½ÍÀº °æ¿ì´Â ¡¸\r\n¡¹ À¸·Î °³Çà ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

 

// OnInitDialog()

CToolTipCtrl tooltip;

tooltip.Create(m_hWnd);

tooltip.Activate(TRUE);

 

// Åø ÆÁÆøÀ» ¼³Á¤

tooltip.SetMaxTipWidth(80);

 

CToolInfo tiEdit(TTF_SUBCLASS, m_edit_tooltip, 0, NULL, _T("º¹¼öÇàÀÇ\r\nÅø ÆÁ"));

tooltip.AddTool(tiEdit);

                      



µ¿ÀûÀÎ Åø ÆÁ

¡¡´ÙÀ½¿¡ , Åø ÆÁÀ» µ¿ÀûÀ¸·Î ¼³Á¤ÇÏ´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº ´ÙÀ̾ó·Î±×»óÀÇ ¿¡µðÆ® ÄÁÆ®·Ñ¿¡ ¸¶¿ì½º Ä¿¼­¸¦ °®´Ù ´ë¸é ¿¡µðÆ® ÄÁÆ®·ÑÀÇ ÇöÀçÀÇ Çà¼ö¸¦ Åø ÆÁÀ¸·Î Ç¥½ÃÇÏ´Â ¿¹ ÀÔ´Ï´Ù. µ¡ºÙ¿© ¾ÕÀÇ Á¤ÀûÀÎ Åø ÆÁÀ» ÀÛ¼ºÇÑ ÇÁ·Î±×·¥ÀÇ CMainDlg Ŭ·¡½º¸¸À» º¯°æÇÕ´Ï´Ù.

 

// maindlg.h

class CMainDlg : public CDialogImpl<CMainDlg>

{

public:

    enum { IDD = IDD_MAINDLG };

 

    CEdit m_edit_tooltip;    // Åø ÆÁ Ç¥½Ã¿ë ¿¡µðÆ®

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        NOTIFY_CODE_HANDLER_EX(TTN_GETDISPINFO, OnTooltipGetDispInfo)

        COMMAND_ID_HANDLER_EX(IDOK, OnOK)

        COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)

    END_MSG_MAP()

 

    LRESULT OnInitDialog(HWND hWnd, LPARAM lParam){

        // ½ºÅ©¸°ÀÇ Áß¾Ó¿¡ ¹èÄ¡

        CenterWindow();

 

        // Å« ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIcon = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXICON), ::GetSystemMetrics(SM_CYICON));

        SetIcon(hIcon, TRUE);

       

        // ÀÛÀº ¾ÆÀÌÄÜ ¼³Á¤

        HICON hIconSmall = AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,

            ::GetSystemMetrics(SM_CXSMICON), ::GetSystemMetrics(SM_CYSMICON));

        SetIcon(hIconSmall, FALSE);

 

        // ÄÁÆ®·Ñ ¼³Á¤

        m_edit_tooltip = GetDlgItem(IDC_EDIT_TOOLTIP);

 

        // Åø ÆÁ ÄÁÆ®·Ñ ÀÛ¼º

        CToolTipCtrl tooltip;

        tooltip.Create(m_hWnd);

        tooltip.Activate(TRUE);

 

        // ¿¡µðÆ® ÄÁÆ®·ÑÀÇ Åø ÆÁ Á¤º¸¸¦ Åø ÆÁ ÄÁÆ®·Ñ¿¡ Ãß°¡

        CToolInfo tiEdit(TTF_SUBCLASS, m_edit_tooltip);

        tooltip.AddTool(tiEdit);

 

        return TRUE;

    }

 

    LRESULT OnTooltipGetDispInfo(LPNMHDR pnmh){

        LPNMTTDISPINFO pntdi = (LPNMTTDISPINFO)pnmh;

 

        if(pntdi->uFlags & TTF_IDISHWND){

            int ID = ::GetDlgCtrlID((HWND)pntdi->hdr.idFrom);

            if(ID == IDC_EDIT_TOOLTIP){

                CString strText;

                strText.Format(_T("%dÇà"), m_edit_tooltip.GetLineCount());

                lstrcpy(pntdi->szText, strText);

            }

        }

 

        return 0;

    }

 

    void OnOK(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

 

    void OnCancel(UINT uNotifyCode, int nID, HWND hWndCtl){

        EndDialog(nID);

    }

};

                      


¡¡
¿ì¼± WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î Åø ÆÁ Á¤º¸¸¦ ÀÛ¼ºÇÒ ¶§  Á¦3Àμö ÀÌÈĸ¦ »ý·« ÇÕ´Ï´Ù. ÀÌ·¸°Ô Çϸé Á¦5Àμö¿¡´Â µðÆúÆ®·ÎLPSTR_TEXTCALLBACK°¡ ÁöÁ¤µÇ¾î Åø ÆÁÀ» Ç¥½ÃÇϴ ŸÀֿ̹¡ ÅëÁö Äڵ尡TTN_GETDISPINFOÀÇ  WM_NOTIFY¸Þ¼¼Áö°¡ ¹ß»ýÇÏ°Ô µË´Ï´Ù.

¡¡
´ÙÀ½¿¡  ÅëÁö Äڵ尡TTN_GETDISPINFOÀÇ Åø ÆÁ ÄÁÆ®·Ñ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ±× Çڵ鷯¿¡¼­´Â ¿¡µðÆ® ÄÁÆ®·ÑÀÇ ÇöÀçÀÇ Çà¼ö¸¦ ÃëµæÇØ Åø ÆÁÀ¸·Î ÇØ¼­ Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù.