ListCtrl (리스트 컨트롤) 선택한 아이템 얻기




 너무 어렵게 생각했나...
예전에 책에서 배웠던 방법으로 LVN_ITEMCHANGED 이벤트로 얻으려 했으나
이 이벤트는 다루기가 조금 까다롭다..

LVN_CLICK 메시지를 사용하였다.


1. LVN_CLICK 이용
   : 컨트롤을 마우스 왼쪽 버튼으로 클릭 했을 때 발생

void
 ChRmtEvwrView::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
{
     LPNMITEMACTIVATE pNMItemActivate 
                           = reinterpret_cast<LPNMITEMACTIVATE(pNMHDR);
     /*< 선택한 아이템의 인덱스를 얻는다. */
     nSelectItemIndex = pNMItemActivate->iItem;
     ...     
}

pNMItemActivate 포인터 변수에 마우스로 선택한 아이템에 대한 정보가 들어 있다.



※ 주의

1. 리스트 컨트롤에 정의된 헤더 이외의 영역에 마우스 클릭을 했을 경우
     (아래 사진의 "원본" 오른쪽 공간을 마우스 왼쪽 버튼으로 클릭한 경우)
   - 리스트 컨트롤이 있는 뷰의 크기를 조정할 수 있다면  리스트 컨트롤에서 설정한 헤더 이외의 공간이
    생긴다. 이때 이곳에 마우스 왼쪽 버튼을 클릭 하게 되면 pNMItemActivate->iItem; 값에는
    -1의 값을 갖는다.





※ 참조

NMITEMACTIVATE Structure


Contains information about an LVN_ITEMACTIVATE notification message.

Syntax

typedef struct tagNMITEMACTIVATE {
    NMHDR hdr;
    int iItem;
    int iSubItem;
    UINT uNewState;
    UINT uOldState;
    UINT uChanged;
    POINT ptAction;
    LPARAM lParam;
    UINT uKeyFlags;
} NMITEMACTIVATE, *LPNMITEMACTIVATE;

Members

hdr
NMHDR structure that contains information about this notification message.
iItem
Index of the list-view item. If the item index is not used for the notification, this member will contain -1.
iSubItem
One-based index of the subitem. If the subitem index is not used for the notification or the notification does not apply to a subitem, this member will contain zero.
uNewState
New item state. This member is zero for notification messages that do not use it.
uOldState
Old item state. This member is zero for notification messages that do not use it.
uChanged
Set of flags that indicate the item attributes that have changed. This member is zero for notifications that do not use it. Otherwise, it can have the same values as the mask member of the LVITEM structure.
ptAction
POINT structure that indicates the location at which the event occurred. This member is undefined for notification messages that do not use it.
lParam
Application-defined value of the item. This member is undefined for notification messages that do not use it.
uKeyFlags
Modifier keys that were pressed at the time of the activation. This member contains zero or a combination of the following flags:
LVKF_ALT
The key is pressed.
LVKF_CONTROL
The key is pressed.
LVKF_SHIFT
The key is pressed.

Structure Information

Minimum DLL Version comctl32.dll version 4.71 or later
Header commctrl.h
Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 4.0, Windows 98, Windows 95 with Internet Explorer 4.0





##

Posted by six605
,