如何让TAB控件的子对话框随着TAB的父对话框的最大化而最大化

来源:互联网 发布:家居装修 淘宝 编辑:程序博客网 时间:2024/05/16 13:52

这个问题折磨了我两天。先说子对话框如何和tab空间关联的:

m_tabctl.InsertItem(0, _T("扫描"));
 m_tabctl.InsertItem(1, _T("扫描选项"));
    m_pagechoice.Create(IDD_DIALOGCHOICE, &m_tabctl);//创建两个对话框,父亲为列表控件
 m_pagescan.Create(IDD_DIALOGSCAN, &m_tabctl);
 m_pagescan.pChoice = &m_pagechoice;
  
 


  INIT_EASYSIZE;
  SetWindowPos((CWnd*)&m_hWnd,   0,   0,   800,   600,   SWP_SHOWWINDOW);
  //CRect rctab, reItem;
  m_tabctl.GetClientRect(&rctab);//让两个对话框填充整个TAB空间区域
  m_nWidth = rctab.left-rctab.right;
  m_nHeight = rctab.bottom-rctab.top;
  m_tabctl.GetItemRect(0,&reItem);
  rctab.DeflateRect(0, reItem.bottom, 0,0);


  m_pagescan.MoveWindow(&rctab);
  m_pagechoice.MoveWindow(&rctab);

 

  pDialog[0]=&m_pagescan;
  pDialog[1] = &m_pagechoice;

  pDialog[0]->ShowWindow(SW_SHOW);
  pDialog[1]->ShowWindow(SW_HIDE);
  m_CurSelTab = 0;

 

 

至于对话框中的控件如何随着对话框的变化而变化,我们使用EASYSIZE, 大家可以上网查查,有很多介绍,这里就不再说了。

   最后说一下TAB控件的子对话框如何随着TAB的父对话框的最大化而最大化,这个问题,这个问题困扰了我两天。最后终于找到了方法。

首先在主对话里增加WM_SIZE处理消息,在函数中添加如下代码:

UPDATE_EASYSIZE;

if(m_pagescan.GetSafeHwnd() && m_pagechoice.GetSafeHwnd()){//一定要加上此个判断,否则会出现段错误,因为第一次调用的时候两个子对话框的句柄还没有。
  
  m_tabctl.GetClientRect(&rctab);
  //ScreenToClient(rctab);

  m_nWidth = rctab.left-rctab.right;
  m_nHeight = rctab.bottom-rctab.top;
  m_tabctl.GetItemRect(0,&reItem);
  rctab.DeflateRect(0, reItem.bottom, 0,0);
  m_pagescan.MoveWindow(&rctab);
  m_pagechoice.MoveWindow(&rctab);
 }

最后的工作就是利用EASY_SIZE在每个子对话框里最每个对话框的控件在WM_SIZE消息里进行处理了,就不再多说。