对话框控件大小随窗口的大小变化而变化

来源:互联网 发布:有什么软件推广 编辑:程序博客网 时间:2024/04/29 01:08

我们经常会发现当我们将窗口最大化时,里面的控件并没有进行改变,接下来我就介绍一下此问题的解决办法,我们其实一般的都会把窗口的最大化按钮失效,是窗口不能进行最大化操作,但是有时候我们还是需要对窗口进行最大化操作的,下面我们可以通过添加WM_SIZE消息来解决此问题。
1 在XXDLg.h中添加
afx_msg void OnSize(UINT nType, int cx, int cy);
2 在XXDLg.h中添加
ON_WM_SIZE() 或者 ON_MESSAGE(WM_SIZE,OnSize)
3 在XXDlg类中添加以下成员变量
POINT oSize
4 在XXDlg类中OnInitDialog()添加以下代码

    CRect rect;      GetClientRect(&rect);  //获取客户端区域的大小    oSize.x = rect.right - rect.left;  //初始窗口的宽度    oSize.y = rect.bottom - rect.top;  //初始窗口的高度
5在XXDlg类中添加以下成员函数

“`
void XXDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if (nType==SIZE_RESTORED || nType==SIZE_MAXIMIZED) //窗口变化的类型
{

    float   ratio[2];  //变化率    POINT   newDialogSize;  //新的窗口的大小    CRect   newRect;      GetClientRect(&newRect);  //获取新的客户区的大小     newDialogSize.x = newRect.right - newRect.left;  //新窗口的宽度    newDialogSize.y = newRect.bottom - newRect.top;   //新窗口的高度    //得现在的对话框与以往对话框的大小比例      ratio[0]    = (float)newDialogSize.x / oSize.x;      ratio[1]    = (float)newDialogSize.y / oSize.y;      CRect Rect;      int woc;      //左右上角的数据      CPoint OldTLPoint, NewTLPint;  //左上角    CPoint OldBRPoint, NewBRPint;  //右下角    //列出所有控件     HWND  hwndChild = ::GetWindow(m_hWnd,GW_CHILD);      while(hwndChild)      {          //取得ID          woc  = ::GetDlgCtrlID(hwndChild);          GetDlgItem(woc)->GetWindowRect(Rect);  //获取控件的区域大小        ScreenToClient(Rect);  //映射到客户端区域大小        OldTLPoint = Rect.TopLeft();          NewTLPint.x  = long(OldTLPoint.x*ratio[0]);          NewTLPint.y  = long(OldTLPoint.y*ratio[1]);          OldBRPoint   = Rect.BottomRight();          NewBRPint.x  = long(OldBRPoint.x*ratio[0]);          NewBRPint.y  = long(OldBRPoint.y*ratio[1]);          Rect.SetRect(NewTLPint,NewBRPint);  //重新设置控件区域大小        GetDlgItem(woc)->MoveWindow(Rect,TRUE);  //显示到窗口上        hwndChild=::GetWindow(hwndChild, GW_HWNDNEXT); //获取下一个控件的句柄     }      oSize   = newDialogSize;   //新的窗口大小作为下一次变化的依据   }  

}

但是,经过多次的窗口变化后,里面的控件会失真,这个问题还未解决!

0 0
原创粉丝点击