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

// atlctrls.h

typedef CTabCtrlT<ATL::CWindow>   CTabCtrl;

                      


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

¡¡WTL
ÀÇ CTabCtrlŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CTabCtrl Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. ù°ÀÇ ÅÇ¿¡´Â ÇöÀç µð·ºÅ丮ÀÇ ÆÄÀÏ À϶÷À» Ç¥½ÃÇÏ´Â ¸®½ºÆ® ºä ÄÁÆ®·ÑÀ» ¼³Á¤ÇØ µÑ°ÀÇ ÅÇ¿¡´ÂDLLÀÇ ¹öÁ¯ Á¤º¸¸¦ Ç¥½ÃÇÏ´Â ¸®½ºÆ® ºä ÄÁÆ®·ÑÀ» ¼³Á¤ÇÕ´Ï´Ù.

 

 

// 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 };

 

    CTabCtrl m_tab_display;     // ÅÇ

    CListViewCtrl m_list_file;  // [ÆÄÀÏ]¸®½ºÆ®ºä

    CListViewCtrl m_list_info;  // [DLLÁ¤º¸]¸®½ºÆ®ºä

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        NOTIFY_HANDLER_EX(IDC_TAB_DISPLAY, TCN_SELCHANGING, OnTabSelChanging)

        NOTIFY_HANDLER_EX(IDC_TAB_DISPLAY, TCN_SELCHANGE, OnTabSelChange)

        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_tab_display = GetDlgItem(IDC_TAB_DISPLAY);

        m_list_file = GetDlgItem(IDC_LIST_FILE);

        m_list_info = GetDlgItem(IDC_LIST_INFO);

 

        // ÅÇ ÄÜÆ®·ÑÀÇ ¹èÄ¡

        CRect rcClient;

        GetClientRect(rcClient);

        int nPaddingX = GetSystemMetrics(SM_CXDLGFRAME);

        int nPaddingY = GetSystemMetrics(SM_CYDLGFRAME);

        m_tab_display.SetWindowPos(HWND_BOTTOM,

            rcClient.left + nPaddingX, rcClient.top + nPaddingY,

            rcClient.Width() - nPaddingX * 2, rcClient.Height() - nPaddingY * 2,

            SWP_SHOWWINDOW);

 

        // ÅÇ ¾ÆÀÌÅÛ »ðÀÔ

        TCITEM ti;

        ti.mask = TCIF_TEXT | TCIF_PARAM;

 

        ti.pszText = _T("ÆÄÀÏ");

        ti.lParam = (LPARAM)m_list_file.m_hWnd;

        m_tab_display.InsertItem(0, &ti);

 

        ti.pszText = _T("DLLÁ¤º¸");

        ti.lParam = (LPARAM)m_list_info.m_hWnd;

        m_tab_display.InsertItem(1, &ti);

 

        // ÅÇ ÄÜÆ®·ÑÀÇ Ç¥½Ã ¿µ¿ª Ãëµæ

        CRect rcTabClient;

        m_tab_display.GetClientRect(rcTabClient);

        m_tab_display.AdjustRect(FALSE, rcTabClient);

        rcTabClient.OffsetRect(nPaddingX, nPaddingY);

 

        // [ÆÄÀÏ]¸®½ºÆ®ºäÄÜÆ®·Î¸£ÀÇ ¹èÄ¡

        m_list_file.MoveWindow(rcTabClient);

        m_list_file.SetExtendedListViewStyle(LVS_EX_INFOTIP | LVS_EX_FULLROWSELECT);

 

        CRect rcList;

        m_list_file.GetWindowRect(rcList);

        int nScrollWidth = GetSystemMetrics(SM_CXVSCROLL);

        int n3DEdge = GetSystemMetrics(SM_CXEDGE);

        m_list_file.InsertColumn(0, _T("À̸§"), LVCFMT_LEFT,

            rcList.Width() - nScrollWidth - n3DEdge * 2, -1);

 

        CFindFile find;

        if(find.FindFile()){

            do{

                if(!find.IsDots() && !find.IsDirectory()){

                    int nIndex = m_list_file.GetItemCount();

                    m_list_file.AddItem(nIndex, 0, find.GetFileName());

                }

            }while(find.FindNextFile());

        }

 

        // [DLLÁ¤º¸]¸®½ºÆ®ºäÄÜÆ®·Î¸£ÀÇ ¹èÄ¡

        m_list_info.MoveWindow(rcTabClient);

        m_list_info.SetExtendedListViewStyle(LVS_EX_INFOTIP | LVS_EX_FULLROWSELECT);

 

        m_list_info.InsertColumn(0, _T("DLL¸í"), LVCFMT_LEFT, 220, -1);

        m_list_info.InsertColumn(1, _T("¹öÁ¯"), LVCFMT_LEFT,

            rcList.Width() - 220 - nScrollWidth - n3DEdge * 2, -1);

 

        DWORD dwMajor, dwMinor;

        CString strInfo;

 

        AtlGetShellVersion(&dwMajor, &dwMinor);

        strInfo.Format(_T("%d.%02d"), dwMajor, dwMinor);

        m_list_info.AddItem(0, 0, _T("shell32.dll"));

        m_list_info.AddItem(0, 1, strInfo);

 

        AtlGetCommCtrlVersion(&dwMajor, &dwMinor);

        strInfo.Format(_T("%d.%02d"), dwMajor, dwMinor);

        m_list_info.AddItem(1, 0, _T("comctl32.dll"));

        m_list_info.AddItem(1, 1, strInfo);

 

        return TRUE;

    }

 

    void SwitchWindow(bool bShow){

        int nIndex = m_tab_display.GetCurSel();

        TCITEM ti;

        ti.mask = TCIF_PARAM;

        m_tab_display.GetItem(nIndex, &ti);

        CWindow win = (HWND)ti.lParam;

        win.ShowWindow(bShow ? SW_SHOW : SW_HIDE);

        if(bShow)

            win.SetFocus();

    }

 

    LRESULT OnTabSelChanging(LPNMHDR pnmh){

        SwitchWindow(false);

        return FALSE;

    }

 

    LRESULT OnTabSelChange(LPNMHDR pnmh){

        SwitchWindow(true);

        return 0;

    }

 

    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¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© 2°³ÀÇ ¸®½ºÆ® ºä ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ] ¿¡¼­´Â µðÆúÆ®¿¡ [Ç¥½Ã]·Î [¸®Æ÷Æ®]¸¦ ¼±ÅÃÇÏ°í  [¼±ÅÃÀ» Ç×»ó Ç¥½Ã]¿¡ üũ¸¦ ³Ö½À´Ï´Ù. °Ô´Ù°¡ [DLLÁ¤º¸]¿ë ¸®½ºÆ® ºä ÄÁÆ®·Ñ¸¸ [ÀϹÝ]ÀÇ [°¡½Ã]ÀÇ Ã¼Å©¸¦ ¶Á´Ï´Ù.

