您的位置:首页 > 其它

vc 对话框分割窗口

2016-04-01 00:00 302 查看
摘要: 对话框分割窗口

对话框的分割可以进行自绘实现,不过太复杂麻烦。
mfc中CSplitterWnd类只能在框架窗口中使用,为了分割对话框,可以把框架窗口作为对话框的子窗口,具体可以这样做,

//声明为对话框成员变量
CFrameWnd *m_pFrameWnd;
CSplitterWnd *m_pSplitWnd;

继承view,作为分割后的视图

//继承CFormView 或者其他view
class CLeftView:public CFormView
{
......
};

class CRightView:public CFormView
{
......
};

在对话框OnCreate函数中添加:

CString strMyClass = AfxRegisterWndClass(CS_VREDRAW|CS_HREDRAW,
::LoadCursor(NULL, IDC_ARROW), (HBRUSH)::GetStockObject(WHITE_BRUSH),
::LoadIcon(NULL, IDI_APPLICATION));
CRect rect;
GetClientRect(&rect);
m_pFrameWnd=new CFrameWnd;
m_pFrameWnd->Create(strMyClass,_T(""), WS_CHILD, rect, this);
m_pFrameWnd->ShowWindow(SW_SHOW);
m_pSplitWnd=new CSplitterWnd;
m_pSplitWnd->CreateStatic(m_pFrameWnd, 1, 2);
m_pSplitWnd->CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(200, 200), NULL);
m_pSplitWnd->CreateView(0, 1, RUNTIME_CLASS(CRightView), CSize(200, 200), NULL);

在对话框OnInitDialog函数中添加:

CRect rect;
GetWindowRect(&rect);
ScreenToClient(&rect);
m_pFrameWnd->MoveWindow(&rect);
m_pFrameWnd->ShowWindow(SW_SHOW);

最后在OnDestroy中释放

if(m_pSplitWnd)
{
m_pSplitWnd->DestroyWindow();
delete m_pSplitWnd;
m_pSplitWnd=NULL;
}
//if(m_pFrameWnd)
//{
//    m_pFrameWnd->DestroyWindow();
//    delete m_pFrameWnd;
//    m_pFrameWnd=NULL;
//}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mfc对话框分割