dcsimg

A multi-select tree control class

WEBINAR:
On-Demand

Application Security Testing: An Integral Part of DevOps


Sample Image

Environment: VC6 SP2

There have already been several implementations of a multi-select tree control posted to CodeGuru, but none of them have provided the functionality and/or behaviour I required.

The versions I have seen take the approach of handling the selection around the mouse-down, mouse-move and mouse-up messages, with variables holding state in-between. CMultiTree takes the approach of handling the whole multi-selection within the mouse-down handler. This is a closer approach to the underlying Windows treeview control.

CMultiTree attempts to mirror the selection behaviour of a CListCtrl (listview control) class. In fact the code was developed by putting a CListCtrl next to a CTreeCtrl and trying the combinations of mouse clicks/drags, and key presses. CMultiTree thus has full rubber-band selection support.

The sample application implements the CTreeCtrl in a CTreeView class, using a method described on a CodeGuru site. Unfortunately I can't find the original article to credit the author [hopefully the editor can do this on my behalf].

Usage

Multiple-selection in CMultiTree should be done in more or less the same way as in a CListCtrl, i.e. using SetItemState, GetItemState. I have taken the liberty of defining a TVIS_FOCUSED (the equivalent of LVIS_FOCUSED of the CListCtrl).

SetItemState / GetItemState:

These two methods have been over-scoped in the CMultiTree class to replace the underlying CTreeCtrl versions. Because they are NOT virtual, they must be called in the scope of the CMultiTree class (or derived class), otherwise they will not work, e.g.:


    /* if m_tree is a CMultiTree */
    CTreeCtrl *pTree = &m_tree;
    UINT nState = pTree->GetItemState(hItem, TVIS_FOCUSED|TVIS_SELECTED);

this will NOT call the CMultiTree version because of the non-virtual GetItemState.

Examine the header file for other methods, they are pretty self-explanatory.

Comments: mailto:comments@tinuviel.demon.co.uk
Info: http://www.tinuviel.demon.co.uk/source_code/sc_multitree.htm
Copyright (c) 1999 Richard Hazlewood.

Downloads

Download demo project - 34 Kb



Comments

  • Not working

    Posted by Liviu Dorobantu on 04/10/2014 08:54am

    Hello! I integrated your code for multiple selection on a CTreeCtrl taken from here:http://www.codeguru.com/cpp/controls/treeview/misc-advanced/article.php/c629/A-multiselect-tree-control-class.htm. The problem is that multi selection with Ctrl does not work (the program runs). I'm using Visual Studio 2005. If I run your program as downloaded from the link above, it works, but not if I take MltiTree.h and MltiTree.cpp and put them in my program. Do you have any ideea? Thanks!

    Reply
  • You must have javascript enabled in order to post comments.

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

Top White Papers and Webcasts

  • Discover the best practices from HPE’s IT Advisory Consulting Services for migrating and transforming applications in Hybrid IT by capitalizing on innovative platforms, modern application architectures, agile development tools and proven methodologies. There are a number of challenges our customers face when migrating and transforming applications for a Hybrid IT environment. This guide provide proven strategies and application approaches that can help them understand and reduce risks and complexity.

  • CEOs, CIOs, boards and shareholders are demanding digital transformation. They want their organizations to be more customer-focused, competitive and strategic to increase revenue. Data drives all of those aspects. A great first step in optimizing data use is moving data to the cloud. It can quickly show benefits. Here are six aspects of a cloud data management strategy that will help your organization more fully move, manage and use valuable data to successfully support digital transformation.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date
×
We have made updates to our Privacy Policy to reflect the implementation of the General Data Protection Regulation.