将对话框 继承CFormView类 相应border type属性改一下
然后重载OnCreateClient
声明一个CSplitterWnd m_wndSplitter;(类成员变量)
CMyButtons CTopList 为 你要加载的视图类型
if(!m_wndSplitterCreateStatic(this,1,2, WS_CHILD | WS_VISIBLE))//静态分割
{
// AfxMessageBox(_T("2失败"));
return FALSE;
}
//m_wndSplitterCreate(this,1,2,CSize(50,50),pContext);//动态分割
if(!m_wndSplitterCreateView(0,0,RUNTIME_CLASS(CMyButtons),CSize(rectWidth(),rectHeight()),pContext))
{
m_wndSplitterDestroyWindow();
return FALSE;
}
if(!m_wndSplitterCreateView(0,1,RUNTIME_CLASS(CTopList),CSize(rectWidth(),rectHeight()),pContext))
{
m_wndSplitterDestroyWindow();
return FALSE;
}
m_wndSplitterSetColumnInfo(0,140,0);
一、新建一个类CMySplitter,基类为CSplitterWnd。(注:在ClassWizard中你可能找不到基类CSplitteWnd,可以先使其派生至generic Wnd,然后手动将文件中Wnd换成CSplitterWnd)
二,使新建的类CMySplitter的对象成为CMainFrame的成员,在CMainFrame::OnCreateClient中建立分割窗口。
三,锁定切分条
当用户创建好分割窗口后,有时并不希望通过拖动切分条来调节窗口的大小。这时就必须锁定切分条。锁定切分条的最简单的方法莫过于不让CSplitterWnd来处理WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_SETCURSOR消息,而是将这些消息交给CWnd窗口进行处理,从而屏蔽掉这些消息。拿WM_LBUTTONDOWN处理过程来说。修改为如下:
void CMySplitterWnd::OnLButtonDown(UINT nFlags,CPoint point) {
CWnd::OnLButtonDown(nFlags,point);
}
其余的处理方法类似。
第一步,建立两个新类。基类为CFormView类,类名CFormView1,CFormView2,Visual Studio会自动新建两个对话框资源并进行关联,ID号为IDD_FORMVIEW1,IDD_FORMVIEW2第二步,在CMainFrame插入两个成员变量,变量类型为CSplitterWnd,变量名分别为m_splitter1和m_splitter2 这两个变量用来标识分割后的窗口区域。第三步,重载OnCreateClient,添加如下代码。含义见代码注释,具体函数用法参见MSDN,恕不详述。--------------------------------------------------------------------------------BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext pContext){// TODO: 在此添加专用代码和/或调用基类CRect rect;this-GetClientRect(&rect);//将窗口划分为1行2列if( ! m_Splitter1CreateStatic(this , 1 , 2))return FALSE;//将第0列分为2行1列if( ! m_Splitter2CreateStatic( &m_Splitter1 ,2 , 1,WS_CHILD | WS_VISIBLE))return FALSE;//为三块区域关联类m_Splitter1CreateView(0 , 1,RUNTIME_CLASS(CFormView2),CSize(0,0),pContext);m_Splitter2CreateView(0 , 0,RUNTIME_CLASS(CTestView), CSize(0,0),pContext);m_Splitter2CreateView(1 , 0,RUNTIME_CLASS(CFormView1),CSize(0,0),pContext);//设置区域大小 这里的代码不能提前,原因不明- -!m_Splitter1SetColumnInfo(0,rectWidth()/2,0);m_Splitter2SetRowInfo(0,rectHeight()/2,100);return TRUE;//return CFrameWnd::OnCreateClient(lpcs, pContext);}--------------------------------------------------------------------------------第四步,添加头文件,在CMainFrame中添加,建议头文件顺序不变:--------------------------------------------------------------------------------
这是解决代码,直接在WM_MOUSEMOVE及WM_LBUTTONDOWN这连个消息处理就好了。如果是禁止滚动,就重设鼠标光标为箭头。
void CFlatSplitterWnd::OnMouseMove(UINT nFlags, CPoint point)
{
// Enable the dragging
if (m_bEnableDrag)
{
CSplitterWnd::OnMouseMove(nFlags, point);
}
// Disable the dragging
else
{
HCURSOR hc = LoadCursor(NULL, IDC_ARROW);
SetCursor(hc);
}
}
void CFlatSplitterWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
// Enable the dragging
if (m_bEnableDrag)
{
CSplitterWnd::OnLButtonDown(nFlags, point);
}
// Disable the dragging
else
{
HCURSOR hc = LoadCursor(NULL, IDC_ARROW);
SetCursor(hc);
}
}
不好意思,我来拿分了哦~~~
原因很简单,你上面m_Splitter1CreateStatic()代码应该是在
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext pContext)
这个函数里面的吧?
最后return TRUE就OK啦~~~
拿分闪人~~^_^
以上就是关于急急急!!1高分悬赏基于对话框的mfc分割两个窗口左边是对话框(树状功能控件)右边是视图。怎么弄。全部的内容,包括:急急急!!1高分悬赏基于对话框的mfc分割两个窗口左边是对话框(树状功能控件)右边是视图。怎么弄。、MFC切分窗口后固定窗口大小、为什么mfc分割窗口CreateStatic(this , 1 , 2)总出错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)