Click here to Skip to main content
15,867,453 members
Articles / Desktop Programming / MFC
Article

EZOptionsDlg - Netscape Preferences like dialog

Rate me:
Please Sign up or sign in to vote.
4.38/5 (4 votes)
16 Apr 2001 120.7K   3.1K   45   11
A modified property sheet with the tree control replacing the tabs.

[Sample page 1 - 30K]

[Sample page 2 - 30K]

Introduction

The point behind this article is to build a base for building a Netscape Prefs like dialog without compromising on the benefits provided by CPropertySheet and CPropertyPage.

To implement this dialog:

Step 1

Add the files present in the source zip file above, to your project.

Add the following lines in some globally available file like stdafx.h:

#include "EZPropertyPage.h"
#include "EZOptionsDlg.h"

Step 2

Add a dialog to your application and add a class for it, say CPrefDlg. Replace every occurrence of CDialog with CEZOptionsDlg in the header file and the source file of the dialog. This dialog takes the place of a property sheet.

Step 3

Edit the dialog template and add a tree control somewhere on the dialog.

Add the following lines to the OnInitDialog handler to introduce your tree control to the parent class CEZOptionsDlg:

// Assuming IDC_OPT_TREE and IDC_LABEL are the ID's
// of the tree control and the static control respectively
SetTreeCtrl(IDC_OPT_TREE);

Step 4

Add a property page, CPage1 say, to your application and replace every instance of CPropertyPage with CEZPropertyPage in the header and source files.

Now, as you would do in a regular property sheet, declare a member variable for CPage1 in the dialog class (CPrefDlg) created in step 2. Add the following code similar to that of the normal CPropertySheet::AddPage. But CPage1::Create should be called before calling AddPage.

// If IDD_PROPPAGE_PAGE1 id the dialog resource ID
m_page1.Create(IDD_PROPPAGE_PAGE1);
AddPage(&m_page1,_T("Page1"));

If you want to add a page as a child item, add the title of the parent item as the third parameter. To avoid unexpected behavior, the titles should be unique.

Here is the OnInitDialog function:

// in PrefDlg.h
#include "EZOptionsDlg.h"

class CPage1;

class CPrefDlg:public CEZOptionsDlg
{
...
private:
    CPage1 m_page1;
};

// in PrefDlg.cpp
BOOL CPrefDlg::OnInitDialog()
{
...
// Assuming IDC_OPT_TREE is the ID's of the Tree control
// and the static control respectively
    SetTreeCtrl(IDC_OPT_TREE);
...
    m_page1.Create(IDD_PROPPAGE_PAGE1);
    AddPage(&m_page1,_T("Page1"));

    SelectPage(_T("Page1"));
    m_wndTree.ExpandAll();
}

Again, to remove a page, the title is to be used. This is the reason why I say the titles should be unique.

RemovePage(_T("Page1"));

Repeat the above step to add more pages.

The demo project should do the rest of the explanation.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
Web Developer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionHow to ad minimize icon on dialog style?? Pin
Evan Lin1-Jun-05 8:12
Evan Lin1-Jun-05 8:12 
GeneralGood stuff Pin
antred1123-Mar-05 1:33
antred1123-Mar-05 1:33 
GeneralTabbing Pin
Dan Poch11-Jan-05 7:34
Dan Poch11-Jan-05 7:34 
GeneralDir List Box Pin
14-Feb-02 23:42
suss14-Feb-02 23:42 
GeneralTab order is not working. Pin
6-Feb-02 22:15
suss6-Feb-02 22:15 
GeneralGreat job. (Some modifications for dialog based app.) Pin
27-Feb-01 23:41
suss27-Feb-01 23:41 
GeneralBetter one exists... Pin
16-Jan-01 11:55
suss16-Jan-01 11:55 
GeneralBetter one exists... where exactly ? Pin
Guy Lecomte17-Apr-01 22:19
Guy Lecomte17-Apr-01 22:19 
GeneralRe: Better one exists... where exactly ? Pin
Henk Devos21-May-01 2:29
Henk Devos21-May-01 2:29 
GeneralRe: Better one exists... Pin
12-Apr-02 5:44
suss12-Apr-02 5:44 
GeneralEdit controls, tab order and more Pin
10-Nov-00 1:27
suss10-Nov-00 1:27 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.