< È®Àå ComboBox >


WTL¿¡¼­ °ø¿ë ÄÁÆ®·ÑÀÇ È®Àå combobox ÄÁÆ®·ÑÀ»CComboBoxExT À̶ó°í ÇÏ´Â ÅÛÇø´ Ŭ·¡½º¿¡¼­ ĸ½¶È­Çϰí ÀÖ½À´Ï´Ù. CComboBoxExT Ŭ·¡½º´Â CComboBoxTŬ·¡½ºÀÇ »ó¼Ó Ŭ·¡½ºÀÔ´Ï´Ù.  atlctrls.h Çì´õ¿¡¼­´Â ´ÙÀ½°ú °°ÀÌ Á¤Àǵǰí ÀÖ½À´Ï´Ù.

// atlctrls.h

template <class TBase>

class CComboBoxExT : public CComboBoxT< TBase >

{

   ...

   ...

};

 

typedef CComboBoxExT<ATL::CWindow>   CComboBoxEx;

                      


¡¡WTL
ÀÇ CComboBoxExŬ·¡½º´Â MFCÀÇ µ¿¸íÀÇ Å¬·¡½º¿Í °ÅÀÇ °°Àº ¸â¹ö ÇÔ¼ö¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CComboBoxExŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù. Ä¿·±Æ® µð·ºÅ丮ÀÇ ÆÄÀϸí°ú Æú´õ ¸íÀ» À϶÷Ç¥¿¡ Ç¥½ÃÇÏ¿©  ÆÄÀϸíÀ» ¼±ÅÃÇÏ¸é ÆÄÀÏ »çÀÌÁ ½ºÅÂÆ½ ÄÁÆ®·Ñ¿¡ Ç¥½ÃÇÕ´Ï´Ù.

 

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

 

    CComboBoxEx m_combo_mode;  // Ä¿·±Æ® µð·ºÅ丮 À϶÷Ç¥½Ã¿ë

    CStatic m_static_size;     // ÆÄÀÏ »çÀÌÁî Ç¥½Ã¿ë

 

    // ¸Þ½ÃÁö ¸Ê

    BEGIN_MSG_MAP_EX(CMainDlg)

        MSG_WM_INITDIALOG(OnInitDialog)

        COMMAND_HANDLER_EX(IDC_COMBOBOXEX_DIR, CBN_SELCHANGE, OnComboSelChange)

        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_combo_mode = GetDlgItem(IDC_COMBOBOXEX_DIR);

        m_static_size = GetDlgItem(IDC_STATIC_SIZE);

 

        // À̹ÌÁö ¸®½ºÆ®¸¦ ÀÛ¼º

        CImageList il;

        il.Create(16, 16, ILC_COLOR8 | ILC_MASK, 2, 1);

        CBitmap bmp;

        bmp.LoadBitmap(IDB_BITMAP_ICON);

        il.Add(bmp, RGB(255, 0, 255));

 

        // È®Àå combobox¿¡ À̹ÌÁö ¸®½ºÆ®¸¦ ¼³Á¤

        m_combo_mode.SetImageList(il);

 

        // È®Àå combobox¿¡ ¾ÆÀÌÅÛ Ãß°¡

        CFindFile find;

        if(find.FindFile()){

            do{

                if(!find.IsDots())

                    InsertComboItem(find.GetFileName(), find.IsDirectory() ? 0 : 1);

            }while(find.FindNextFile());

        }

 

        return TRUE;

    }

 

    void InsertComboItem(LPCTSTR lpszName, int nIcon){

        COMBOBOXEXITEM cbei;

        cbei.mask = CBEIF_TEXT | CBEIF_IMAGE | CBEIF_SELECTEDIMAGE;

        cbei.pszText = const_cast<LPTSTR>(lpszName);

        cbei.cchTextMax = lstrlen(lpszName);

        cbei.iItem = m_combo_mode.GetCount();

        cbei.iImage = nIcon;

        cbei.iSelectedImage = nIcon;

        m_combo_mode.InsertItem(&cbei);

    }

 

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

        int nIndex = m_combo_mode.GetCurSel();

        if(nIndex != CB_ERR){

            // ¼±ÅÃµÈ ¾ÆÀÌÅÛ Ä³¸¯ÅÍ ¶óÀÎ Ãëµæ

            CString strText;

            m_combo_mode.GetLBText(nIndex, strText);

 

            // Ç® ÆÐ½º¸¦ ÀÛ¼º

            TCHAR szPath[_MAX_PATH];

            LPTSTR lpFilePart;

            GetFullPathName(strText,

                sizeof(szPath)/sizeof(TCHAR), szPath, &lpFilePart);

 

            // ÆÄÀÏ »çÀÌÁî Ãëµæ

            CString strMsg;

            HANDLE hFile = CreateFile(szPath, 0, 0, NULL,

                OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

            if(hFile != INVALID_HANDLE_VALUE){

                DWORD dwSize = GetFileSize(hFile, NULL);

                CloseHandle(hFile);

 

                strMsg.Format(_T("ÆÄÀÏ »çÀÌÁî: %ld¾Æ¸£¹ÙÀÌÆ®"), dwSize);

            }

            m_static_size.SetWindowText(strMsg);

        }

    }

 

    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 | ICC_USEREX_CLASSES);

 

    hRes = _Module.Init(NULL, hInstance);

    ATLASSERT(SUCCEEDED(hRes));

 

    int nRet = 0;

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

    {

        CMainDlg dlgMain;

        nRet = dlgMain.DoModal();

    }

 

    _Module.Term();

    ::CoUninitialize();

 

    return nRet;

}

                      


