请问如何实现对话框大小的动态调节啊?是在ONSIZE函数中加入一些代码么?

解决方案 »

  1.   

    程序里面调节可以用SetWindowPos(...)
    用程序的人可以调节设置对话框属性
      

  2.   

    首先要使对话框可以更改大小,要改对话框的属性.在对话框资源上右键-->properties->style 属性页里的border选为resizing.这时当对话框运行时,把鼠标放在边缘上就会出现调节大小的鼠标样式.这时当拉伸对话框时,大小就会变.因为没有写相应的处理函数.若对话框里有控件,控件并不会随对话框大小的改变而做相应的调整.当对话框变为可调时,每当对话框大小改变时,都会触发OnSIze函数,如果没有这个函数,可以通过Winzard添加wm_size事件即可.如果要更改对话框变化时控件的位置,就要在OnSize函数里做相应的处理.可以通过GetClientRect获得当前对话框的客户区大小.最左上方是(0,0)点.如果要更改某个控件的大小,如果控件有相应的Control对象,直接调用Control对象的MoveWindwo函数即可,参数就是你想让控件去的位置.如果没有控件Control对象可以通过GetDlgItem(id),获得控件句柄,然后调用MoveWindow函数.比较麻烦的是计算相应的位置.有时后对话框上有自己定义的一些从CWnd派生来的对象,这时首先要写这个对象的OnSize函数.当调用这个对象MoveWindow方法就会触发定义好的OnSize函数.举一个CPopertySheet的例子几个对象
     CPropertySheet m_sheet; CLogPropertyPage m_LogSystem;  //System Log;
     
     CLogPropertyPage m_LogClientOne; // Log about ClientOne;
     
     CLogPropertyPage m_LogClientTwo; //Log about ClientTwo; CLogPropertyPage m_LogTimer;//Log about timer ;m_sheet.AddPage(&m_LogSystem);
     m_sheet.AddPage(&m_LogTimer);
     m_sheet.AddPage(&m_LogClientOne);
     m_sheet.AddPage(&m_LogClientTwo); 
     m_sheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT); RECT rect;
     this->GetWindowRect(&rect);
     int width =rect.right-rect.left;
     int height = rect.bottom - rect.top;
     m_sheet.MoveWindow(0,125,width,height);OnSize函数里m_sheet.MoveWindow( margin,ctrlheight+margin*2,  rt.Width()-margin*2,   rt.Height()-ctrlheight-margin*2  );
       CTabCtrl*   ptab   =m_sheet.GetTabControl();   
       ptab->MoveWindow( 0,0, rt.Width()-margin*2, rt.Height()-ctrlheight-margin*2);   
          第二句话就会调用m_LogSystem的OnSize函数.