< üũ ¸®½ºÆ® ºä >
üũ ¸®½ºÆ® ºä´Â üũ ¹Ú½º ÷ºÎÀÇ ¸®½ºÆ® ºä
ÄÁÆ®·ÑÀÔ´Ï´Ù. WTLÀº üũ ¸®½ºÆ® ºä¸¦ ÀÛ¼ºÇϱâ À§Çؼ CCheckListViewCtrl¶ó°í Çϴ Ŭ·¡½º¸¦ ÁغñÇØ ÀÖ½À´Ï´Ù.
CCheckListViewCtrlŬ·¡½º´Â CListViewCtrlŬ·¡½º·ÎºÎÅÍ ÆÄ»ýÇϰí ÀÖ¾î µðÆúÆ®·Î LVS_EX_CHECKBOXES½ºÅ¸ÀÏÀÌ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ³ªÅ¸³»´Â °ÍÀº CCheckListViewCtrlŬ·¡½º¸¦ »ç¿ëÇÏ´Â ¿¹ÀÔ´Ï´Ù.

|
// stdafx.h #include <atlbase.h> #include <atlapp.h> extern CAppModule _Module; #include <atlwin.h> #include <atlcrack.h> #include <atlmisc.h> #include <atlctrls.h> #include <atlctrlx.h> // CCheckListViewCtrlŬ·¡½º¸¦ »ç¿ëÇϱâ
À§ÇØ |
|
// maindlg.h class CMainDlg : public CDialogImpl<CMainDlg> { public: enum { IDD = IDD_MAINDLG }; CCheckListViewCtrl
m_list_dir; // üũ¸®½ºÆ®ºä // ¸Þ¼¼Áö ¸Ê BEGIN_MSG_MAP_EX(CMainDlg)
MSG_WM_INITDIALOG(OnInitDialog)
COMMAND_ID_HANDLER_EX(IDC_BUTTON_COUNT, OnButtonCount)
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_dir.SubclassWindow(GetDlgItem(IDC_LIST_DIR)); // üũ¸®½ºÆ®ºä¿¡ Ä÷³ ¼³Á¤ CRect rcList; m_list_dir.GetWindowRect(rcList); int nScrollWidth = GetSystemMetrics(SM_CXVSCROLL); int n3DEdge = GetSystemMetrics(SM_CXEDGE); m_list_dir.InsertColumn(0,
_T("À̸§"), LVCFMT_LEFT,
rcList.Width() - nScrollWidth
- n3DEdge * 2, -1); // üũ¸®½ºÆ®ºä¿¡ ¾ÆÀÌÅÛ Ãß°¡ CFindFile find; if(find.FindFile()){ do{
if(!find.IsDots()){
int nIndex = m_list_dir.GetItemCount();
m_list_dir.AddItem(nIndex,
0, find.GetFileName());
}
}while(find.FindNextFile()); } return
TRUE; } void OnButtonCount(UINT uNotifyCode,
int nID, HWND hWndCtl){ int nCheckedCount =
0; int nCount = m_list_dir.GetItemCount(); for(int i=0; i<nCount; i++){
if(m_list_dir.GetCheckState(i))
nCheckedCount++; } CString strMsg; strMsg.Format(_T("üũµÈ ¾ÆÀÌÅÛ¼ö£º%d"), nCheckedCount); MessageBox(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); 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_DIR |
|
Ǫ½¬ ¹öư |
IDC_BUTTON_COUNT |
¡¡CMainDlgŬ·¡½º¿¡¼´Â ¿ì¼± CCheckListViewCtrl Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸â¹ö º¯¼ö·Î¼ ¼±¾ðÇÕ´Ï´Ù. À̰ÍÀ» »ç¿ëÇϱâ À§Çؼ´Â WM_INITDIALOG ¸Þ¼¼Áö Çڵ鷯·Î ¼ºê Ŭ·¡½ºÈ ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
¡¡´ÙÀ½¿¡ WM_INITDIALOG
¸Þ¼¼Áö Çڵ鷯¿¡¼´Â üũ ¸®½ºÆ®
ºä¿¡ ÇöÀç µð·ºÅ丮 ³»ÀÇ Æú´õ¿Í ÆÄÀÏÀ» ¾ÆÀÌÅÛÀ¸·Î¼ Ãß°¡ÇÕ´Ï´Ù.
¡¡¸¶Áö¸·À¸·Î ¸®¼Ò½º ID°¡ IDC_BUTTON_COUNTÀÇ Ä¿¸àµå ¸Þ¼¼Áö Çڵ鷯·Î¼ OnButtonCount()¸¦ Ãß°¡ÇÕ´Ï´Ù. ÀÌ Çڵ鷯 ¿¡¼´Â üũ ¸®½ºÆ®
ºä Áß¿¡¼ üũµÇ°í ÀÖ´Â ¾ÆÀÌÅÛÀ» Ä«¿îÆ® ÇØ ±×°ÍÀ» ¸Þ½ÃÁö ¹Ú½º¸¦ Ç¥½ÃÇϰí ÀÖ½À´Ï´Ù.
¡¡±×·±µ¥ À§ÀÇ ¿¹ ¿¡¼´Â üũ ¸®½ºÆ® ºä¸¦ ÀÛ¼ºÇϱâ À§Çؼ ´ÙÀ̾ó·Î±× »ó¿¡ ÄÁÆ®·Ñ ÀÚ¿øÀ» ¹èÄ¡ÇØ ¼ºê Ŭ·¡½ºÈ Çß½À´Ï´Ù¸¸ Create()À» »ç¿ëÇØ ÀÛ¼ºÇÒ ¼öµµ ÀÖ½À´Ï´Ù.
|
m_list_dir.Create(m_hWnd, CRect(0, 0, 200, 100), NULL, 0, 0, IDC_LIST_DIR); |
¼ºê Ŭ·¡½ºÈ¿¡ ÀÇÇØ ÀÛ¼ºÇßÀ» °æ¿ì´Â ÀÚ¿øÀÇ ÇÁ·ÎÆÛƼ¿¡ ÀÇÇØ ½ºÅ¸ÀÏ([¸®Æ÷Æ®]³ª[¼±ÅÃÀ» Ç×»ó Ç¥½Ã]) À» ¼³Á¤Çß½À´Ï´Ù¸¸ Create()À» »ç¿ëÇØ ÀÛ¼ºÇßÀ» °æ¿ì´Â ½ºÅ¸ÀÏÀ» Á¦4Àμö(À©µµ¿ì ½ºÅ¸ÀÏ), Á¦5Àμö(È®Àå À©µµ¿ì ½ºÅ¸ÀÏ)¿¡ ÀÇÇØ ¼³Á¤ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ Àμö¿¡ 0 ¸¦ ÁöÁ¤ÇßÀ» °æ¿ì´Â µðÆúÆ®ÀÇ À©µµ¿ì Ư¼ºÀ¸·Î¼ CCheckListViewCtrlTraits Ŭ·¡½º°¡ »ç¿ëµË´Ï´Ù. CCheckListViewCtrlTraits Ŭ·¡½º´Â atlctrlx.h Çì´õ ³»¿¡¼ ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ°í ÀÖ½À´Ï´Ù.
|
template <DWORD t_dwStyle, DWORD t_dwExStyle, DWORD t_dwExListViewStyle> class CCheckListViewCtrlImplTraits { public: static
DWORD GetWndStyle(DWORD dwStyle) { return (dwStyle == 0) ?
t_dwStyle : dwStyle; } static
DWORD GetWndExStyle(DWORD dwExStyle) { return (dwExStyle == 0)
? t_dwExStyle : dwExStyle; } static
DWORD GetExtendedLVStyle() { return t_dwExListViewStyle; } }; typedef CCheckListViewCtrlImplTraits<WS_CHILD
| WS_VISIBLE | LVS_REPORT |
LVS_SHOWSELALWAYS, WS_EX_CLIENTEDGE, LVS_EX_CHECKBOXES |
LVS_EX_FULLROWSELECT> CCheckListViewCtrlTraits; |
CCheckListViewCtrlImplTraits Ŭ·¡½º´Â ATLÀÇ CWinTraits Ŭ·¡½º¿Í ´Þ¸® À©µµ¿ì ½ºÅ¸ÀÏ, È®Àå À©µµ¿ì ½ºÅ¸ÀÏ¿¡ ´õÇØ È®Àå ¸®½ºÆ® ºä ½ºÅ¸Àϵµ ¼³Á¤ÇÕ´Ï´Ù.
CCheckListViewCtrlŬ·¡½º´Â ´ÙÀ½°ú °°ÀÌ Á¤Àǵǰí ÀÖ½À´Ï´Ù.
|
// atlctrlx.h // CCheckListViewCtrlŬ·¡½ºÀÇ
base class template <class T, class TBase = CListViewCtrl, class TWinTraits = CCheckListViewCtrlTraits> class ATL_NO_VTABLE CCheckListViewCtrlImpl
: public ATL::CWindowImpl<T, TBase, TWinTraits> { ... ... }; class CCheckListViewCtrl : public CCheckListViewCtrlImpl<CCheckListViewCtrl> { public:
DECLARE_WND_SUPERCLASS(_T("WTL_CheckListView"),
GetWndClassName()) }; |
ÀÌ ¶§¹®¿¡ Ä¿½ºÅÒ ¸¶ÀÌÁî ÇÑ CCheckListViewCtrlImplTraits Ŭ·¡½º¸¦ CCheckListViewCtrlImplŬ·¡½ºÀÇ Á¦3ÅÛÇø´ Àμö·Î ÁöÁ¤ÇÏ¸é µ¶ÀÚÀûÀÎ ½ºÅ¸ÀÏÀÇ Ã¼Å© ¸®½ºÆ® ºä ÄÁÆ®·ÑÀ» ÀÛ¼ºÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ´ÙÀ½¿¡ ³ªÅ¸³»´Â °ÍÀº È®Àå ¸®½ºÆ® ºä ½ºÅ¸ÀϷμ LVS_EX_INFOTIP ½ºÅ¸ÀÏÀ» °¡Áø µ¶ÀÚÀûÀΠüũ ¸®½ºÆ® ºä ÄÁÆ®·Ñ Ŭ·¡½º¸¦ Á¤ÀÇÇÏ´Â ¿¹ ÀÔ´Ï´Ù.
|
typedef CCheckListViewCtrlImplTraits<WS_CHILD
| WS_VISIBLE | LVS_REPORT |
LVS_SHOWSELALWAYS, WS_EX_CLIENTEDGE, LVS_EX_CHECKBOXES |
LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP> CMyTraits; class CMyCheckListViewCtrl : public CCheckListViewCtrlImpl<CMyCheckListViewCtrl,
CListViewCtrl, CMyTraits> { public:
DECLARE_WND_SUPERCLASS(_T("MyCheckListView"), GetWndClassName()) }; |
µ¡ºÙ¿© LVS_EX_INFOTIP¿Í °°Àº È®Àå ¸®½ºÆ® ºä ½ºÅ¸ÀÏÀ» º¯°æÇÑ´Ù¸é SetExtendedListViewStyle()À» »ç¿ëÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ÀÌ ¶§ üũ ¸®½ºÆ® ºä ÄÁÆ®·Ñ·Î ÇʼöÀÇ LVS_EX_CHECKBOXES ½ºÅ¸Àϵµ µ¿½Ã¿¡ ÁöÁ¤ÇÕ´Ï´Ù.
|
CCheckListViewCtrl m_list; ... ... m_list.SetExtendedListViewStyle( LVS_EX_CHECKBOXES |
LVS_EX_FULLROWSELECT | LVS_EX_INFOTIP); |