본문 바로가기
프로그래밍/Windows API

리스트뷰에서 WM_LBUTTONUP 이 발생하지 않는다... 해결책은?

by 베리베리 2009. 7. 21.
  1. 리스트뷰에서 WM_LBUTTONUP 발생하는 경우는???

    WM_LBUTTONUP 은 리스트뷰 아이템드래깅이 아니면 발생하지 않고 NM_CLICK 이 발생한다.
    만일 아이템드래깅을했을경우 NM_CLICK 은 발생하지않고 WM_LBUTTONUP 이 발생하게 된다.

    ------------------------

    // CListCtrl m_listCtrl 의 OnClick[NM_CLICK] 이벤트 처리 함수  
  2. void CDialog::OnClickListCtrl(NMHDR *pNMHDR, LRESULT *pResult)  
  3. {  
  4.     NM_LISTVIEW*  pNMListView = (NM_LISTVIEW*)pNMHDR;  
  5.     int  pos  = pNMListView->iItem;  
  6.     BOOL  bCheck  = m_listCtrl.GetCheck(pos);  
  7.  
  8.     if(m_listCtrl.GetCheck(pos))  
  9.     {  
  10.         if(m_listCtrl.GetItemText(pos, 0) != "")  
  11.         {  
  12.             m_listCtrl.SetCheck(pos, false);  
  13.         }  
  14.     }  
  15.     else 
  16.     {  
  17.         m_listCtrl.SetCheck(pos, true);  
  18.     }  
  19.  
  20.     *pResult = true; //*pResult = 0; 을 true로 반환  
  21. }  
  22.  
  23. // 구조체 NMHDR  
  24. typedef struct tagNMHDR  
  25. {  
  26.     HWND  hwndFrom;  
  27.     UINT_PTR  idFrom;  
  28.     UINT  code;  
  29. } NMHDR;  
  30. typedef NMHDR FAR * LPNMHDR;  
  31.  
  32. // 구조체 NM_LISTVIEW  
  33. typedef struct tagNMLISTVIEW {  
  34.     NMHDR  hdr;  
  35.     int  iItem;  
  36.     int  iSubItem;  
  37.     UINT  uNewState;  
  38.     UINT  uOldState;  
  39.     UINT  uChanged;  
  40.     POINT  ptAction;  
  41.     LPARAM  lParam;  
  42. } NMLISTVIEW, FAR* LPNMLISTVIEW;  

댓글