duilib窗口拖动

news2024/12/24 0:18:50

直接使用如下就可以了,不用再使用继承。

LRESULT CXmlWnd::OnNcHitTest(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
    POINT           pt;
    RECT            rcClient;
    RECT            rcCaption;
    CControlUI *    pControl = NULL;
 
    rcCaption = m_PaintManager.GetCaptionRect();
    GetClientRect(m_PaintManager.GetPaintWindow(), &rcClient);
    pt.x = GET_X_LPARAM(lParam);
    pt.y = GET_Y_LPARAM(lParam);
    ::ScreenToClient(m_PaintManager.GetPaintWindow(), &pt);
 
    if (-1 == rcCaption.bottom) ///< xml中描述bottom为-1时,整个窗口区域都可以拖动
    {
        rcCaption.bottom = rcClient.bottom;
    }
 
    if ((pt.x >= rcClient.left)
        && (pt.x < rcClient.right)
        && (pt.y >= rcCaption.top) 
        && (pt.y < rcCaption.bottom)) 
    {
        pControl = m_PaintManager.FindControl(pt);
        if (IsInStaticControl(pControl))
        {
            return HTCAPTION;
        }
    }
 
    return __super::OnNcHitTest(uMsg, wParam, lParam, bHandled);
}
 
//
BOOL CXmlWnd::IsInStaticControl(CControlUI * pControl)
{
    CDuiString strClassName;
    std::vector<CDuiString> vctStaticName;
    std::vector<CDuiString>::iterator it;
 
    if (NULL == pControl)
        return FALSE;
    
    strClassName = pControl->GetClass();
    strClassName.MakeLower();
    vctStaticName.push_back(L"controlui");
    vctStaticName.push_back(L"textui");
    vctStaticName.push_back(L"labelui");
    vctStaticName.push_back(L"containerui");
    vctStaticName.push_back(L"horizontallayoutui");
    vctStaticName.push_back(L"verticallayoutui");
    vctStaticName.push_back(L"tablayoutui");
    vctStaticName.push_back(L"childlayoutui");
    vctStaticName.push_back(L"dialoglayoutui");
 
    it = std::find(vctStaticName.begin(), vctStaticName.end(), strClassName);
    return (it != vctStaticName.end());
}

 

此外:我的caption设置的为caption="0,0,40,40"   ,只能再标题栏中进行拖动窗口。

如果设置为caption="0,0,0,-1"时,整个界面任一点都可以拖动,且需要IsInStaticControl 中将所有需要响应消息的名字如button  edit等进行添加上

参考:https://blog.csdn.net/lostspeed/article/details/19275249icon-default.png?t=N3I4https://blog.csdn.net/lostspeed/article/details/19275249

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++练级之初级:第五篇

C练级之初级&#xff1a;第五篇 第五篇 C练级之初级&#xff1a;第五篇1.auto关键字2.for循环改进3.指针空值nullptr4.内联函数4.1内联函数的概念4.2内联函数的注意点 总结 1.auto关键字 &#x1f914;什么是auto(automatic的缩写&#xff0c;自动的意思)关键字&#xff1f; au…

OpenShift 4 - 在 CI/CD Pipeline 中创建 KubeVirt 容器虚拟机 - 方法1+2 (视频)

《OpenShift / RHEL / DevSecOps 汇总目录》 说明&#xff1a;本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 文章目录 准备环境安装可实现 KubeVirt 操作的 Tekton 资源创建密钥对 在 CI/CD 流水线管道中创建 VM方法1&#xff1a;通过 Manifest 任务创建 VM方法2&am…

如何实现Spring AOP以及Spring AOP的实现原理

AOP:面向切面编程,它和OOP&#xff08;面向对象编程)类似。 AOP组成: 1、切面:定义AOP是针对那个统一的功能的&#xff0c;这个功能就叫做一个切面&#xff0c;比如用户登录功能或方法的统计日志&#xff0c;他们就各种是一个切面。切面是有切点加通知组成的。 2、连接点:所有可…

ClickHouse快速入门

目录 1 ClickHouse介绍1.1 ClickHouse 的特点1.1.1 列式存储1.1.2 DBMS 的功能1.1.3 多样化引擎1.1.4 高吞吐写入能力1.1.5 数据分区与线程级并行1.1.6 性能对比 2 数据类型2.1 整型2.2 浮点型2.3 布尔型2.4 Decimal 型2.5 字符串2.6 枚举类型2.7 时间类型2.8 数组 3 表引擎3.1…

SpringBoot tomcat核心参数

server.tomcat.threads.min-spare10server.tomcat.threads.max200server.tomcat.max-connections8192server.tomcat.accept-count100 第一个参数代表程序启动就会开启10个线程。 如果我改成20个&#xff0c;看看什么情况&#xff0c;可以看到初始化了20个线程 看第二个参数&am…

2022年中国云市场份额:阿里云腾讯云下降

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 4月23日&#xff0c;IDC发布《中国公有云服务市场(2022下半年)跟踪》&#xff0c;占据前四的分别为阿里云(40.6%)、华为云(11.0%)、腾讯云(11.0%)、中国电信(8.7%)。咱们说重点&#xff0c;如下图所…

DFMEA 在车用燃料电池空压机设计中的应用

