1.关闭按钮
采用CSS!提供的behavior实现窗口关闭功能,不需要在C++代码中处理关闭事件
div

{
     behavior: sys-ctl;
     -sys-ctl-pos: close;
}

2.文字点击展开和折叠功能
点击某个文字,下面的子项展开,再次点击子项隐藏。使用click!来控制点击事件,需要将behavior定义为button
如果div canExpand的show为”true”,则设置div list隐藏,反之则设置list显示

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        [hidden]
        {
             display:none;
        }
        .canExpand
        {
            behavior:button;
            click!:(self.show=="true")?(self.parent().$(.list).hidden = null,self.show=null) # (self.parent().$(.list).hidden = true, self.show="true");
        }
    </style>
</head>
<body>
    <div>
        <div class="canExpand" show=true>点击</div>
        <div .list hidden>
            <div .item>子项1</div>
            <div .item>子项2</div>
            <div .item>子项3</div>
            <div .item>子项4</div>
        </div>
    </div>
</body>
</html>

3.输入框提示文字
focus-on! 获取焦点时判断输入框文字是否为“请输入文字”,是则清除文字
focus-off!: 光标焦点离开输入框时,判断输入框是否为空,是则设置文字为“请输入文字”。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        [hidden]
        {
             display:none;
        }
        .TextPrompt
        {
            color:#C9C9C9;
            focus-on!:(self:value=="请输入文字") ? (self:value="") # ();
            focus-off!:(self:value=="") ? (self:value="请输入文字") # ();
        }
    </style>
</head>
<body>
    <div>
        <input class="TextPrompt" value="请输入文字"></input>
    </div>
</body>
</html>

4.多个同一行显示
将父div的style设置为"display:inline”确实可以让几个子div在一行显示,但是子div内不能再嵌套div
但是如果将父div设置为flow:horizontal 就可以了。
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        .oneLine
        {
            flow:horizontal;
            width:50px;
        }
    </style>
</head>
<body>
    <div class="oneLine">
        <div>1</div>
        <div>2</div>
        <div>3</div>                                                                                                                                                                                                                                                                                             
    </div>
</body>
</html>

5.find_first 查找元素
// Find first child element matching the selector 
// :root is the element itself
template<class char_t>  HELEMENT find_first( const char_t* selector, ... ) const
为htmlaout::dom::element的成员函数,将会在当前dom对象的子元素里查找。

6.dom::element 属性、状态标识、样式访问
element.属性                  用来访问元素的DOM属性
element:状态标识          用来访问dom元素,鼠标滑过、鼠标点击、获取焦点等状态变化的标识
element::样式属性         访问dom元素的样式属性

$(selector)          返回选中的元素集
$1(selector)       返回符合条件的第一个元素

7.dom::element 的释放
需要先调用detach(),进而调用HTMLayoutDetachElement() 从父节点及Dom树上移除该节点,如果该节点的引用计数为0,则该元素将被销毁,再调用destroy()销毁元素。

8.HTMLLayout最小化按钮复位

最小化按钮定义通常类似如下:
.min
{
    right:30;
    background-image:url(1.png);
    behavior: sys-ctl;
    -sys-ctl-pos: min;
}
.min:hover
{
    background-image:url(2.png);
}
.min:active
{
    background-image:url(3.png);
}
通常使用3张图片描述一个Button给用户,展示 鼠标不在按钮上|划过按钮|点击按钮 三种状态
behavior描述该按钮为一个最小化按钮,也就是主窗体最小化是由HTMLLayout来实现,而不是在C++中实现,由于主窗体最小化时,DIV是无法得知鼠标已经离开,所以最小化再恢复之后,最小化按钮安装为Active,和鼠标点击最小化按钮是一样。
在MFC中如果使用图片拼接展示按钮时也会遇到类似的问题,但是可以用定时器判断鼠标是否离开按钮来复位按钮状态。
在HTMLLayout中,该问题解决办法为:
在CSS中重新定义div min为 behavior:button,然后在C++工程中进行按钮Click事件中进行处理:
先ShowWindow(SW_MINIMIZE) 让主窗体最小化,然后将min div的active状态清除
HLDOM_RESULT r = HTMLayoutSetElementState(minBtn, 0, STATE_ACTIVE,  TRUE);

HTMLayout使用心得的更多相关文章

  1. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  2. NoSql数据库使用半年后在设计上面的一些心得

    NoSql数据库这个概念听闻许久了,也陆续看到很多公司和产品都在使用,优缺点似乎都被分析的清清楚楚.但我心里一直存有一个疑惑,它的出现究竟是为了解决什么问题? 这个疑惑非常大,为此我看了很多分析文章, ...

  3. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 我的MYSQL学习心得(三) 查看字段长度

    我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  5. 我的MYSQL学习心得(四) 数据类型

    我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(五) 运 ...

  6. 我的MYSQL学习心得(五) 运算符

    我的MYSQL学习心得(五) 运算符 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据 ...

  7. 我的MYSQL学习心得(六) 函数

    我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  8. 我的MYSQL学习心得(七) 查询

    我的MYSQL学习心得(七) 查询 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...

  9. 我的MYSQL学习心得(八) 插入 更新 删除

    我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...

随机推荐

  1. UIkit的confirm,好看点

    一,官方推荐的样码. <button type="button" class="uk-button" onclick="UIkit.modal. ...

  2. hdu 1850 Being a Good Boy in Spring Festival 博弈论

    求可行的方案数!! 代码如下: #include<stdio.h> ]; int main(){ int n,m; while(scanf("%d",&n)&a ...

  3. map的详细用法

     map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...

  4. 初识io流条件状态

    一  流状态    C++中的输入输出系统负责记录每一个输入输出操作的结果信息,这些当前的状态信息被包含在io_state类型的对象中.io_state是一个枚举类型(就像open_mode一样),以 ...

  5. *[hackerrank]Maximizing XOR

    https://www.hackerrank.com/contests/w1/challenges/maximizing-xor/ 找了半天规律,答案竟然是暴力,伤感.我找到的方法是利用规律2^x X ...

  6. iOS 开发中遇到的问题

    1. 关于纠结很久的KVO崩溃问题,其真正原因是,在删除roomItem的KVO之前,将这个对象已经赋值为nil,所以实际上并没有删除他的observer,因此而崩溃:长时间纠结的原因是受.cxx_d ...

  7. C++:函数模板与模板函数

    6.1 模板的概念 C++允许用同一个函数定义函数,这些函数的参数个数和参数类型不同.例如求最大值的max函数, int max(int x,int y) {       return (x>y ...

  8. CF198 D2

    B. Maximal Area Quadrilateral 题意:在N个点中构建四边形,使得四边形面积最大,且不自交. 分析:不自交四边形可以剖分成两个三角形,因此可以在O(N^2)内枚举对角线,然后 ...

  9. PCL—低层次视觉—点云滤波(基于点云频率)

    1.点云的频率 今天在阅读分割有关的文献时,惊喜的发现,点云和图像一样,有可能也存在频率的概念.但这个概念并未在文献中出现也未被使用,谨在本博文中滥用一下“高频”一词.点云表达的是三维空间中的一种信息 ...

  10. spring-boot-quartz, 依赖spring-boot-parent

    spring-boot-quartz, 依赖spring-boot-parent spring-boot Easyui Quartz 项目启动后输入:http://localhost/ 数据库文件:  ...