Selecting and deselecting a range of rows


The list box control class has a selection function SelItemRange(). This function, though missing in the CListCtrl class, is easily implemented.
// SelItemRange - Selects/Deselect a range of items
// Returns              - The number of new items selected
// bSelect              - TRUE to select, FALSE to deselect
// nFirstItem           - index of first item to select
// nLastItem            - index of last item to select
int CMyListCtrl::SelItemRange(BOOL bSelect, int nFirstItem, int nLastItem)
{
        // make sure nFirstItem and nLastItem are valid
        if( nFirstItem >= GetItemCount() || nLastItem >= GetItemCount() )
                return 0;

        int nItemsSelected = 0;
        int nFlags = bSelect ? 0 : LVNI_SELECTED;
        int nItem = nFirstItem - 1;
        while( (nItem = GetNextItem( nItem, nFlags )) >=0
                        && nItem <= nLastItem )
        {
                nItemsSelected++;
                SetItemState(nItem, bSelect ? LVIS_SELECTED : 0, LVIS_SELECTED );
        }
        return nItemsSelected;
}



Comments

  • Selecting all items quickly

    Posted by Legacy on 05/13/1999 12:00am

    Originally posted by: Phil Hall

    This will select all items the quickest way possible:
    
    


    void CMyListCtrl::SelectAllItems()
    {
    LV_ITEM theItem;

    theItem.mask = LVIF_STATE;
    theItem.iItem = -1;
    theItem.iSubItem = 0;
    theItem.state = LVIS_SELECTED;
    theItem.stateMask = 2;

    this->SetItemState(-1, &theItem);

    return;
    }

    Reply
  • Selecting multiple rows in a List control

    Posted by Legacy on 02/05/1999 12:00am

    Originally posted by: Kammie Dill

    I have a list control with over 100,000 items in it. I would like for the user of the app to be able to select all the items at once. I have provided a button on the toolbar for this, but the only way I know how to select all of the items is by looping through all 100,000 and setting the "select" state. This takes a long time and the screen flashes until all are selected. Is there a better way to do this?

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

Top White Papers and Webcasts

  • Microsoft® Office 365 is a top choice for enterprises that want a cloud-based suite of productivity/ collaboration applications. With Office 365, you get access to Microsoft™ Office solutions practically anytime, anywhere, on virtually any device. It's a great option for current Microsoft users who can now build on their experience with Microsoft™ solutions while enjoying the flexibility of a cloud-based delivery. But even organizations with no previous investment in Microsoft will find that …

  • On-demand Event Event Date: July 28, 2016 Jepsen tests are third-party tests for distributed databases that validate vendors' guarantees about how they perform under various failure scenarios, especially network partitions. These have proven their value as tools in any distributed system tester's arsenal. When the creator of Jepsen, Kyle Kingsbury, started his Jepsen-for-Hire business last fall, VoltDB immediately got in line, and over the past two months, our solution was given the most stringent Jepsen …

Most Popular Programming Stories

More for Developers

RSS Feeds

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