⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_27608.htm

📁 vc
💻 HTM
字号:
<p>
序号:27608 发表者:小肚鸡肠 发表日期:2003-01-13 22:22:05
<br>主题:请问,如何嵌套折分窗口?
<br>内容:我把主框架窗口折分为一左一右(一行两列)的两个窗格。现在,我还想把右边的那个折分窗格再次折分为一上一下(两行一列)的两个窗格。即折分窗口的嵌套。<BR><BR>但我发现,CSplitterWnd类的CreateView()方法不能接受一个CSplitterWnd的派生类,也就是说不能这样做:<BR><BR>m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMySplitter) ;<BR>&nbsp;&nbsp;// 让右边的那个折分窗格成为第二个折分窗口<BR><BR>请问,怎样做才能实现折分窗口的嵌套呢?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-13 22:33:13
<br>内容:BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,<BR>&nbsp;&nbsp;&nbsp;&nbsp;CCreateContext* pContext)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// create splitter window<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_wndSplitter.CreateStatic(this, 1, 2))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_wndSplitter1.CreateStatic(&amp;m_wndSplitter, 2, 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_wndSplitter1.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext) ||<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!m_wndSplitter1.CreateView(1, 0, RUNTIME_CLASS(CSpView), CSize(100, 100), pContext))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter1.DestroyWindow();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CSpView), CSize(100, 100), pContext))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.DestroyWindow();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2003-01-14 12:37:37
<br>内容:我试试……
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2003-01-14 13:15:09
<br>内容:songxinye,你好。我照着你说的去做了,可是遇到了一点问题。编译链接时无错误或警告,但运行时提示“建立空文档失败”。我不知道我的代码在那时建立了文档,只好把代码给贴出来,请帮我看看,有什么不正确的地方。谢谢。<BR><BR>BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_wndSplitter.CreateStatic(this, 1, 2))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_wndSplitterRight.CreateStatic(&amp;m_wndSplitter, 2, 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if (!m_wndSplitterRight.CreateView(0, 0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CMyView), CSize(100, 100), pContext) ||<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;!m_wndSplitterRight.CreateView(1, 0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CMyListView), CSize(100, 100), pContext))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitterRight.DestroyWindow();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_wndSplitter.CreateView(0, 1,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CSplitterWnd), CSize(100, 100), pContext) ||<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !m_wndSplitter.CreateView(0, 0,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RUNTIME_CLASS(CMyListView), CSize(100, 100), pContext))<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wndSplitter.DestroyWindow();<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<BR>}<BR><BR>我不添加这些代码,运行时就不会提示我建立空文档失败。但这些代码里没有建立空文档的语句啊?怎么会这样呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2003-01-14 13:29:16
<br>内容:我不会跟踪调试,所以只好用MessageBox()函数来执行一些简单的跟踪。你看:<BR><BR>BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T("进入CMainFrame::OnCreateClient()")) ;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 这个对话框弹出了<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_wndSplitter.CreateStatic(this, 1, 2)) // 错误出在这里<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T("创建父折分窗口成功")) ; // 这个对话框没弹出<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;if(!m_wndSplitterRight.CreateStatic(&amp;m_wndSplitter, 2, 1))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;else<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(_T("创建子折分窗口成功")) ;<BR><BR>...<BR>......<BR><BR>m_wndSplitter是CSplitterWnd类的对象,怎么在创建静态折分窗口时就会出问题呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-14 15:16:46
<br>内容:给你个例子
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:songxinye 回复日期:2003-01-14 15:36:03
<br>内容:CreatView的次数必须与拆分后的窗口数一样多,多一个少一个,都是失败<BR>你多一个
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2003-01-14 17:33:39
<br>内容:谢谢你的例子。但是我的子折分窗口在右边,你的例子中却在左边,我试着修改源代码:<BR><BR>!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CSpView),<BR>CSize(100, 100), pContext))<BR>{<BR>    m_wndSplitter.DestroyWindow();<BR>    return FALSE;<BR>}<BR><BR>改成了:<BR>!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CSpView),<BR>CSize(100, 100), pContext))<BR>{<BR>    m_wndSplitter.DestroyWindow();<BR>    return FALSE;<BR>}<BR><BR>我想让左边是一个显通的视图,而右边才是子折分窗口。但我把m_wndSplitter.CreateView()改成了[0, 0]后,运行时又提示我WINSPLIT.CPP第255行错误。我看了一下,是这样的:<BR>// in winsplit.cpp<BR>if (GetDlgItem(IdFromRowCol(row, col)) != NULL)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;TRACE2("Error: CreateView - pane already exists for row %d, col %d.\n", row, col);<BR>&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(FALSE);<BR>&nbsp;&nbsp;&nbsp;&nbsp;return FALSE;<BR>}<BR><BR>好像是第0行0列的视已经创建了,我该怎么做才能让子折分窗口移到右边?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:小肚鸡肠 回复日期:2003-01-15 08:22:13
<br>内容:songxinye,昨天没上网吗?我今天一上班就来看帖子了。麻烦你再帮我看一下。<BR><BR>谢谢……
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:songxinye 回复日期:2003-01-15 10:36:37
<br>内容:这样就可以了,你可以随意划分
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:chenmb 回复日期:2003-01-15 21:23:34
<br>内容:可以照着我预想的那样运行了。但我还是不太明白。<BR><BR>感谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -