急急急!!1高分悬赏基于对话框的mfc分割两个窗口左边是对话框(树状功能控件)右边是视图。怎么弄。

急急急!!1高分悬赏基于对话框的mfc分割两个窗口左边是对话框(树状功能控件)右边是视图。怎么弄。,第1张

对话框 继承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)总出错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9659278.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存