这是我几年前用的一个越南大学生写的对话框内的分割控件。写的不是很好,我当时把他改成了对FormView的分割控件,和这个不一样,所以没办法给你用。
写的不好的地方首先可能是有一两个window指针没写干净。另外就是封装不好,就是用起来需要的步骤太多。
在你的对话框中定义一个分割器控件:
protected:
CSplitterControl m_wndSplitter1;
在InitDialog中初始化他,同时设定其上下移动的范围,例如-50 ~ 50
BOOL CSPDemoDlg::OnInitDialog()
{
...
pWnd = GetDlgItem(IDC_SPLITTER1);
pWnd->GetWindowRect(rc);
ScreenToClient(rc);
m_wndSplitter1.Create(WS_CHILD | WS_VISIBLE, rc, this, IDC_SPLITTER1);
m_wndSplitter1.SetRange(50, 50, -1);
这里IDC_SPLITTER1你用作splitter的空控件。
然后管理他的移动的信息
LRESULT CSPDemoDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_NOTIFY)
{
if (wParam == IDC_SPLITTER1)
{
SPC_NMHDR* pHdr = (SPC_NMHDR*) lParam;
DoResize1(pHdr->delta);
}
}
return CDialog::DefWindowProc(message, wParam, lParam);
}
//
void CSPDemoDlg::DoResize1(int delta)
{
// Change the width for m_wndType, m_lstItem, m_txtContent
CSplitterControl::ChangeWidth(&m_wndType, delta);
CSplitterControl::ChangeWidth(&m_lstItem, -delta, CW_RIGHTALIGN);
CSplitterControl::ChangeWidth(&m_txtContent, -delta, CW_RIGHTALIGN);
Invalidate();
UpdateWindow();
}
在这个RoResize1()里面把你想移动的控件都列进去。
整体而言这个东西能用,就是太不标准,特别是最后信息管理的部份。我以后有时间可能会重写这个控件,现在是不会了。有什么问题可以题出来。