vc++中限制窗口大小

本文介绍了如何在VC++中限制窗口大小,通过截获并处理WM_NCHITTEST消息,阻止用户通过拖动边框改变窗口尺寸,并在OnCreate函数中设置风格,禁用最大化按钮,防止双击标题栏窗口变小。

        一般窗口大小的改变,都是用户拖动窗口边框而造成的。所以,我们可以截获主窗口消息WM_NCHITTEST在其响应函数中判断CWnd::OnNcHitTest()的返回值是否为

HTRIGHT,

HTLEFT,

HTTOP,

HTBOTTOM

四个值之一,如果是,说明用户此时已点击了四个边框之一,此时我们应该返回HTCLIENT.那么,鼠标的形状就不会变成水平或垂直的双向箭头,用户就不可能依靠拖动边框来改变窗口大小了。

 
  用class wizard看了以下,没有找到WM_NCHITTEST这个消息,只能手动添加消息映射了 。
  在BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)下添上
  ON_WM_NCHITTEST()
  在框架类的头文件下
  声明
  afx_msg LRESULT OnNcHitTest(CPoint point);
  实现
  LRESULT CMainFrame::OnNcHitTest(CPoint point)
  {
  if(CWnd::OnNcHitTest(point) == HTRIGHT || CWnd::OnNcHitTest(point) == HTLEFT || CWnd::OnNcHitTest(point) == HTTOP || CWnd::OnNcHitTest(point) == HTBOTTOM)
  return HTCLIENT;
  return CWnd::OnNcHitTest(point);
  }
  这样的话就不能用鼠标改变大小了,但是,只是限制了四条边,虽然不能拖拉四条边了,但是四个角。因此,再加上
  HTTOPLEFT
  HTTOPRIGHT
  HTBOTTOMLEFT
  HTBOTTOMRIGHT
  这样4边+4角都不行了。呵呵
  不过,还缺一点点 ,缺什么
  双击窗口最上方也就是caption区域时窗口会变小,而且没办法回复
  怎么办??
  有办法,在OnCreate函数中加入如下代码:

SetWindowLong(m_hWnd,GWL_STYLE,GetWindowLong(m_hWnd,GWL_STYLE)&~WS_MAXIMIZEBOX);
       这样最大化按钮也不能用了,而且双击标题栏也不会最大化了。哈哈,大功告成~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值