第十六篇:SWindow的布局属性pos2type及offset
当窗口大小需要根据内容来确定时,使用XML布局可能需要做一些特殊的处理。
例如:不管窗口多大,我需要将该窗口相对于父窗口居中在XML中应该怎么处理?
如果窗口大小是固定的(如, 100 *100),这样pos属性可以定义为"|-50,|-50,|-50,|-50"即可。
当窗口大小不确定时,SOUI中提供了pos2type及offset来协同处理。
其中pos2type是offset的子集。
下面先重点介绍offset属性
offset属性是SOUI在通过pos属性完成坐标定位后再将坐标进行偏移的属性。和pos中一般使用象素为单位不同,offset是以控件最后的大小为单位进行平移。
我们可以在XML中或者代码中使用offset = "-0.5,-0.5"这样的形式来描述窗口的坐标平移属性。
属性中包含两个值,分别对应X,Y方向的平移相对于窗口大小的倍数,一般为[-1,0]的小数(float),当然也可以超过这个范围。。
我们先看一下代码中如何实现:
class SOUI_EXP SwndLayout
{
public:
//...
float fOffsetX,fOffsetY; /**< 窗口坐标偏移量, x += fOffsetX *
//...
};
int SwndLayout::CalcPosition(LPRECT lpRcContainer,CRect &rcWindow )
{
int nRet=;
//...
if(nRet==)
{//没有坐标等待计算了
rcWindow.NormalizeRect();
//处理窗口的偏移(offset)属性
CSize sz = rcWindow.Size();
CPoint ptOffset;
ptOffset.x = (LONG)(sz.cx * fOffsetX);
ptOffset.y = (LONG)(sz.cy * fOffsetY);
rcWindow.OffsetRect(ptOffset);
}
return nRet;
}
SwndLayout::CalcPosition是SOUI用来通过pos及offset属性计算窗口坐标的关键函数,为了突出重点,具体的坐标计算省略了,只列出平移处理部分的代码。
可以看出,在平移处理前,首先获得窗口的Size,再将Size分别乘以fOffsetX,fOffsetY这两个平移系数获得在x,y两个方向上的平移量。
最后才是将矩形做平移处理。
下面我们再来看看pos2type属性:
pos2type可以定义9个参考点:center, lefttop, leftmid, leftbottom,midtop,midbottom,righttop,rightmid,rightbottom。
下表显示对应原pos2type属性的offset属性:
| pos2type | offset |
| center | -0.5,-0.5 |
| lefttop | 0,0 |
| leftmid | 0,-0.5 |
| leftbottom | 0,-1 |
| midtop | -0.5,0 |
| midbottom | -0.5,-1 |
| righttop | -1,0 |
| rightmid | -1,-0.5 |
| rightbottom | -1,-1 |
从上表可以看出,原来的pos2type属性只能是0.5的倍数,新的offset属性没有该限制。
使用pos2type可能更为直观,但是offset属性则更灵活。如果两个属性同时使用,只有最后一个属性有效。
注意:offset属性是2014.11.20才新增加的属性,pos2type属性的命名是为了兼容2014.11.20前的版本。
第十六篇:SWindow的布局属性pos2type及offset的更多相关文章
- 第五篇:在SOUI中使用XML布局属性指引(pos, offset, pos2type)
窗口布局的概念 每一个UI都是由大量的界面元素构成的,在Windows编程,这些界面元素的最小单位通常称之为控件. 布局就是这些控件在主界面上的大小及相对位置. 传统的布局一般使用一个4个绝对坐标来定 ...
- 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)
解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...
- 使用Typescript重构axios(二十六)——添加HTTP授权auth属性
0. 系列文章 1.使用Typescript重构axios(一)--写在最前面 2.使用Typescript重构axios(二)--项目起手,跑通流程 3.使用Typescript重构axios(三) ...
- Python之路【第十六篇】:Django【基础篇】
Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...
- 跟我学SpringCloud | 第十六篇:微服务利剑之APM平台(二)Pinpoint
目录 SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint优势 4. Pinp ...
- Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)
第十六篇(书中 6.10~7.3节 内容) 昨天搞定了6.9节,今天就从6.10节开始. 其实这个蛮简单的. 这是程序员模式. 这是设计师模式. 至此,6.10节 完毕. 开始 6.11节. 有点没营 ...
- Struts2(十六篇)
(一)Struts2框架概述 (二)Struts2配置文件 (三)Struts2的Action(简单讲解版) (四)Struts2的Action(深入讲解版) (五)Struts2处理结果管理 (六) ...
- Python自动化 【第十六篇】:JavaScript作用域和Dom收尾
本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走 ...
- Python全栈开发之路 【第十六篇】:jQuey的动画效果、属性操作、文档操作、input的value
01-动画效果 show 显示 概念:显示隐藏的匹配元素 语法:show(speed,callback) 参数: speed:三种预定速度之一的字符串('slow','normal','fast')或 ...
随机推荐
- 数据结构图文解析之:队列详解与C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
- Mysql 查询练习
Mysql 查询练习 ---创建班级表 create table class( cid int auto_increment primary key, caption ) )engine=innodb ...
- 标准C++之运算符重载和虚表指针
1 -> *运算符重载 //autoptr.cpp #include<iostream> #include<string> using namespace std ...
- ionic browser+ios头部高度显示问题
ionic项目在使用ionic build browser或者打包ios时如果设置头部高度 方法如下 .bar-header { padding:; height:; } .scroll-conten ...
- PHP 文件管理
主页面: <?php session_start(); $filename=""; if(!empty($_SESSION["lujing"])) { $ ...
- linux 命令行 光标移动技巧
linux 命令行 光标移动技巧 看一个真正的专家操作命令行绝对是一种很好的体验-光标在单词之间来回穿梭,命令行不同的滚动.在这里强烈建立适应GUI节目的开发者尝试一下在提示符下面工作.但是事情也不是 ...
- [Head First设计模式]抢票中的设计模式——代理模式
系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...
- JUnit4 中@AfterClass @BeforeClass @after @before的区别对比
JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation: @Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeCla ...
- Android通过名称找图片
开发中往往会遇到这种情况:在Drawable文件夹中有若干张相似的图片(这里的相似指的是不仅图片名称相似,用途也相似),现在要根据用户的某个操作选出其中的一张.例如,在类似微信语音功能的开发中,按住“ ...
- solr suggest智能提示配置
目录 配置文件 Java代码 遇到的问题 回到顶部 配置文件 solrconfig.xml <searchComponent name="suggest" class=&qu ...