摘要&#xff1a; DFMEA在空压机研发中的应用 氢气具有资源丰富、热值高和无污染等特点&#xff0c;因而是燃料电池汽车最理想的二次能源。空压机作为燃料电池汽车的关键总成&#xff0c;掌握其核心部件的设计和制造技术非常必要。应用传统的设计方法进行相关零部件如空气轴承…

D3.js(2) Data-Join

什么是Data-Join&#xff1f; 本质上是将数据与图元绑定 可以省去大量根据数据设置图元属性的代码量&#xff0c;对动态变化的数据提供统一接口 D3.js绑定数据的三个状态 Enter 数据数量>图元数量&#xff0c;d3.js会根据新增的数据生成相应的图元 给不存在数据绑定的图…

跨境电商服务简单说明

​ 前言 跨境电商服务是指通过互联网平台进行国际贸易的一种新型商业模式&#xff0c;涉及跨境物流、跨境支付、跨境电商平台等多个领域。随着全球化的不断推进和消费者需求的不断变化&#xff0c;跨境电商服务行业呈现出快速发展的趋势。 发展背景 跨境电商服务行业的发展背景…

基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用&#xff0c;是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估&#xff08;Millennium ecosystem assessment&#xff0c;MA&#xff09;提出生态系统服务包括供给、调节、…

JavaScript 函数调用和JavaScript 闭包

文章目录 一、JavaScript 函数调用二、JavaScript 闭包总结 一、JavaScript 函数调用 JavaScript 函数有 4 种调用方式。 每种方式的不同在于 this 的初始化。 this 关键字 一般而言&#xff0c;在Javascript中&#xff0c;this指向函数执行时的当前对象。 注意 this 是保留…

美创科技首届渠道高峰论坛| 两大分论坛亮点汇聚

4月22日&#xff0c;美创科技首届渠道高峰论坛在海南三亚隆重举行&#xff0c;本届高峰论坛以“新起点 新战略 共赢数安蓝海”为主题&#xff0c;全国各地200余家合作伙伴齐聚。当日下午&#xff0c;行业分论坛、技术分论坛两大论坛以及圆桌会议&#xff0c;多方视角、全方位共…

C++篇----auto、内联函数、函数重载

文章目录 一、auto二、内联函数&#xff08;inline)三、函数重载 一、auto auto在c中是会根据等号右边表达式自动推导等号左边的类型 #include<iostream> using namespace std;int main() {int a 0;auto b a;double c 1.1;auto d c;//打印类型typeid().name()cout &l…

OpenGL与Metal API的Point Sprite

我们在实际用OpenGL等3D图形渲染API时 点图元 往往用得不多&#xff0c;而在粒子系统中可能也是用一个正方形来绘制一单个粒子。不过在当前大部分3D图形渲染API中都能支持用点图元来绘制一个具有纹理贴图的粒子&#xff0c;从早在OpenGL 1.4开始就能支持了&#xff0c;而在Open…

机器学习:基于逻辑回归(Logistic Regression)对股票客户流失预测分析

基于逻辑回归对股票客户流失预测分析 作者&#xff1a;i阿极 作者简介&#xff1a;Python领域新星作者、多项比赛获奖者&#xff1a;博主个人首页 &#x1f60a;&#x1f60a;&#x1f60a;如果觉得文章不错或能帮助到你学习&#xff0c;可以点赞&#x1f44d;收藏&#x1f4c1…

npm install报错

出现这个错误&#xff0c;我百度之后得到的解决方案是&#xff1a; 在node.js安装目录下找到node_modules文件夹并删除 但是当我操作完成之后&#xff0c;却出现了另外一个ERROR&#xff1a; 于是我又还原了原来的node_modules文件夹&#xff0c;于是又报一开始的错 仔细瞅瞅…

Netty 单机百万连接测试

1.Netty框架简介 1.1.Netty简介 netty是jboss提供的一个java开源框架&#xff0c;netty提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发高性能、高可用性的网络服务器和客户端程序。也就是说netty是一个基于nio的编程框架&#xff0c;使用netty可以快…

NFC 学习笔记 5 MFRC522读写器2 NDEF

NDEF简介 NDEF&#xff08;NFC Data Exchange Format&#xff09;是一种标准化的数据格式&#xff0c;用于将数据存储在NFC标签或智能手机中。该格式是NFC论坛定义的&#xff0c;目的是在不同的NFC设备之间交换信息。 NDEF格式可以存储各种类型的数据&#xff0c;例如URL、文本…

面对市场内卷,不同品牌应该如何做客户增长?

后疫情时代&#xff0c;我国新生人口减少、人口老龄化加剧&#xff0c;chatgpt火爆和AI替代论盛行&#xff0c;市场上&#xff0c;口红效应依旧繁荣&#xff0c;消费者的延迟满足、替代性满足成为常见心理&#xff0c;面对宏观的不确定性&#xff0c;人们在消费上更需要确定性的…

github 基础

github 基础 前面讲了 git 的基本使用&#xff0c;这里简单的提一下 github 的基本使用&#xff0c;主要还是 pull 和 push 两个部分。其中 pull 好像有了一些变化&#xff0c;现在似乎是需要 rebase 而不是自动就帮你做了……&#xff1f;不过 rebase 的部分之后再提。 当然…