MFC,调整窗口大小限制大小,设置窗口的最大|最小宽度与高度

方法一:响应窗口 WM_SIZE 消息(不推荐)

WM_SIZE 消息是当窗口大小发生改变发送的,所以如果要在这个窗口中限制窗口大小的话,你就需要重新计算窗口的大小信息,代码如下:

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 void CMainFrame::OnSize( UINT nType,  int cx,  int cy) {   CFrameWnd::OnSize(nType, cx, cy);   // TODO: 在此处添加消息处理程序代码   CRect rect ;   BOOL IsNeedReset = FALSE;   GetWindowRect(&rect);   if (cx<640){    IsNeedReset = TRUE;    rect.right = rect.left+640;   }   if (cy<480){    IsNeedReset = TRUE;    rect.bottom = rect.top+480;   }   if (IsNeedReset){    SetWindowPos(NULL,                 rect.left,rect.top,rect.Width(),rect.Height(),                 SWP_SHOWWINDOW|SWP_NOMOVE);   } }

由于OnSize是在窗口大小已经改变后才执行的,所以如果在代码种再次执行窗口的大小调整将会导致闪烁的问题,所以这种方法不推荐。

方法二:响应窗口 WM_SIZEING 消息(较为推荐)

WM_SIZEING消息是当窗口大小正在发生改变的时候发送的,所以可以在此消息种限制改变的大小从而达到限制窗口大小的目的,但是对于一个窗口来说,其改变大小的方式有很多,例如从窗口的四个方向都可以改变其大小,WM_SIZEING 消息有一个SIDE参数其描述了改变方向边界位置,这里为了简单,不去处理这个参数,如果你从左侧调整大小,可以发现很好玩的状态。

01 02 03 04 05 06 07 08 09 10 11 12 13 void CMainFrame::OnSizing( UINT fwSide, LPRECT pRect) {   //这里还需要知道 dwSide的信息,就是从那个方向进行变动   //这里省略了,不建议使用这种方法   //如果不处理方向,你可以试试看窗口从左下角 变小,很好玩的   if (pRect->right-pRect->left<=840){   pRect->right = pRect->left+840;   }   if (pRect->bottom-pRect->top<=480){   pRect->bottom = pRect->top+480;   }   //   CFrameWnd::OnSizing(fwSide, pRect);   // TODO: 在此处添加消息处理程序代码 }

WM_SIZEING 这种处理是可行的,不会出现闪烁的问题,但是需要处理一个dwSide的参数,处理起来较为复杂。

方法三:响应窗口 WM_GETMINMAXINFO消息(推荐)

当一个窗口的位置或者大小将要改变的时候将会发送一个WM_GETMINMAXINFO的窗口消息,应用程序可以使用这个消息来重设窗口的默认最大化大小和位置,或者窗口的默认最小或最大拖放大小。

01 02 03 04 05 06 07 08 09 10 11 void CMainFrame::OnGetMinMaxInfo(MINMAXINFO* lpMMI) {   //调整最小高度与宽度,如果需要的话   lpMMI->ptMinTrackSize.x = 640;   lpMMI->ptMinTrackSize.y = 480;   //调整最大高度与宽度,如果需要的话   lpMMI->ptMaxTrackSize.x = 1366;   lpMMI->ptMaxTrackSize.y = 768;     CFrameWnd::OnGetMinMaxInfo(lpMMI); }

WM_GETMINMAXINFO的处理简单易懂,无需繁杂的计算即可限定窗口的拖放大小等信息。

 

转载自:悠然品鉴 » MFC,调整窗口大小限制大小,设置窗口的最大|最小宽度与高度

http://www.youranshare.com/push/code/win-c-cpp/427.html      

    原文作者:cytj129
    原文地址: https://blog.csdn.net/cytj129/article/details/52494981
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