您的位置:首页 > 其它

设置一个视图的初始位置和大小

2011-10-21 22:30 274 查看
移动或改变视图的大小实际上移动与其关联的父框架窗口。因此,初始化位置的行为既可以在视图的框架窗口类中实现,也可以在视图类中实现,下面提供了2中实现方法。

第一种技术:在视图的框架窗口类中实现该行为

第1步:使用ClassWizard创建一个新的CMDIChildWnd派生类,该类将实现所希望的初始化视图位置的行为。

第2步:使用ClassWizard为CMDIChildWnd派生类增加WM_CREATE消息处理函数,该函数的实现代码如下:

int CCenterChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if(CMDIChildWnd::OnCreate(lpCreateStruct)==-1)
return -1;
//把窗口设置为主框架窗口客户区的1/4,并置于中央
CWnd* pMDIClient=GetParent();
ASSERT_VALID(pMDIClient);
CRect rect;
pMDIClient->GetClientRect(&rect);
MoveWindow(rect.Width()/4 , rect.Height()/4 , rect.Width()/2 , rect.Height()/2 );

return 0;
}


第3步:不要忘记在适当的文档模板中说明视图框架窗口,以得到所希望的行为。

第2中技术:在视图类中实现该行为

在视图类中使用ClassWizard重载OnInitialUpdate()虚函数,该函数的实现如下面的程序清单所示,每次创建一个新视图时,它把父框架窗口移动到所希望的位置。

void CDrawView::OnInitialUpdate()
{
//首先调用基类
CView::OnInitialUpdate();
//1、得到父框架窗口的指针
CFrameWnd* pParentFrame=GetParentFrame();
ASSERT_VALID(pParentFrame);
//2、得到MDI客户区窗口窗口的指针
CWnd* pMDIClient=pParentFrame->GetParent();
ASSERT_VALID(pMDIClient);
//3、计算MDI成员窗口的大小
CRect retc;
pMDIClient->GetClientRect(&rect);
//4、把父框架窗口移动到希望的位置
pParentFrame->MoveWindow(rect.Width()/2 , 0 , rect.Width()/2 , rect.Height()/2);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