이미 CMFCShellListCtrl 내부에서 더블클릭 이벤트를 처리하고 있기 때문입니다.
CMFCShellListCtrl 에서 상속받은 MyShellListCtrl 클래스 하나 만드시고
NM_DBLCLK Notify Reflect 이벤트 핸들러 등록하신 다음 거기서 처리해보세요.
ON_NOTIFY_REFLECT(NM_DBLCLK, &MyShellListCtrl::OnNMDblclk)
MyShellListCtrl::OnNMDblclk 안에서는 다음 코드를 한번 불러줘야 원래 동작이 실행됩니다.
CMFCShellListCtrl::OnDblClk(pNMHDR, pResult); | |
1. MFC를 사용하시려면 다이얼로그 편집창에서 Ctrl+W 눌러서 클래스위저드를 실행하구요 Member varible 탭에서 IDC_LIST_USER 을 더블클릭하여 멤버이름을 m_ListUser로 카테고리를 Control로 지정하고 확인버튼을 눌러 닫습니다.
----소스코드 수정---- // HWND hWnd1 = ::GetDlgItem (m_hWnd,IDC_LIST_USER); LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE) pNMHDR; RECT rect; //get the row number int nItem = temp->iItem; //get the column number
int nSubItem = temp->iSubItem; if(nSubItem == 0 || nSubItem == -1 || nItem == -1) return ; //Retrieve the text of the selected subItem from the list CString str = m_ListUser->GetItemText(nItem ,nSubItem);
2. API로 코딩하시려면 GetItemText 대신에 ListView_GetItemText 함수를 사용하셔야 합니다.
---- 소스코드 수정---- HWND hWnd1 = ::GetDlgItem (m_hWnd,IDC_LIST_USER); LPNMITEMACTIVATE temp = (LPNMITEMACTIVATE) pNMHDR; RECT rect; //get the row number int nItem = temp->iItem; //get the column number
int nSubItem = temp->iSubItem; if(nSubItem == 0 || nSubItem == -1 || nItem == -1) return ; //Retrieve the text of the selected subItem from the list CString str; ListView_GetItemText(hWnd1,nItem ,nSubItem, str, 255);
둘 중에서 편한방법으로 코딩하세요...^^ | |
'프로그래밍(Programming) > MFC&API' 카테고리의 다른 글
API 깜빡임 문제 & 더블 버퍼링 (0) (0) | 2015.10.18 |
---|---|
Edit(수정) 가능 ListCtrl(ListControl) (0) | 2013.06.01 |
다이얼로그에서 OnIdle() 대신에 OnKickIdle() (0) | 2013.05.30 |
[MFC]Log 남기기... (0) | 2013.05.09 |
커서 아이콘 지정 (0) | 2013.04.30 |