MFC 限制对话框,窗口大小

1.在类的头文件中加入函数申明    (.h文件)

     

Cpp代码   收藏代码
  1. afx_msg void OnGetMinMaxInfo(MINMAXINFO *lpMMI);  

 

2.在消息映射中添加       (.cpp文件)

      ON_WM_GETMINMAXINFO()

 

即:

Cpp代码   收藏代码
  1. BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)  
  2.     ON_WM_GETMINMAXINFO()  
  3. END_MESSAGE_MAP()  

 

3.在类的主体文件中加入函数实现  (.cpp文件)

Cpp代码   收藏代码
  1. void MyDlg::OnGetMinMaxInfo(MINMAXINFO *lpMMI)  
  2. {  
  3.       CPoint   pt(320,250); //定义宽和高  
  4.       lpMMI-> ptMinTrackSize=pt; //限制最小宽和高  
  5.       CDialog::OnGetMinMaxInfo(lpMMI);   
  6. }  

 

FROM: http://paulfzm.iteye.com/blog/968652


======================================================

如何控制窗口框架的最大最小尺寸

 

 

答:

要控制一个框架的的最大最小尺寸

,

你需要做两件事情

.

CFrameWnd

的继承

 

中处理消息

WM_GETMINMAXINFO,

结构

MINMAXINFO

设置了整个窗口类的限制

,

因此

 

住要考虑工具条

,

卷动条等等的大小

 

 

// 

最大最小尺寸的象素点

 - 

示例

  

#define MINX  200 

#define MINY  300 

#define MAXX  300 

#define MAXY  400 

 

voidCMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)  

{  

CRectrectWindow;  

GetWindowRect(&rectWindow);  

 

CRectrectClient;  

GetClientRect(&rectClient);  

 

      // get offset of toolbars, scrollbars, etc.  

intnWidthOffset = rectWindow.Width() - rectClient.Width();  

intnHeightOffset = rectWindow.Height() - rectClient.Height();  

 

lpMMI->ptMinTrackSize.x = MINX + nWidthOffset;  

lpMMI->ptMinTrackSize.y = MINY + nHeightOffset;  

lpMMI->ptMaxTrackSize.x = MAXX + nWidthOffset;  

lpMMI->ptMaxTrackSize.y = MAXY + nHeightOffset;  

}  

 

第二步

,

CFrameWnd

的派生类的

PreCreateWindow

函数中去掉

WS_MAXIMIZEBOX

消息

 

,

否则在最大化时你将得不到预料的结果

 

 

BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT&cs)  

{  

cs.style&= ~WS_MAXIMIZEBOX;  

returnCFrameWnd::PreCreateWindow(cs);  

}

    如何控制窗口框架的最大最小尺寸  答:要控制一个框架的的最大最小尺寸,你需要做两件事情.
    在CFrameWnd的继承类  中处理消息WM_GETMINMAXINFO,结构MINMAXINFO设置了整个窗口类的限制,
    因此记  住要考虑工具条,卷动条等等的大小.
        
    // 最大最小尺寸的象素点 - 示例  
    #define MINX  200 
    #define MINY  300 
    #define MAXX  300 
    #define MAXY  400       
    voidCMyFrameWnd::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)  {   
        CRectrectWindow;   
        GetWindowRect(&rectWindow);    
        CRectrectClient;   
        GetClientRect(&rectClient);          
        // get offset of toolbars, scrollbars, etc.   
        intnWidthOffset = rectWindow.Width() - rectClient.Width();  
        intnHeightOffset = rectWindow.Height() - rectClient.Height();    
        lpMMI->ptMinTrackSize.x = MINX + nWidthOffset;  
        lpMMI->ptMinTrackSize.y = MINY + nHeightOffset;  
        lpMMI->ptMaxTrackSize.x = MAXX + nWidthOffset;  
        lpMMI->ptMaxTrackSize.y = MAXY + nHeightOffset;  
    }    
    
    第二步,在CFrameWnd的派生类的PreCreateWindow函数中去掉WS_MAXIMIZEBOX消息  ,否则在最大化时你将得不到预料的结果.    
    BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT&cs)  {   
     cs.style&= ~WS_MAXIMIZEBOX;   
     returnCFrameWnd::PreCreateWindow(cs);  
    }


FROM:  如何控制窗口框架的最大最小尺寸

http://wenku.baidu.com/link?url=08nWrbJbh1GmgbcIV8h8Xbhw17c3LG2ap1xZ7QWjQubwFCLhF8H8QtoTjfnw4lcCBzlHQdpU9Fr_Xb2_c_YLEpkxq9BOqFiqJmD59ik5wam

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值