duilib绝对定位与相对定位

news2024/11/28 4:50:46

文章目录

  • 前言
  • 1、绝对位置(float=true)
  • 2、窗口
  • 3、布局及控件
  • 4、相对位置(float=false)
  • 5、窗口
  • 6、布局与控件
  • 7、嵌套在布局与控件之中的布局与控件

前言

duilib中窗口,布局,控件等在屏幕上的显示位置都是按照配置好的xml文件规则显示的,每个显示元素的位置大小也需要显式指定,才能呈现出更好看的界面效果,显示元素的位置有两种配置规则,即绝对位置(Duilib中float属性为true时)与相对位置(float属性为false时)。

1、绝对位置(float=true)

首先看一张惨不忍睹的自绘图:
在这里插入图片描述
图中简单描述的是一个屏幕,屏幕里面包含了一个窗口,窗口里面包含了一个显示控件(这个控件可以理解为duilib的各种布局与控件组合),在一般的界面系统屏幕上显示一般是这种模式。

2、窗口

位置:pos(A,B,C,D)

在win32中,界面显示中一般以pos(A,B,C,D)这种方式定位一个窗口的大小,其中A,B表示的是窗口左上角的坐标,C,D表示的是窗口的width和height,参考坐标系为以屏幕左上角为原点,原点右边直线方向为X轴正向,原点下方直线方向为Y轴正向,即矩形左上角坐标(A,B),矩形的大小width=长,height=D。

在duilib的xml文件中对于窗口的配置并没有显式指定pos(A,B,C,D)这样的方式来定位窗体的大小,而是直接size属性(宽,高),即可,这其实是有原因的。duilib的窗口左上角坐标与窗口大小需要在不同的地方设置,即窗口的widthheight直接在xml文件中配置,就是size(宽,高)。窗口的左上角坐标需要在入口函数Create函数中指定,如下代码:

#include "stdafx.h"
#include "MainFrame.h"
 
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE /*hPrevInstance*/, LPSTR /*lpCmdLine*/, int nCmdShow)
{
	CPaintManagerUI::SetInstance(hInstance);
 
 
	CWndShadow::Initialize(hInstance);
	CMainFrame* pFrame = new CMainFrame();
	if (pFrame == NULL)
		return 0;
	DWORD dwStyle = UI_WNDSTYLE_FRAME;
	dwStyle = dwStyle^WS_MAXIMIZEBOX;
	pFrame->Create(NULL, _T("mywindows"), dwStyle, WS_EX_STATICEDGE | WS_EX_APPWINDOW, 1, 1, 0, 0);
 //倒数第3第4个参数可以设置duilib左上角的坐标,倒数第1第2个参数因为继承了WindowImpBase,
//WindowImpBase类中在创建窗口大小时会取xml文件中的窗口大小数据,顾此处两个参数值无效。
	                                                                                      
	pFrame->CenterWindow();
	::ShowWindow(*pFrame, SW_SHOW);
 
	CPaintManagerUI::MessageLoop();
 
	::CoUninitialize();
	return 0;
}

3、布局及控件

布局与控件就是duilib窗口中的子显示元素,坐标位置与窗口设置一样,都是以屏幕左上角为参考原点,右与下为正方向。

4、相对位置(float=false)

5、窗口

窗口就没有相对位置只能是绝对位置,因为窗口是一个程序的总体框架。

6、布局与控件

布局的最外层与直接处于窗体内的控件(不包含在布局之中或嵌套在其他控件)。这种结构布局与控件的相对位置是以窗体左上角坐标为参考点

7、嵌套在布局与控件之中的布局与控件

这种结构,相对位置的参考点为以整个嵌套部分的左上角为参考点,即以本身的上一层为参考

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

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

相关文章

Selenium自动化测试-设置元素等待

selenium中有三种时间等待: 强制等待:sleep隐式等待:implicitly_wait显示等待:WebDriverWait 1.sleep 让程序暂停运行一定时间,等待时间到达后继续运行。 使用sleep,需先导入time模块,impor…

一.《某三国》人物属性及其相关属性

人物属性 1.找一个可以操控变化的属性来找 比如血量.坐标或者五铢(绑定金币),这里我们用五铢找 五铢只要打一个怪就会加一点 2.我们直接搜变化即可搜到 五铢地址0AD64EAC 3.我们CE给地址下访问 4.这里我们最后找第一条访问 因为他是被改变的 或者你CE给地址下写入 5.然后我…

BUFG/BUFGCE/BUFH/BUFHCE

对BUFG/BUFGCE/BUFH/BUFHCE简单了解。 下图为 7 系列 FPGA 时钟架构图: BUFG 全局时钟缓冲器。它的输入是IBUFG的输出,BUFG的输出到达FPGA内部的IOB、CLB、选择性块RAM的时钟延迟和抖动最小。BUFG连接的是芯片中的专用时钟资源,能减少信号…

【golang中的切片的相关知识点】[ ] slice

golang-切片 切片的定义和初始化切片的内存分析切片的操作获取长度和容量追加元素复制切片 切片的遍历切片的特性总结 Golang中的切片是一种灵活且强大的数据结构,它可以动态地增长和缩小。切片是基于数组的抽象,它提供了更方便的操作和更灵活的内存管理…

