I'm a student and very interested in VC++. I often come to this web site to get free source code. I was in need of a splitter in a dialog. I downloaded one but it was very complex and I felt it was difficult to use the control (although it's very powerful) so I made one for myself. Maybe, it's not useful for you, but if there's only one person who thinks it's useful, I will be very happy. Sometimes, you don't need good skill, just a good idea, and in this simple way, a useful piece of code will be produced. My splitter control is one of this kind.
How to Use the CSplitterControl Class
First of all, add two files, SplitterControl.h and SplitterControl.cpp to the project. Remember to add
<tt> #include "splittercontrol.h"</tt> to the header file of the class which uses it.
Add member variable to the dialog class:
Now, we create the control by calling its
create function. This code would appear in the
pWnd = GetDlgItem(IDC_SPLITTER1);
m_wndSplitter1.Create(WS_CHILD | WS_VISIBLE, rc, this, IDC_SPLITTER1);
m_wndSplitter1.SetRange(50, 50, -1);
There is a tip here. Instead of calculating the rect for the splitter, we add a
static control on the dialog (by resource editor), give it an ID (
IDC_SPLITTER1) and make it invisible. Size it and locate in the resource editor, and then call the function
GetWindowRect(rc) to move the
m_wndSplitter1 to the
And here is the code for resizing controls on the dialog when the user moves the splitter control.
if (message == WM_NOTIFY)
if (wParam == IDC_SPLITTER1)
SPC_NMHDR* pHdr = (SPC_NMHDR*) lParam;
return CDialog::DefWindowProc(message, wParam, lParam);
void CSPDemoDlg::DoResize1(int delta)
CSplitterControl::ChangeWidth(&m_lstItem, -delta, CW_RIGHTALIGN);
CSplitterControl::ChangeWidth(&m_txtContent, -delta, CW_RIGHTALIGN);
About the Class CSplitterControl and Its Functions
Here's the interface for the class
class CSplitterControl : public CStatic
int m_nX, m_nY;
int m_nMin, m_nMax;
static void ChangePos(CWnd* pWnd, int dx, int dy);
static void ChangeWidth(CWnd* pWnd, int dx, DWORD dwFlag = CW_LEFTALIGN);
static void ChangeHeight(CWnd* pWnd, int dy, DWORD dwFlag = CW_TOPALIGN);
void SetRange(int nMin, int nMax);
void SetRange(int nSubtraction, int nAddition, int nRoot);
int SetStyle(int nStyle = SPS_VERTICAL);
void Create(DWORD dwStyle, const CRect& rect, CWnd* pParent, UINT nID);
virtual void DrawLine(CDC* pDC, int x, int y);
void MoveWindowTo(CPoint pt);
afx_msg void OnPaint();
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
typedef struct SPC_NMHDR
int delta; } SPC_NMHDR;
Well, that's all about my code. Maybe the explanation is not very clear, but I hope you'll find it easy to use. No special skill, you see. Very simple. Thanks for reading my article. Please give your ideas as to whether you like it or not.
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.