首页  >   经验  >   在客户区拖动窗口(拖动无边框窗口)两种实现方法及原理分析

在客户区拖动窗口(拖动无边框窗口)两种实现方法及原理分析

查看 codexia 的博客 2015-06-23 14:39:33 3704
无边框   窗口   拖动  
手机阅读 | 转发赚积分
手机收藏 | 分享给好友
简介当我们实现无边框窗口时,拖动窗口就成为了问题,没有了自动处理,我们就需要自己来处理窗口移动了。本文讲述两种窗口客户区拖动窗口的实现方法,并有详细的分析,让你不仅会用,且知道为什么,以后使用可以更灵活。

    正如简介所说,两种方式,各有所长。下面讲解一下两种方式。根据具体情况选择。
    第一种,基于MFC窗口机制。这种方式代码很简单。但是如果你不了解其中的机制,你就想不到可以这样使用。同时,如果你不了解,你也掌握不了,下次使用又记不住。提到记忆,只是因为没有理解,如果你理解,使用过几次后,就忘不了了。所以,理解内部机制,你才能够真正掌握,以后需要就新手拈来。先来看看代码。

LRESULT CbtnTextDlg::OnNcHitTest(CPoint point)
{
    UINT nHitTest = CDialogEx::OnNcHitTest(point);
    if(nHitTest == HTCLIENT)//如果是客户区
    nHitTest = HTCAPTION; //则把它当成标题栏
    return nHitTest;
}
//为了更清晰起见,将整个函数都贴出来,这样读者就知道这个函数在代码中的样子。

    这是MFC中的代码,所以,如果你是使用MFC的话,就直接可以复制粘贴就可以达到效果。当然,如果你不了解,呵呵,你根本就不知道这个段代码贴到哪去。所以,为了以后运用自如,慢慢看完分析解说。
    OnNcHitTest是消息WM_NCHITTEST的标准响应函数,所以,你使用类向导添加这个消息的响应,然后将函数内的代码写成代码段中的那样就可以实现了。如果你看到这个,就把代码贴过去解决了,然后不接着往下看看,那你就是码农了。OnNcHitTest返回的值,自然最终传递给系统,从而使系统来改变窗体。你要记住,你所有的代码都是请系统来帮忙的,你不会直接使窗体移动的,虽然是你写的代码,你只是委托系统完成的。这就是API调用的思想。而函数只有一个参数。这个参数是点结构体,有这个参数就够了。这个点是鼠标单击的屏幕点坐标,也就是原点是屏幕左上角。系统会根据这个鼠标的点,结合窗口的非客户区来判断这点落在这个区域没有,如果落在里面,则返回一个标志码,表示已经单击了非客户区,如果拖动的话,窗口就随之拖动了。这就是拖动标题栏自动拖动窗口的原理。平常我们拖动窗口并不会注意这个细节。但是,如果你的窗口选择了无边框的风格,那么,问题就来了。因为没有边框,标题栏都没了。既然没有了,那么就不可能有非客户区的单击了。这样就无法拖动窗口了。解决办法在这段代码中了。
    OnNcHitTest这个函数是非客户单击测试消息响应函数,其实这样会使很多人有误解,以为是单击非客户区才有的。其实不是的,这个函数名表示它要执行的功能只是测试非客户区,如果满足就执行一定的操作,如果不是就不执行默认的操作

1.微信扫码
2.点击按钮,粘贴命令
自动刷新 手动刷新
命令:rd 9M4mE 复制
提示:如果您发送了命令,自动刷新会展开全文。自动刷新最多60秒,超过60秒请点击手动刷新。
创作不易,汗水不止!为防止劳动果实被爬虫窃取,开启了反爬机制,需要您发送命令继续阅读。取关会再次出现此提示。一段时间后出现此提示,请再次发送即可。如有问题,请加客服微信Freeme007处理。感谢您的理解。
标注
评论
站内搜
百度搜
传送到手机
手机扫码,识别文字,完成传送x
加载中...
标注内容x
加载中...
添加标注x
文章标题:在客户区拖动窗口(拖动无边框窗口)两种实现方法及原理分析
文章地址:http://www.cjjjs.com/article/6232015333914160
转载到个人博客,请在文末带上右侧内容(含超链接):本文转载自:在客户区拖动窗口(拖动无边框窗口)两种实现方法及原理分析
收藏 0 点赞 0
公众号
微信赞赏
支付宝赞赏
领支付宝大红包
QQ群

相关阅读

  1. 为什么用CreateWindow函数创建出来的窗口的标题只有一个字符? 查找全网同类文章
  2. 关于 “为什么我移动窗口,并不会触发窗口重绘消息呢” 的引申问题 查找全网同类文章
  3. 使用多线程避免窗口卡死(假死)的实现方案 查找全网同类文章
  4. vc ++ 控制响应窗口外的鼠标移动点击 代码 查找全网同类文章
  5. [MFC] 如何实现屏幕置顶透明窗口 查找全网同类文章
  6. [MFC] 小疑问,MFC窗口设计问题,界面尺寸无法手动对称 查找全网同类文章
  7. 自定义窗口消息实现窗口通信即如何实现自定义消息 查找全网同类文章
  8. 重叠窗口显示问题.用SetWindowPos解决不了问题. 查找全网同类文章
  9. 窗口背景贴图,打开窗口会闪烁 查找全网同类文章
  10. 如何修改MFC属性页窗口的字体[批量修改控件字体] 查找全网同类文章
分享到:
分享文章[在客户区拖动窗口(拖动无边框窗口)两种实现方法及原理分析]到QQ空间

相关阅读

猜您感兴趣