A pair of splitter classes used in dialogbox

 Download Source Code and Sample Project

Many programmers are interesting in splitter that using in dialogbox, so do I.

When I read the article General Purpose
Splitter Class
written by Yurong
Lin
, I got an idea to make my own classes.

Anyway, Lin‘s splitter is very good and easy to use, but it has some
limitation, such as: 1) do not support more than one pane on one side of the splitter; 2)
do not support vertical split; 3) no dragging restriction. Fortunately, it is not very
hard to add these features.

Here is the project I’v made, it was built with VC5.0 & MFC version 4.21.

Two classes are provided: CxSplitterWnd & CySplitterWnd, to use them, follow the
steps below:

1. Add the source files to your own project, they are xySplitterWnd.h &
xySplitterWnd.cpp .

2. Create an picture control in the dialog resource, this control will act as a
splitter afterward.

Set the type as Frame, move it to the appropriate position, then give
it an ID, such as IDC_XBAR1. One picture control for one splitter, you can make any number
of splitters as you like.

3. Declare the objects of CxSplitterWnd/CySplitterWnd in your dialog class.

Of course, you should include xySplitterWnd.h first.

    CxSplitterWnd m_xSplitter1, m_xSplitter2;
    CySplitterWnd m_ySplitter;

4. Initiate the splitter objects in the InitDialog function.

    m_xSplitter1.BindWithControl(this, IDC_XBAR1);  // bind the splitter object to the puppet control
    m_xSplitter1.SetMinWidth(10, 50);  // set the minimum width of the left/right pane 

    m_xSplitter1.AttachAsRightPane(IDC_LEFTPANE1);  // attach a control within the same dialogbox as a pane of the splitter
    m_xSplitter1.AttachAsRightPane(IDC_YBAR);       // you can even attach another splitter as a pane
    m_xSplitter1.AttachAsRightPane(IDC_LEFTPANE2);

    m_xSplitter1.RecalcLayout();

5. Un-bind the splitter object with the puppet control when dialogbox is going to
close.

This step can be omitted when you do not want to re-use the splitter object.

    m_xSplitter1.Unbind();

 

Just as Lin‘s work, there is a message "WM_SPLITTER_MOVED"
that generated by the splitter bar whenever the splitter is dragged then dropped. If you
want to do something special when the splitter is repositioned, then provide a message
handler for this message.

 

Last updated: 13. July 1998

More by Author

Must Read