WEB开发网      婵犻潧鍊婚弲顐︽偟椤栨稓闄勯柦妯侯槸閻庤霉濠婂骸浜剧紒杈ㄥ笚閹峰懘鎮╅崹顐ゆ殸婵炴垶鎸撮崑鎾趁归悩鐑橆棄闁搞劌瀛╃粋宥夘敃閿濆柊锕傛煙鐎涙ê鐏f繝濠冨灴閹啴宕熼鍡╀紘婵炲濮惧Λ鍕叏閳哄懎绀夋繛鎴濈-楠炪垽鎮归崶褍妲婚柛銊ュ缁傚秹鏁撻敓锟� ---闂佹寧娲╅幏锟�
开发学院软件开发VC 在vc++中限制窗口大小的方法 阅读

在vc++中限制窗口大小的方法

 2008-11-12 19:26:33 来源:WEB开发网 闂侀潧妫撮幏锟�闂佸憡鍨电换鎰版儍椤掑倵鍋撳☉娆嶄沪缂傚稄鎷�婵犫拃鍛粶闁靛洤娲ㄩ埀顒佺⊕閵囩偟绱為敓锟�闂侀潧妫撮幏锟�  闂佺ǹ绻楀▍鏇㈠极閻愭娑樷枎閹邦剛娉氶梺鍛婎殔濞层劌鈻撻幋婵愬殫妞ゆ梻鍘х憴锟�
核心提示:一般窗口大小的改变,都是用户拖动窗口边框而造成的,在vc++中限制窗口大小的方法,所以,我们可以截获主窗口消息WM_NCHITTEST在其响应函数中判断CWnd::OnNcHitTest()的返回值是否为:HTRIGHT, HTLEFT, HTTOP, HTBOTTOM ,缺什么双击窗口最上方也就是caption区域时

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

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

Tags:vc 限制 窗口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接