¡¡
¿ì¼±  ¸®¼Ò½º¸¦ ÀÛ¼ºÇÕ´Ï´Ù.  ´ÙÀ̾ó·Î±×¿¡ È®Àå combobox ÄÁÆ®·Ñ°ú ½ºÅÂÆ½ ÄÁÆ®·ÑÀ» ¹èÄ¡ÇØ  ¸®¼Ò½º ID¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÕ´Ï´Ù. µ¡ºÙ¿© È®Àå combobox ÄÁÆ®·ÑÀÇ [½ºÅ¸ÀÏ]¿¡¼­´Â [ŸÀÔ]À¸·Î [µå·Ó ´Ù¿î ¸®½ºÆ®]¸¦ ¼±ÅÃÇÕ´Ï´Ù.

ÄÁÆ®·Ñ¸í

¸®¼Ò½ºID

È®Àå combobox

IDC_COMBOBOXEX_DIR

½ºÅÂÆ½(»çÀÌÁî Ç¥½Ã¿ë)

IDC_STATIC_SIZE


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

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

¡¡
´ÙÀ½¿¡ WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î À̹ÌÁö ¸®½ºÆ®¸¦ ÀÛ¼ºÇØ È®Àå combobox ÄÁÆ®·Ñ·Î ¼³Á¤ÇÕ´Ï´Ù. ±× ÈÄ È®Àå combobox ÄÁÆ®·Ñ¿¡ ÇöÀç µð·ºÅ丮ÀÇ ÆÄÀϸí°ú Æú´õ¸íÀ» »ðÀÔÇÕ´Ï´Ù.

¡¡
´ÙÀ½¿¡ ÅëÁö Äڵ尡 CBN_SELCHANGEÀÇ È®Àå combobox ÄÁÆ®·Ñ¿ë Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯¸¦ Ãß°¡ÇÕ´Ï´Ù. ±× Çڵ鷯 ¿¡¼­´Â ÇöÀç ¼±Åõǰí ÀÖ´Â ¾ÆÀÌÅÛÀ» ÃëµæÇØ ±× ÆÄÀÏ »çÀÌÁ ½ºÅÂÆ½ ÄÁÆ®·Ñ¿¡ Ç¥½ÃÇÕ´Ï´Ù.

¡¡
¸¶Áö¸·À¸·Î _tWinMain() ¾È¿¡¼­ICC_USEREX_CLASSESÇ÷¡±×¸¦ ÁöÁ¤ÇØ AtlInitCommonControls()¸¦ È£ÃâÇÕ´Ï´Ù.  À̰Ϳ¡ ÀÇÇØ È®Àå combobox ÄÁÆ®·ÑÀÌ »ç¿ë °¡´ÉÇÏ°Ô µË´Ï´Ù. µ¡ºÙ¿© ºñ±³Àû »ç¿ë ºóµµ°¡ ³ô´Ù°í »ý°¢µÇ´Â ICC_COOL_CLASSESÇ÷¡±×¿ÍICC_WIN95_CLASSESÇ÷¡±×µµ µ¿½Ã¿¡ ÁöÁ¤ÇØ ÀÖ½À´Ï´Ù¸¸ À̹ø ¿¹¿¡¼­´Â ÀÌ µÎ °³ÀÇ Ç÷¡±×´Â ¾ø¾îµµ ±¦Âú½À´Ï´Ù.