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

移动或改变视图的大小实际上移动与其关联的父框架窗口。因此,初始化位置的行为既可以在视图的框架窗口类中实现,也可以在视图类中实现,下面提供了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);  
    }  
原文地址:https://www.cnblogs.com/luoshupeng/p/2220771.html