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

  • Featuring Art Schoeller, VP and Principal Analyst, Forrester Research Wednesday, August 31, 2016 10:00 AM PT | 1 PM ET If Agility Is Essential to Your Business Survival--Now's the Time to Start the Move to Cloud! The maturity of cloud platforms has given organizations new confidence in moving mission-critical systems to the cloud, to gain agility, scale and realize cost benefits in the process. How can your company achieve these benefits, and what steps are necessary to begin your contact center's …

  • The future of cloud platforms is at hand. Even if your cloud applications are basic now, your next set of apps will require strong analytics services and tools, as well as features that ease enterprise integration. To fill these needs, consider using not only your current cloud provider but also specialists. Take advantage of not only the big cloud platforms, but also specialized providers in vertical industries; countries and regions; and functional domains including omnichannel, analytics, integration, and …

Most Popular Programming Stories

More for Developers

RSS Feeds

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