空间随着窗体变化而变化的示例

来源:互联网 发布:hr软件 北森 编辑:程序博客网 时间:2024/05/16 04:56

 用一个对话框去调用另一个对话框,我们在北条调用的对话框下添加如下代码

在头文件下添加:

 public:
  CRect m_rect; //添加成员变量
  void SetContralInfo(WORD CtrlId);// 添加成员函数
protected:
     int m_old_cx,m_old_cy;//添加成员变量。来记录原来的大小

  CDWordArray m_control_info;

 

在.cpp下添加

(1)构造函数中初始化

logoview::logoview(CWnd* pParent /*=NULL*/)
 : CDialog(logoview::IDD, pParent)
{
  m_old_cy = m_old_cx = 0; //初始化成员变量
}

(2)添加两个函数OnSize和OnInitDialog函数,分别在类上添加WM_SIZE和WM_INITDIALOG两个消息就加上了

(3)OnSzie下实现

void logoview::OnSize(UINT nType, int cx, int cy)
{
 CDialog::OnSize(nType, cx, cy);
 if (cx == 0 || cy == 0)
 {
  cx = 800;
  cy = 600;
 }

 float dx_percent = (m_old_cx == 0)? 1: (float)((float)cx/(float)m_old_cx);
 float dy_percent = (m_old_cx == 0)? 1: (float)((float)cy/(float)m_old_cy);
 if (m_old_cx)
 {
  CRect WndRect;
  CWnd *pWnd;
  for (int i = 0;i<m_control_info.GetSize();i++)
  {
   pWnd = GetDlgItem(m_control_info[i]);
   if (!pWnd)
   {
    TRACE("Control ID_%d NOT FOUND!!\n",m_control_info[i]);
    continue;
   }
   pWnd->GetWindowRect(&WndRect);
   ScreenToClient(&WndRect);
   WndRect.left = (int)(WndRect.left*dx_percent);
            WndRect.right = (int)(WndRect.right*dx_percent);
   WndRect.bottom = (int)(WndRect.bottom*dx_percent);
   WndRect.top = (int)(WndRect.top*dx_percent);

   pWnd->MoveWindow(&WndRect);
  }
 }
 m_old_cx = cx;
 m_old_cy = cy;
 
}

(4)OnInitDialog下加入所有对话框上的控件ID

BOOL logoview::OnInitDialog()
{
 CDialog::OnInitDialog();


  SetContralInfo(IDC_LIST1);
 SetContralInfo(IDC_STATIC_logo );
 SetContralInfo(IDOK);
 SetContralInfo(IDCANCEL);
 
 
 return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}

(5)实现添加的成员函数

void logoview::SetContralInfo(WORD CtrlId)
{
 m_control_info.Add(CtrlId);
}

原创粉丝点击