< ¸®½ºÆ® ºä >

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

// atlctrls.h¾È

typedef CListViewCtrlT<ATL::CWindow>   CListViewCtrl;

                      


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

¡¡WTL
ÀÇ CListViewCtrlŬ·¡½º´Â MFCÀÇ CListCtrlŬ·¡½º¿Í µ¿µîÀÇ ±â´ÉÀ» °®Ãß°í ÀÖ´Â °Í ¿Ü¿¡ È®Àå ±â´Éµµ °®Ãß°í ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CListViewCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. ÇöÀç µð·ºÅ丮ÀÇ Æú´õ¸í°ú ÆÄÀϸíÀ» ¸®½ºÆ® ºä¿¡ Ãß°¡ÇØ  ¾ÆÀÌÅÛÀ» ´õºí Ŭ¸¯ Çϸé À̸§°ú Á¾·ù¸¦ ¸Þ½ÃÁö ¹Ú½º·Î Ç¥½ÃÇÕ´Ï´Ù.

 

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

 

    CListViewCtrl m_list_file;

 

    // ¸Þ¼¼Áö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        NOTIFY_HANDLER_EX(IDC_LIST_FILE, NM_DBLCLK, OnListDblClick)

        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_list_file = GetDlgItem(IDC_LIST_FILE);

 

        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, 190, -1);

        m_list_file.InsertColumn(1, _T("Á¾·ù"), LVCFMT_LEFT,

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

 

        // ¸®½ºÆ® ºä ÄÁÆ®·Ñ¿¡ ¾ÆÀÌÅÛ Ãß°¡

        CFindFile find;

        if(find.FindFile()){

            do{

                if(!find.IsDots()){

                    int nIndex = m_list_file.GetItemCount();

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

                    m_list_file.AddItem(nIndex, 1,

                        find.IsDirectory() ? _T("Æú´õ") : _T("ÆÄÀÏ"));

                }

            }while(find.FindNextFile());

        }

 

        return TRUE;

    }

 

    LRESULT OnListDblClick(LPNMHDR pnmh){

        LPNMITEMACTIVATE pnmia = (LPNMITEMACTIVATE)pnmh;

 

        CString strItem;

        m_list_file.GetItemText(pnmia->iItem, 0, strItem);

 

        CString strSubItem;

        m_list_file.GetItemText(pnmia->iItem, 1, strSubItem);

 

        MessageBox(strItem + _T("Àº") + strSubItem + _T("ÀÔ´Ï´Ù. "), _T("¾ÆÀÌÅÛ"));

 

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

ÄÁÆ®·Ñ¸í

ÀÚ¿øID

¸®½ºÆ®ºä

IDC_LIST_FILE


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

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

¡¡
´ÙÀ½¿¡ WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ¸®½ºÆ® ºä ÄÁÆ®·ÑÀÇ È®Àå ½ºÅ¸ÀÏÀ» ¼³Á¤Çؼ­ Ä÷³À» »ðÀÔÇϰí CFindFile Ŭ·¡½º¸¦ »ç¿ëÇØ ÇöÀç µð·ºÅ丮ÀÇ Æú´õ¿Í ÆÄÀÏÀ» Á¶»ç ÇÕ´Ï´Ù.

¡¡
CFindFile Ŭ·¡½º´Â atlmisc.h¿¡ Á¤Àǵǰí ÀÖ¾î À̸§ÀÌ ºñ½ÁÇÑ MFCÀÇ CFileFind Ŭ·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù.

¡¡
´ÙÀ½À¸·Î ÅëÁö Äڵ尡 NM_DBLCLKÀÇ ¸®½ºÆ® ºä ÄÁÆ®·Ñ ¿ë ÅëÁö ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù.  ±× Çڵ鷯 ¿¡¼­´Â ´õºí Ŭ¸¯ µÈ ¾ÆÀÌÅÛÀÇ ÅØ½ºÆ®¸¦ ÃëµæÇØ¼­  ¸Þ½ÃÁö ¹Ú½º·Î Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù.