返回首页


简介
本文书面支付使用默认MFC CSplitterWnd的对象的基础。我找了一个长的时间使用对象的基本介绍,但只能找到子类或改编的CSplitterWnd的教程。我希望这篇文章可以帮助那些人,像我一样,只想一个基本的介绍的基本对象。背景
一个CSplitterWnd或拆分窗口是一种分裂成两个或两个以上不同的窗格屏幕(见截图或应用程序如3D编辑)。窗格本身通常是充满了一个CView或CWnd派生的对象提供一个文档的不同意见(或用户界面功能)。
分割窗口有两种形式 - 静态和动态。本教程将只包括静态分离器,因为动态的稍微复杂一点。两者之间的主要区别是一个动态的分隔器可以由用户,而静态分离器不能分裂和崩溃。使用代码步骤1 - 声明数据
使用AppWizard创建一个新的文档/视图支持的单文档应用程序。添加到你的主框架的头文件和一个布尔标志分配器management.CSplitterWnd m_mainSplitter CSplitterWnd对象;BOOL m_bInitSplitter;
m_mainSplitter将分成两个窗格像上面的截图的窗口。布尔标志将被用于检查分离器已经设置管理调整大小之前。确保在你的主框架类的构造函数初始化布尔值FALSE。第2步 - 创建分配器
拆分窗口应建立在主框架窗口的客户区的初始化。在您的主框架类的OnCreateClient消息添加一个函数,插入分离器创建代码如下:/ /计算客户端大小CRECT河;GetClientRect(安培; CR);如果(!m_mainSplitter.CreateStatic(这一点,1,2)){ MESSAGEBOX("错误设置分路帧quot;!  60; "初始化错误quot;,MB_OK | MB_ICONERROR)!; 返回FALSE;}
CreateStatic()的参数是父窗口(本)的数量或行和列。客户端矩形的大小是上浆后获得帮助。步骤3 - 创建的意见
分配器在每个窗格中,除非它嵌套在一个分配器,必须重视它,它可以显示一个视图。 CreateStatic呼叫后,使用下面的代码创建一个默认视图窗格。请注意,在分配器的每一列必须有一个观点,因为它不会有一个嵌套的分离器内创建。这引起了我很多的问题(理解上意见的要求),所以需要花费一些时间,在不同的代码样品,以获得更深入的了解。布尔标志,然后更新为true,表示分割已created.if(!m_mainSplitter.CreateView(0,0, RUNTIME_CLASS(CSplitterWindowTutorialView) CSIZE(cr.Width()/ 2,cr.Height()),pContext)){ MESSAGEBOX("错误设置分路帧quot;!  60; "初始化错误quot;,MB_OK | MB_ICONERROR)!; 返回FALSE;}如果(!m_mainSplitter.CreateView(0,1, RUNTIME_CLASS(CSplitterWindowTutorialView) CSIZE(cr.Width()/ 2,cr.Height()),pContext)) { MESSAGEBOX("错误设置分路帧quot;! &# 160; "初始化错误quot;,MB_OK | MB_ICONERROR)!; 返回FALSE;}m_bInitSplitter = TRUE;
要使用的RUNTIME_CLASS(CSplitterWindowTutorialView),你必须包括在MainFrm.cpp您的视图类的头文件,包括你在你的视图类头文档类之前:#ENDIF / / _MSC_VER GT; 1000。
这将允许您使用您的视图类中的主框架类。会出现很多问题,如果你不包括您虽然在视图类的头文件类 - 另一件事需要注意的!第4步 - 更换返回值
Replacereturn CFrameWnd的:OnCreateClient(lpcs,pContext);
withreturn为TRUE;
从现有代码的默认返回值不会显示我们的工作,因为它返回到框架窗口的默认方法。第5步 - 管理调整大小
SetRowInfo和SetColumnInfo负责管理分割的大小。添加的WM_ONSIZE消息处理程序,并添加下面的代码:无效的CMainFrame::OnSize(UINT nType,INT,INT CX CY){ CFrameWnd的:OnSize(nType,CX,CY); CRECT河; GetWindowRect(安培; CR); (m_bInitSplitter放大器;放大器; nType = SIZE_MINIMIZED) { m_mainSplitter.SetRowInfo(0,CY,0); m_mainSplitter.SetColumnInfo(0,cr.Width()/ 2,50); m_mainSplitter.SetColumnInfo(1,cr.Width()/ 2,50); & #160; m_mainSplitter.RecalcLayout(); }}
在上面的代码,我们首先检查分割已通过检查布尔值初始化。这种检查是必要的,因为我觉得一个WM_SIZE消息是通过帧之前创建的方法是跑 - 因此将不存在的对象第一次运行此代码,就会崩溃,如果你没有检查它的存在。
应用程序现在应该运行,并提供类似的文章开始的截图!我可能会在本系列的第二篇文章添加添加进一步嵌套的分配器和其他表单上的意见!敬请期待...

回答

评论会员:戴严 时间:2011/11/29
。如果你能告诉我们如何显示位图或某事,我想将更多更好的
无论如何,THX
评论会员:cj_aviraj 时间:2011/11/29
您好,

我想创建一个拆分窗口,使用基于对话框的应用程序

请帮我在这方面
评论会员:磷酸氢钙 时间:2011/11/29
从这里同样的要求..........

| zyh23
评论会员:游客 时间:2011/11/29
有许多关于在基于对话框的应用程序csplitter的教程,请在CodeProject上的文章搜索
angel420
评论会员:游客 时间:2011/11/29
相同的要求在这里,我试图取代"CDialog的"在"的CFormView"CFormRight类,但它没有工作
angel420
评论会员:游客 时间:2011/11/29
它崩溃时达到"返回m_pCtrlSite-GT的ShowWindow(nCmdShow);"winocc.cpp"-。BOOL的CWnd::的ShowWindow(nCmdShow){ASSERT(::IsWindow(m_hWnd)||(m_pCtrlSite=NULL))(m_pCtrlSite==NULL)返回:调用ShowWindow(m_hWnd,nCmdShow);ELSEm_pCtrlSite-GT的ShowWindow(nCmdShow)}
saggy2
评论会员:游客 时间:2011/11/29
任何人都可以请你告诉我如何控制在每个窗格中的嵌套分割的情况下调整大小?有任何嵌套分配器教程的链接?
SatheeshCodeMFC
评论会员:游客 时间:2011/11/29
基本上你的代码是好的,但缺少包括资源文件......无
IntelliBot:​​|我觉得这对我来说是首次使用SplitterWnd有用。有些文章太难理解。这是恰到好处!虽然有关目录的一个小问题..干得好!

"问问你应给予,寻求,你会发现,敲,门应打开你们"
马太福音7:7
评论会员:nomind 时间:2011/11/29
您好,

我在我的应用程序嵌套分离器的水平,所以给这个配置:
1
------------{ BR} 3 |
2 -------|
4 |
------------{ BR}
在每个窗格中,我有一个HTML控件,问题是,当我调整的CFrameWnd,一切都闪烁!!我想多重绘消息发送...我怎么可能还是传统呢?

请...
评论会员:汉斯迪特里希 时间:2011/11/29
DSP示例项目文件(与您最喜爱的文本编辑器打开)如果你看,你会看到这几行:
SOURCE=.\res\SplitterWindowTutorial.ico

# End Source File

# Begin Source File

 

SOURCE=.\res\SplitterWindowTutorial.rc2

# End Source File

# Begin Source File

 

SOURCE=.\res\SplitterWindowTutorialDoc.ico

# End Source File

# Begin Source File

 

SOURCE=.\res\Toolbar.bmp

# End Source File

# End Group

# Begin Source File
因此,笔者简单地忽略,包括在zip的res子目录。好消息是,这些文件是通用的 - 您可以生成它们自己通过简单地创建另一个MFC SDI应用,然后复制它的res目录(与相应的文件重新命名,以符合上述文件名)


评论会员:游客 时间:2011/11/29
IntelliBot:​​|大。谢谢!"问问你应给予,寻求,你会发现,敲,门应打开你们"马太福音7:7
ehsan_kh
评论会员:游客 时间:2011/11/29
imgsrc=http://www.orcode.com/upimg/2011_11_29_10_38_16_2.gif我觉得当你把在网络上的东西,让这样的beautifull,你必须先编译它,以确保正常工作,我的朋友!
ruede
评论会员:游客 时间:2011/11/29
在您的示例应用程序的子目录(例如'RES')?
emilie5602
评论会员:游客 时间:2011/11/29
您好,IM保持试图创建CFormView的SDI,但一直aborted.Can谁能帮助我?failed.the执行文件分离器反正到甲肝病毒样本,引导我创建分配器?
kencocomputers
评论会员:游客 时间:2011/11/29
http://www.thecodeproject.com/useritems/SplitWindow.asp我用在这篇文章中的CFormView的SDI拆分窗口。如果有一个更难的方式做一些事情,我一定要找到它
。vikas41179
评论会员:游客 时间:2011/11/29
如何implent在主窗口的MDI分配器,共创我们的IDEVC.6类似的外观PLS给我发电子邮件维卡斯阿明Embin技术孟买vikas.amin@embin.com
鲍勃Meglio
评论会员:游客 时间:2011/11/29
张贴感谢,我发现它作为一个快速和容易解决,我的工作要求PS。如果你只使用一个视图类型的面板,而不是只使用pContext-m_pNewViewClass,整体的RUNTIME_CLASS业务使生活变得更加简单
xytras
评论会员:游客 时间:2011/11/29
imgsrc=http://www.orcode.com/upimg/2011_11_29_10_38_16_3.gif
迈克尔亨德里克斯
评论会员:游客 时间:2011/11/29
嗨,我有一个类似你的程序,和我的"文件"获取实时更新..现在,在右窗格中does't更新,但leftpane不。(更新代码是从左侧窗格中运行)谢谢你,迈克尔
joli7469
评论会员:游客 时间:2011/11/29
我失踪"RES/"库中的源文件包。是别人用同样的问题?
jeykumars
评论会员:游客 时间:2011/11/29
IM也面临着同样的问题....有人可以帮助我们imgsrc=http://www.orcode.com/upimg/2011_11_29_10_38_16_4.gif
何?塞弗
评论会员:游客 时间:2011/11/29
我写我的程序,根据您的教程。这是在调试模式下工作的罚款。然而,当我部署的计划和执行的。exe文件。该计划中止在启动。2MessageBox中显示:"设立左视图的错误","创建空文档失败"。任何人都可以给我关于这个原因吗?任何解决方案?下面是我写的OnCreateClient函数如何:BOOL的CMainFrame::OnCreateClient(LPCREATESTRUCTlpcs,CCreateContext*pContext){//计算客户端大小CRECT河;GetWindowRect(CR);//创建1行2列主要分配器如果(!m_mainSplitter.CreateStatic(这一点,1,2)){MESSAGEBOX("错误成立m_mainSplitter","错误",MB_OK|MB_ICONERROR)返回FALSE;}//为每个窗格的意见,必须建立如果(!m_mainSplitter.CreateView(0,0,RUNTIME_CLASS(CMPVIEWERView)CSIZE(cr.Width()/2,cr.Height()),pContext)){MESSAGEBOX("左视图错误","错误",MB_OK|MB_ICONERROR);返回FALSE;}如果(!m_mainSplitter.CreateView(0,1,RUNTIME_CLASS(CSTATVIEW),CSIZE(cr.Width()/2,cr.Height()),pContext)){MESSAGEBOX("正确的错误观点","错误",MB_OK|MB_ICONERROR);返回FALSE;}//改变标志显示分配器创建m_bInitSplitter=TRUE;CMPVIEWERView*MPV;//设置2查看指针MPV=(CMPVIEWERView*)m_mainSplitter.GetPane(0,0);MPV-m_pStatView=(CSTATVIEW*)m_mainSplitter.GetPane(0,1);m_pMPVIEWERView=MPV;的ShowWindow(SW_SHOWMAXIMIZED);//最大的Windows//MPVdumpcall()//返回TRUE,而不是父类的方法,因为这将//不显示我们的窗口返回TRUE;}我仅1步之遥,从部署计划。任何帮助表示高度赞赏。
何塞弗
评论会员:游客 时间:2011/11/29
我发现,发生错误,当我打开的release文件夹中的项目启动的EXE文件。有谁知道为什么上面的代码在运行的exe文件,但确定在短短的调试会话失败{五}
。老总晶体管
评论会员:游客 时间:2011/11/29
没有人是如何得到这个工作?下载的"项目"是一个压缩的可执行文件,'源'是缺少大部分的资源(。RC2。ICO等)。安德鲁