系列五、RocketMQ集群搭建(双主双从)

一、概览 二、集群特点 2.1、NameServer NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。 2.2、Broker Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Sla…

数字孪生和人工智能异同?

数字孪生和人工智能是两个近年来备受关注的前沿技术,在不同领域发挥着重要作用。虽然两者都涉及数据处理和模拟,但其本质和应用有着显著的区别。本文将介绍数字孪生和人工智能之间的联系和区别,以帮助读者更好地理解它们在不同场景下的作用。…

虚拟机(Ubuntu1804)相机与激光雷达联合标定实现过程记录

在智能小车录制的点云数据在rviz打开一定要修改Fixed Frame为laser_link,这样才能看到点云,注意此时用的是雷神激光雷达,话题名是lslidar_,可采用rostopic list查看具体名称 1、新建一个终端打开roscore roscore2、在文件夹libratia中新建一…

Jmeter常用功能-参数化介绍

JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现。 参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统。 这个时…

idea2023.3安装及配置

idea2023.3安装及配置 一.安装idea 1.卸载旧版本idea 2.下载idea旗舰版 Download IntelliJ IDEA: The Capable & Ergonomic Java IDE by JetBrains 旗舰版是收费的需要破解,社区版是免费的不需要破解,开发人员建议旗舰版 3.安装idea 修改安装目…

[LINUX]之文本匹配多行

在linux中创建文本如下: (1)显示test.txt文件里匹配test3字符串那行以及上下1行 cat test.txt |grep -C 1 test3 (2)显示test.txt文件里匹配test3字符串那行以及下面2行 cat test.txt |grep -A 2 test3 (3&…

Qt6 Qt Quick UI原型学习QML第四篇

文章目录 布局项目【对齐】QML语句QML语法解释 布局项目【对齐】 QML提供了一种灵活的方式来使用锚来布局项目。锚定的概念是项目的基础,并且可用于所有视觉QML元素。锚的作用就像一个契约,比竞争的几何变化更强。锚是相对性的表达;你总是需…

三季度上市,比亚迪海豹DM-i内饰官图发布,延续海洋风格

据报道,比亚迪海洋网旗下全新车型海豹 DM-i今日发布了内饰官方图片。新车内部采用了独特的“海洋美学”设计理念,并体现了海洋网最新一代内饰风格。消息称,这款车型将于第三季度上市,定位为中大型混合动力轿车。 值得注意的是&…

【QT】元对象系统学习笔记(一)

QT元对象系统 01、元对象系统1.1、 元对象运行原则1.2、 Q_OBJECT宏1.3、 Qt Creator启动元对象系统1.4、 命令行启动元对象(不常用) 02、反射机制2.1、 Qt实现反射机制2.2、 反射机制获取类中成员函数的信息2.1.1、 QMetaMethon类2.1.2、QMetaObject类 …

【程序员必须掌握哪些算法?】

一个程序员一生中可能会邂逅各种各样的算法,但总有那么几种,是作为一个程序员一定会遇见且大概率需要掌握的算法。今天就来聊聊这些十分重要的“必抓!”算法吧~ 常见算法介绍 本文所介绍的排序算法均以升序为例。 文章目录 常见算法介绍一 …

【解决】mysql卸载之后安装不同的版本导致mysqld无法启动

解决mysql不同版本之间数据的冲突 一. 背景二. 出现的问题三. 问题的原因四. 解决方式 一. 背景 说起来也是个巧合,在我安装mysql5.7版本的时候,看走眼了,安装成mysql8.0版本的了。于是乎,我当时觉得8.0,嗯&#xff0…

机械臂多任务逆运动学(优先级同等和存在优先级)

我们经常使用微分运动学来计算机器人的逆运动学,对于单个任务的机械臂的逆运动学使用的是梯度投影法: 冗余机械臂求解逆运动学解——梯度投影法 但是对于多任务的逆运动学在一般的机器人学里面很少有提及,最近看到了相关的论述,…

IP基础知识总结

IP他负责的是把IP数据包在不同网络间传送,这是网络设计相关的,与操作系统没有关系。所以这部分知识,不是网络的重点。IP和路由交换技术联系紧密。但是要作为基本知识点记住。 一、基本概念 网络层作用:实现主机与主机之间通信。 …

MySQL数据库操作篇4(内置函数连接查询子查询)

MySQL除了提供一些聚合函数供我们使用,同时还提供了很多的内置扩展函数,这些函数有的是进行日期处理的,有的是进行字符串处理的,有的则是进行数值处理,以及其它的种种函数,这些函数可以帮助我们对数据进行加…

创建/查看/编辑文本文件

创建/查看/编辑文本文件 将输出重定向到文件和程序 标准 输入/输出/错误 运行的程序需要从某个位置读取输入并将输出写入某位置。从shell提示符运行的命令通常会从键盘读取输入,并将输出发送到其终端窗口。 进程通过使用文件描述符的通道编号获取输出并发送输出。…

红队打靶:billu_b0x打靶思路详解(vulnhub)

目录 写在开头 第一步:主机发现和端口扫描 第二步:Web渗透 第三步:利用文件包含进行代码审计 第四步:图片马上传与反弹shell 第五步:敏感文件提权 总结与思考 写在开头 我的博客等级终于到三级了,…