无标题栏窗口拖动的实现

普通的Windows应用程序窗口都具有统一的窗口风格,它们一般都包括:用户区和非用户区两部分。非用户区包括标题条、窗口边框、最大化按钮、最小化按钮、关闭按钮和系统默认的快捷键及鼠标支持等。利用鼠标的左键通过拖动窗口的标题条可以在屏幕上任意移动整个窗口,当光标停止在窗口边框上时可以改变窗口的大小。在一些比较经典的软件中,有一类特殊的无标题条的窗口。这种窗口不需要改变窗口的大小,但必须具有窗口客户区域的拖动功能,典型的例子有   Windows中的IME输入法应用程序、中文之星以及一些第三方开发的输入法平台等。由于普通窗口的拖动功能是由系统来完成的,编制一般的应用程序时根本无须考虑客户区域拖动问题,但对于无标题条的Windows应用程序,拖动功能就要靠开发者自己来实现了。

 实现   思路       
        既然Windows已经实现了不错的窗口拖动功能,我们可以通过利用系统这种默认的实现来完成无标题条的窗口的拖动。仔细分析一下,不难发现,无标题条窗口的客户区大都只是作为控件的载体(最常见到的是按钮控件),当鼠标位于其窗口中时(鼠标变为十字箭头)可以拖动整个窗口,而且窗口的大小不可改变,这很像一般窗口标题条的功能,因此只要将无标题条窗口模拟成标题条,使系统将其“误认为”是窗口的标题条,就可以利用系统的默认实现来完成无标题条窗口的拖动了。      
  那么如何使系统将无标题条窗口的客户区“误认为”是窗口的标题条呢?重载函数:      
  UINT   CWnd::OnNcHitTest(CPoint   point)      
     
  每当鼠标在窗口中移动,那么MFC的应用程序框架会发送消息WM_NCHITTEST,由该函数来完成对消息处理。其中参数point鼠标当前所在位置坐标,函数的返回值为:  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值