void CDlg::OnSizing(UINT fwSide, LPRECT pRect) 
{
CDialog::OnSizing(fwSide, pRect);

// TODO: Add your message handler code here
//限定窗体最小的大小
if (pRect->right - pRect->left < 656 ){
pRect->right = pRect->left + 656 ;
}
if (pRect->bottom - pRect->top < 446 ){
pRect->bottom = pRect->top + 446 ;
}
}程序想实现控制可resize窗体的最小大小。上面的程序如果从窗体右下方变动大小,不存在问题;但是如果从上、左上、左边变动窗体大小的话,达到极限时就不对了,窗体会根据鼠标的移动而移动。
这个该怎么改动?

解决方案 »

  1.   

    你没控制对话框的left、top的位置,当然要随之而动。
    if (pRect->right - pRect->left < 656 )
    {
                      pRect->left=10;
    pRect->right = pRect->left + 656 ;
    }
    if (pRect->bottom - pRect->top < 446 ){
                       pRect->top=10;
    pRect->bottom = pRect->top + 446 ;
    }
      

  2.   

    如果你控制left top的位置,岂不是只能限定窗体在某个位置了?
    如果一旦触发if条件窗体会一下跳跃到左面,虽然能够实现对大小的控制但是窗体会乱跳啊
      

  3.   

    Sorry!刚才没看明白你的意思。
    产生的原因:
    从做或者上移动时,当达到临界值时,就会始终控制窗体的大小,如果移动了x,那窗体的右面要加上x,给人的错觉就是整个窗体在向右动。而从左面当然不会出现这种情况,因为移动x后,右面要加x,所以刚好又还原。
      

  4.   

    记下到达临界点的窗体left,以后每次缩小窗体时,保持left不变就OK了。
      

  5.   

    UINT fwSide
    帮助里说这个指明了窗体的4边加4角
    有人知道4边4角分别对应哪一个数字啊?
    如果知道了从哪一边进行的size就可以控制了
      

  6.   

    用GetclientRect()记录初试的四角位置
    然后分别根据鼠标移动哪个边的条件计算
        让没有移动的边保持不动,这样就能达到你要的目的