ÄÁÆ®·Ñ¸í

ÀÚ¿øID

ÅÇ

IDC_TAB_DISPLAY

¸®½ºÆ®ºä([ÆÄÀÏ]¿ë)

IDC_LIST_FILE

¸®½ºÆ®ºä([DLLÁ¤º¸]¿ë)

IDC_LIST_INFO


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

¡¡
CMainDlgŬ·¡½º¿¡¼­´Â  ÅÇ ÄÁÆ®·Ñ ¿ëÀ¸·Î CTabCtrlŬ·¡½º  ¸®½ºÆ® ºä ÄÁÆ®·Ñ ¿ëÀ¸·Î CListViewCtrl Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼­ ¼±¾ðÇÕ´Ï´Ù. À̰͵éÀ» »ç¿ëÇϱâ À§Çؼ­´Â WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ÄÁÆ®·ÑÀÇ ÇÚµéÀ» ´ëÀÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

¡¡
´ÙÀ½¿¡ WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î °¢ ÄÁÆ®·ÑÀ» ¹èÄ¡ÇÕ´Ï´Ù. ¿ì¼±  ÅÇ ÄÁÆ®·ÑÀ» ´ÙÀ̾ó·Î±×º¸´Ù nPaddingX ¿Í nPaddingYÀÇ ºÐ(margin) ¸¸Å­ ÀÛ°Ô ¹èÄ¡ÇÕ´Ï´Ù.  ±×¸®°í ÅÇ¿¡ 2°³ÀÇ ¾ÆÀÌÅÛ([ÆÄÀÏ]°ú[DLLÁ¤º¸])¸¦ »ðÀÔÇÕ´Ï´Ù. ÀÌ ¶§  2°³ÀÇ ¸®½ºÆ® ºä ÄÁÆ®·ÑÀÇ ÇÚµéÀ» °¢°¢ TCITEM ±¸Á¶Ã¼ÀÇ lParam À¸·Î ¼³Á¤ÇÕ´Ï´Ù.

