Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1228157
  • 博文数量: 699
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 4970
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 13:45
文章分类

全部博文(699)

文章存档

2011年(1)

2008年(698)

我的朋友

分类:

2008-10-15 13:45:24

    一般窗口大小的改变,都是用户拖动窗口边框而造成的。所以,我们可以截获主窗口消息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);

    这样最大化按钮也不能用了,而且双击标题栏也不会最大化了。

【责编:huangchunmei】

--------------------next---------------------

阅读(436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~