p;
CRect rect;
GetClientRect(&rect);
size.cx = rect.right/2 ;
size.cy = rect.bottom/2;
只要把size放在Csize(0,0)所在的位置就可以了,用这个方法我们就可以在
程序中自由地实现视图窗口大小的变化了。
到了这里又有一个问题提出来了,我们不光删去或者隐藏视图,有时只是简单的视图之间的切换,也可以说有的一个框架包含多个视,而在任何时刻只能显示其中的一个视,还是后面再说吧!
三.获得视图指针。
获取视图的指针作为单独的一点来讲,自然有它的重要性,视图与文档,特别在文档与不相干的视图间,视图与视图间的消息传递及互相之间的调用函数或者变量的时候就要获取视图或文档的指针。
a) 获取文档的指针:
与文档相连的视图可以直接获取,这里就不说了,但与文档一点关系都没有的视图要想获取文档的指针就不可以直接获取了。
CMyEditDoc * pDoc=(class CMyEditDoc *)GetDocument();
上面就是获取的方法。
b) 获得视图指针:
i. 在其中的一个视图中获取其它视图的指针:
CMainFrame* MainFrame1=(CMainFrame*)this->GetParent()->GetParent();
CMyEditView* pView=(CMyEditView*)MainFrame1->m_wndSplitter.GetPane(0,1);
This指针代表当前视图的指针,它通过获取CmainFrame的指针再去获取视图的指针,这样有个好处在于可以获得任意视图的指针。
还有一种方案可以实现,但是它有个缺点,你只能把获得的指针作为Cview的指针看待,这样你就不能实现特殊视图的功能了。
CMyEditDoc * pDoc=GetDocument();
CView * pView;
POSITION pos=pDoc->GetFirstViewPosition();
if(pos!=NULL)
{
pView=pDoc->GetNextView(pos);
}
在{}里加入多个pView=pDoc->GetNextView(pos);(原因我也说不出来)就可以获得你所要得视图。
如果你在开始就定义你所接触视图的指针,只不过没有初始化而已,就方面了好多。
m_pEditViewright =( CMyEditView* )m_splitterWnd.GetPane(0,1);// m_pEditViewright已定义。
ii. 在CmainFrame获取视图的指针:
CMyEditView* pView=(CMyEditView*)this->m_wndSplitter.GetPane(0,1);
这样就行了,同样在文档里获取视图的方法