±× ÈÄ , ÅÇ ÄÜÆ®·ÑÀÇ Ç¥½Ã ¿µ¿ª(ÅÇ ÄÜÆ®·ÑÀÇ ÅÇ ºÎºÐÀ» Á¦¿ÜÇÑ ±¸Çü) À» ÃëµæÇØ , ±× ¿µ¿ª¿¡ ¸Âµµ·Ï(µíÀÌ) 2°³ÀÇ ¸®½ºÆ®ºäÄÜÆ®·Î¸£¸¦ ¹èÄ¡ÇÕ´Ï´Ù.

¡¡
´ÙÀ½¿¡ , ÅëÁö Äڵ尡TCN_SELCHANGINGÀÇ ÅÇ ÄÜÆ®·Ñ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ ¸Þ¼¼Áö Çڵ鷯´Â ÅÇÀÌ ¹Ù²î±â Á÷Àü¿¡ ºÒ·Á °©´Ï´Ù¸¸ , ¿©±â¿¡¼­´ÂGetCurSel()¿¡ ÀÇÇØ ¹Ù²î±â Á÷ÀüÀÇ ÅÇÀÇ À妽º¸¦ ÃëµæÇØ , ±× À妽ºÀÇ ÅÇ ¾ÆÀÌÅÛÀ¸·ÎºÎÅÍ ¸®½ºÆ®ºäÄÜÆ®·Î¸£ÀÇ À©µµ¿ì ÇÚµéÀ» ÃëµæÇØ , ±× ¸®½ºÆ®ºäÄÜÆ®·Î¸£¸¦ ºÒ°¡½Ã·Î Çϰí ÀÖ½À´Ï´Ù.

¡¡
´ÙÀ½¿¡ , ÅëÁö Äڵ尡TCN_SELCHANGEÀÇ ÅÇ ÄÜÆ®·Ñ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ ¸Þ¼¼Áö Çڵ鷯´Â ÅÇÀÌ ¹Ù²ï Á÷ÈÄ¿¡ ºÒ·Á °©´Ï´Ù¸¸ , ¿©±â¿¡¼­´ÂGetCurSel()¿¡ ÀÇÇØ ¹Ù²ï Á÷ÈÄÀÇ ÅÇÀÇ À妽º¸¦ ÃëµæÇØ , ±× À妽ºÀÇ ÅÇ ¾ÆÀÌÅÛÀ¸·ÎºÎÅÍ ¸®½ºÆ®ºäÄÜÆ®·Î¸£ÀÇ À©µµ¿ì ÇÚµéÀ» ÃëµæÇØ , ±× ¸®½ºÆ®ºäÄÜÆ®·Î¸£¸¦ °¡½Ã·Î Çϰí ÀÖ½À´Ï´Ù.