小弟初学vc,遇到麻烦请教各位大侠,谢谢帮忙。
我在单文档中建立了两个视图view1和view2。然后在CMainFrame的OnCreateClient中对View1进行了分割。然后想对View2再进行和View1不同的分割,该如何进行?请帮帮忙!
我在单文档中建立了两个视图view1和view2。然后在CMainFrame的OnCreateClient中对View1进行了分割。然后想对View2再进行和View1不同的分割,该如何进行?请帮帮忙!
是啊,我用CSplitterWnd对View1进行静态分割了。现在想对View2也进行分割,也在OncreateClient里用CSplitterWnd吗?
两个splitter??程序编写时,我是先对视类进行静态分割,然后又增加了一个视类View2。
如果再用一个splitter,是不是分割的还是原来那个视?我想对另外一个视view2进行分割,可以吗?
程序里指定的View是分割出来的View吧?
您看代码:
... ...
if(m_wndSplitter1.CreateStatic(this,2,1)==NULL) //分割为两行一列
return FALSE;
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CCuteFTPView),CSize(100,100), pContext); //将CCuteFTPView连接到0行0列窗格上
... ...
您说的那个View是上面RUNTIME_CLASS的参数吗?
我用上面的方式把View1分割为2行1列,我想再分割View2为2行2列,该怎么办?
View1和View2是一个文档关联的两个视图。
return FALSE;
这里有三个参数 THIS 代表即将要分割的视类。
2 代表在水平方向分为 2 行
1 代表在垂直方向分为 1 行,也就是不分。
CreateStatic( CWnd* pParentWnd, int nRows, int nCols, DWORD dwStyle = WS_CHILD | WS_VISIBLE, UINT nID = AFX_IDW_PANE_FIRST );
原形,后面有个参数 nID 默认值是 AFX_IDW_PANE_FIRST
如果要建立新的切分的要使用 IDFROMROWCOL(X,Y)指定行列值得,
X= 0 Y =0 切分第一切分视图,X =1 ,Y= 0 切分第二个视图
m_wndSplitter2.create(&m_wndSplitter1,........IdFromRowCol(row,col ))
..............................你测试下,应该没有问题的!
if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
TRACE0("Failed to CreateStaticSplitter\n");
return FALSE;
} // add the first splitter pane - the default view in column 0
if (!m_wndSplitter.CreateView(0, 0,
pContext->m_pNewViewClass, CSize(200, 50), pContext))
{
TRACE0("Failed to create first pane\n");
return FALSE;
} // add the second splitter pane - which is a nested splitter with 2 rows
if (!m_wndSplitter2.CreateStatic(
&m_wndSplitter, // our parent window is the first splitter
2, 1, // the new splitter is 2 rows, 1 column
WS_CHILD | WS_VISIBLE | WS_BORDER, // style, WS_BORDER is needed
m_wndSplitter.IdFromRowCol(0, 1)
// new splitter is in the first row, 2nd column of first splitter
))
{
TRACE0("Failed to create nested splitter\n");
return FALSE;
} // now create the two views inside the nested splitter
int cyText = max(lpcs->cy - 70, 20); // height of text pane if (!m_wndSplitter2.CreateView(0, 0,
RUNTIME_CLASS(CTextView), CSize(0, cyText), pContext))
{
TRACE0("Failed to create second pane\n");
return FALSE;
}
if (!m_wndSplitter2.CreateView(1, 0,
RUNTIME_CLASS(CColorView), CSize(0, 0), pContext))
{
TRACE0("Failed to create third pane\n");
return FALSE;
}
我按照您的做了,作出的效果如下:相当于将当前活动视View先分割为两列一行,再将第二列分割为两行。这是没有问题的。
效果如下所示:
View1 | |
---------| View3|
View2 | |
_________|________|
可是我想要的效果是:不再对View1,View2和View3进行分割了,而是对当前不活动的另外一个视进行分割。我的文档关联了两个视,不知道我说明白没有?
在 CWINAPP 的 InitInstance()
AddDocTemplate(new CMultiDocTemplate(IDR_SPLIT2TYPE,
RUNTIME_CLASS(CMainDoc),
RUNTIME_CLASS(CSplitterFrame),
RUNTIME_CLASS(CTextView)));
AddDocTemplate(new CMultiDocTemplate(IDR_SPLIT2TYPE,
RUNTIME_CLASS(CMainDoc),
RUNTIME_CLASS(CSplitterFrame1),
RUNTIME_CLASS(CTextView1))); 然后 BOOL CSplitterFrame::OnCreateClient(LPCREATESTRUCT,
CCreateContext* pContext)
BOOL CSplitterFrame1::OnCreateClient(LPCREATESTRUCT,
CCreateContext* pContext) 分别加入你切分视类加入你的切分窗口方法。 关键点:
1。加入 CMDIChildWnd 的继承类作为切分的框架
2。绑定框架类与文档的关系
AddDocTemplate(new CMultiDocTemplate(IDR_SPLIT2TYPE,
RUNTIME_CLASS(CMainDoc),
RUNTIME_CLASS(CSplitterFrame1),
RUNTIME_CLASS(CTextView1)));
3。在框架类中 OnCreateClient 加入切分代码