Select an item even if click is not on left most column


  1. Add a WM_LBUTTONDOWN handler in the CListCtrl derived class.
  2. Code for OnLButtonDown() is given below.
  3. Before calling HitTest(), the x coordinate is changed to 2. This forces the point being tested to fall on the first column. A value of x below 2 fails (it is presumably occupied by the border ).
  4. Note that the call to the base class OnLButtonDown() precedes the call to SetItemState.
  5. This method fails if the first column is not visible. We can use the function HitTestEx() described in an earlier section to cover for the situation when the first column is not visible.
    void CMyListCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
    {
            CListCtrl::OnLButtonDown(nFlags, point);
    
            int index;
            point.x = 2;
    
            if( ( index = HitTest( point, NULL )) != -1 )
            {
                    SetItemState( index, LVIS_SELECTED | LVIS_FOCUSED , 
                                    LVIS_SELECTED | LVIS_FOCUSED);
            }
    }



Comments

  • Other way to do

    Posted by Legacy on 09/19/2002 12:00am

    Originally posted by: Cristian Georgescu

    You don,t have to derived a new class from CListCtrl. Let's suppose that we have dialog window CMyDlg with a listview control m_list. You can handle the NM_CLICK message.

    BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
    //{{AFX_MSG_MAP
    ON_NOTIFY(NM_CLICK, IDC_LIST2, OnClickList)
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()

    void CMyDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult)
    {
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    CPoint pt(pNMListView->ptAction);
    pt.x = 2;
    int index = m_list.HitTest(pt,NULL);
    if (index != -1) m_list.SetItemState(index,LVIS_SELECTED|LVIS_FOCUSED,LVIS_SELECTED|LVIS_FOCUSED);
    *pResult = 0;
    }

    Reply
  • Highlighting even with click to right

    Posted by Legacy on 05/28/2000 12:00am

    Originally posted by: Don Stauffer

    It seems to me (at least according to the testing I've done, which is on a multiselect ListView), you have to hook the LVM_HITTEST message also and change the X coordinate on it. Otherwise it doesn't work, for instance, if you have a group of items selected and you try to click on one of them but at the far right.

    I also feel more comfortable using LVM_GETITEMRECT and averaging the Right and Left members, rather than assuming 2 will alway be a good choice for a replacement X value.

    Reply
  • New for Version 4.71 of the control

    Posted by Legacy on 12/08/1999 12:00am

    Originally posted by: Daniel BERMAN


    Now from version 4.71 and up you can use the NM_CLICK notification.

    From the help file:

    This notification is identical to the standard NM_CLICK notification except that in version 4.71 and later, the list view supplies an NMITEMACTIVATE structure instead of an NMHDR structure for the lParam.

    Version 4.71 recieves the address of an NMITEMACTIVATE structure that contains additional information about this notification message. The iItem, iSubItem, and ptAction members of this structure contain information about the item.

    Best Regards,
    Daniel BERMAN

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Are you truly leading your team or simply managing them? Organizations need leaders and your team needs someone to follow. With some ongoing development, you could become that leader. Learn the top leadership qualities that inspire others to want to follow you and the direction of your company.

  • This white paper focuses on how to protect and restore Microsoft Exchange data with Veeam. It briefly covers Microsoft Exchange 2013 and Veeam Backup & Replication v8 architecture, after which it focuses on how to handle proper backup, replication and recovery of Exchange in vSphere and Hyper-V environments.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date