Microsoft Development Environment-Like Options Dialog Class


Figure 1: Visual InterDev 6 Option Dialog

Overview

Many of Microsoft's development products are beginning to go away from the tabbed dialog metaphor and have started using a single dialog with a treeview control that is used to display application options in a hierarchical fashion. Figure 1 (above) shows the Options dialog in Visual InterDev 6, but other development products, such as the new Visual Studio.NET are also following suit.

Therefore, in order to make this new UI a little bit easier, I have created a new class called COptionsTree. Using this class is extremely easy and requires only the following steps:

  1. Place a tree control on the dialog
  2. Place the different controls on the dialog that will constitute your options. Make sure and turn the Visible property off for each of these controls.
  3. Declare a member variable of type COptionsTree in the dialog class
  4. In the dialog's OnInitDialog member function, call SubClasDlgItem with the resource id of the tree control. This will allow my class to subclass the tree control.
  5. Use COptionsTree::AddControl member function to associate each control with a specific tree item. There's an example of how to do this below.

Example Source Code

Included with this article is a demo that when run looks like the following:

 
Figure 2: Demo application - notice how the controls automatically display/hide based on which item in the treeview control is selected.

In this demo, we have a dialog with two options (First and Second). The First option is associated with a static control and a radio button. The Second option is associated with a static control, a check box and a combo box. Below is all the code needed to make this work.
// subclass the treeview with the COptionsTree class
m_Tree.SubclassDlgItem(IDC_TREE,this);

HTREEITEM hItem, hParentItem;

// insert the first item and get it's HTREEITEM
hParentItem = m_Tree.InsertItem("First");

// use the HTREEITEM to associate each control with a given tree item
m_Tree.AddControl(hParentItem, GetDlgItem(IDC_RADIO));
m_Tree.AddControl(hParentItem, GetDlgItem(IDC_FIRST_STATIC));

// insert the second item (in this example, it's a child of the first
hItem = m_Tree.InsertItem("Second",hParentItem);

// use the HTREEITEM to associate each control with a given tree item
m_Tree.AddControl(hItem,GetDlgItem(IDC_COMBO));
m_Tree.AddControl(hItem,GetDlgItem(IDC_CHECK));
m_Tree.AddControl(hItem, GetDlgItem(IDC_SECOND_STATIC));

Downloads

Download demo project 17 Kb
Download source 3 Kb


Comments

  • There are no comments yet. Be the first to comment!

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

Top White Papers and Webcasts

  • Following an IT incident through to resolution is more than just acknowledging an alert and restarting a server. The recent State of On-Call Report found that it takes most companies an average of 10-30 minutes to resolve an incident with an average of 5 people involved. Imagine how much money and time companies are spending to deal with incident resolution. But what if you had a tool that offered solutions baked in? Or a tool that sent alerts to the right person or team every time? These are the kind of …

  • An organization's ability to identify, assess and resolve technical issues is critical to business success. Developer, operations and IT teams must be able to collect and analyze data in real-time if they which to resolve issues quickly without creating additional problems. This article introduces the idea of real-time analytics and demonstrates how log data from different layers of the system and application stack can enable real-time analytics and response.

Most Popular Programming Stories

More for Developers

RSS Feeds

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