如何使视图每次打开时保持关闭时的位置?

来源:互联网 发布:自学编程入门先学什么 编辑:程序博客网 时间:2024/06/05 16:54

      主应用程序的 视图窗口 在应用程序的主框架窗口内位置 相对保持不变增加了用户接口的易操作性,步骤如下:

 

      以在CChildFrame类内部为例说明:

 第一步:关闭视图窗口时,保存该视图窗口相对于MDIClient窗口的位置到注册表中

void CChildFrame::OnClose()
{
      CRect rect,rectClient,rectChild;

 

      //1、求出Child子窗口相对于 屏幕左上角 的坐标
      GetWindowRect(&rectChild);


      //2、求出MdiClient窗口相对于 屏幕左上角 的坐标
      GetParent()->GetWindowRect(&rectClient);

 

     //3、求出Child子窗口相对于MdiClient窗口的位置

      rect.top = rectChild.top - rectClient.top ;
      rect.left =rectChild.left - rectClient.left ;

 

     //4、把该位置保存到注册表中
      AfxGetApp()->WriteProfileInt("Settings" , "DrawViewRect.top" , rect.top );
      AfxGetApp()->WriteProfileInt("Settings" , "DrawViewRect.left" , rect.left );

 

     //5、默认OnClose()调用

      CMDIChildWnd::OnClose();
}

 

第二步:在Child窗口显示之前,把视图窗口相对于MDIClient窗口的位置从注册表中读出来,并设置其位置

int CChildFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
      if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
      return -1;
      

      //1、读取注册表
      int y=AfxGetApp()->GetProfileInt("Settings" , "DrawViewRect.top",0);
      int x=AfxGetApp()->GetProfileInt("Settings" , "DrawViewRect.left",0);

      //2、设置窗口位置

      SetWindowPos(NULL,x,y,0,0,SWP_NOSIZE|SWP_NOZORDER);


      return 0;
}

 

原创粉丝点击