티스토리 뷰

카테고리 없음

CListCtrl 체크박스 이벤트

에어버스 2020. 10. 25. 17:14

CListCtrl 에서 체크박스가 체크표시되어 있는지 이벤트를 받기 위해 LVN_ITEMCHANGED 이벤트를 받으면 리스트컨트롤이 변경될때마다 호출되므로, 체크표시가 변경되어 호출된건지 검사해서 처리한다.

LM_CLICK 이벤트에서 처리해도 되겠지만, 체크박스 위에서 클릭하면 LM_CLICK 이벤트가 발생하지 않는 문제가 있다.

https://m.blog.naver.com/PostView.nhn?blogId=kjhkgs&logNo=50165325155&proxyReferer=https:%2F%2Fwww.google.com%2F

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
CListCtrl m_listBooking; // 멤버변수
 
BEGIN_MESSAGE_MAP(CBookingDlg, CDialogEx)
...
    ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_BOOKINGSTOCK, &CBookingStockDlg::OnItemchangedListBookingstock)
END_MESSAGE_MAP()
 
void CBookingkDlg::OnItemchangedListBooking(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
    // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
 
     // 프로그램내부에서 체크박스의 값을 수정할때는 m_bListCtrlUpdate를 TRUE로 설정한다.
 
 // 사용자가 마우스 클릭이나 스페이스바로 값을 변경할때만 수행하기위해 m_bListCtrlUpdate 값을 검사한다.
 
    if (pNMLV->uChanged == LVIF_STATE)// && !m_bListCtrlUpdate)
    {
 
        // 도움말의 LVS_EX_CHECKBOXES 속성을 보면 아래와 같은 내용이 있다.
        // State image 1 is the unchecked box, and state image 2 is the checked box.
 
        // Setting the state image to zero removes the check box.
        // 체크박스의 값을 변경할때만 이벤트가 발생하는 것이 아니고 항목을 생성할에도 이벤트가 발생한다.
        // 그래서 State 값이 0인지도 검사한다.
        UINT nOldCheck = pNMLV->uOldState & LVIS_STATEIMAGEMASK;
        UINT nNewCheck = pNMLV->uNewState & LVIS_STATEIMAGEMASK;
        if (nOldCheck && nNewCheck && nOldCheck != nNewCheck)
        {
 
            // 체크의 상태를 알아낼때 GetCheck() 함수를 사용하거나 pNMLV->uNewState 값으로 알수있다. 
 
            // CommCtrl.h 에 LVIS_STATEIMAGEMASK 값이 0xF000으로 정의 되어있으므로
 
            // ((pNMLV->uNewState & LVIS_STATEIMAGEMASK) >> 12) 가 1이면 체크가 안된상태이고 2이면 체크인 상태이다.
            BOOL bCheck = m_listBooking.GetCheck(pNMLV->iItem);
        }
    }
 
    *pResult = 0;
}
cs
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30