首页 > 其他分享 >使用clayui制作界面的整套工程流程

使用clayui制作界面的整套工程流程

时间:2023-08-09 16:32:16浏览次数:42  
标签:动画 界面 整套 clayui 添加 窗体 testwin 选中


           今天介绍一下利用clayui制作界面的工作流程,包含以下内容:

1.   使用clayui编辑系统制作一个简单的界面,

           2.   添加鼠标消息响应,并制作对应的互动动画效果

           3.   输出界面文件,皮肤文件,布局文件

           4.   建立一个MFC的对话框工程,使用clayui开发库里提供的函数导入界面文件,皮肤与布局,并将界面显示在MFC的对话框里

           5.   添加消息响应函数,对各种界面消息进行处理

           先看一下最终效果:

          


           

皮肤.cncskin;点布局库标签,打开布局文件:布局001.cnclayoutedit

            2.   点击添加,添加一个窗体,取名为:testwin,

                                   然后选中刚创建的testwin,点击控件标签,再点击勾选框,为testwin添加一个子窗体,

勾选框,在左侧的属性栏里将标识修改为:back,

                                   将属性栏往下拉,找到“是否使用布局”,勾上,然后将布局名选为“flexwin",

                  此时,back有了一个”flexwin"的布局,现在可以在窗体设计区,调整back的高宽,使back与testwin完全重合,如下图:

                 

确保back是选中的情况下,可以在属性栏的最下面,修改“文字”以及“水平对齐”属性,来调整标题文字。

            在属性栏里找到“对齐方式”属性,将对齐方式修改为“中心对齐”,然后将“冻结”打勾,此时,back将不能被选中,只能选中testwin,而当你调整"testwin"的大小时,会发现back的尺寸会随着"testwin"的改变而改变,这就是“中心对齐”的效果。其他的对齐效果,大家可以自己操作体会一下。效果如下图:

                 

           3.     点击控件标签,选中testwin,添加2个文本,

                                       1个下拉框,修改标识为“年龄”

修改标识为“姓名”

修改标识为“确定”,“取消”,排列如下:

                  

                   编辑框的布局选择editbox,下拉框的布局选择combox,勾选框布局选择check1

                   选中文本后,可以直接键盘输入文字,

                   为了让文字的效果更好,可以给文字添加阴影:先选中文本,在左侧的属性栏里找到滤镜,选择“阴影”,目前只有阴影这一个滤镜,半径设为4,最大为5,x,y偏移设为4,刚开始阴影是透明的,需要点一下颜色,出现颜色修改滚动条,调节a,也就是透明度,为125%,颜色参数可以依照自己的喜好设置,如下图:

                   

                   

                    另外利用阴影滤镜还可以达到文字描边的效果,如下图:

                   

                   

                   4.   现在为界面添加一个互动动画效果,选中testwin,或者testwin的任何一个子窗口,然后点击动画层标签,可以看到动画层里只有有一个INIT,并且处于选中状态,

在clayui里,动画都需要有一个消息来触发,而每个窗体创建时,都会自动生成一个动画层,也就是INIT,意思就是初始化完毕后会触发的动画,在第一篇教程里,我们的动画都是创建在初始化的动画层里,所以测试的时候,窗体创建完毕就会立即播放动画。

                          好的,那么,现在我们为确定按钮添加一个鼠标滑进,鼠标滑出的动画,

选择“触发消息”为:onmousein,“消息类型”为:子FRAME消息,参数不填,“目标窗体”选为:确定,然后点“增加”,此时可以看到动画层里增加了一栏:onmousein%确定,同样为“确定”按钮添加一个onmouseout消息,如下图:

                         

                 动画层其实也可以看做是一个关键桢,现在可以点击刚创建的动画层,会发现窗体编辑区里发生了变化:窗体编辑区里除了testwin之外,其他子窗体都没有了,这是因为我们只是创建一个“空白关键桢”而已。

滑入”确定“按钮时,让按钮有一个放大的动画效果,而当鼠标滑出时,让按钮有一个缩小的动画效果。

”添加到动画层“,再在下拉框里选择 onm ouseout%确定,然后点击”添加到动画层“,现在,点击动画层列表里的onmousein%确定,onmouseout%确定,会发现窗体编辑区的testwin里出现了确定按钮,如下图:

                  

                  现在动画层里选中 onm ousein%确定 ,然后在窗体编辑区里选中“确定”按钮,按住shift 拖出一个动画对象,选中动画对象,在属性栏里将x缩放系数,y缩放系数修改为1.2,1.2,持续时间改为2000,缩放缓动方式改为弹性,并将忽略位移,忽略旋转,忽略颜色打上勾,如下图:

                  

                   现在点一下测试看一下,将鼠标移动到“确定”按钮上,“确定”按钮会有一个弹性的放大动画,这样,界面就有了那么一点交互的感觉了。

然后在窗体编辑区里选中“确定”按钮,按住shift 拖出一个动画对象,选中动画对象,在属性栏里将x缩放系数,y缩放系数修改为1,1,持续时间改为2000,缩放缓动方式改为弹性,并将忽略位移,忽略旋转,忽略颜色打上勾

                   现在可以再点测试,将鼠标移动到“确定”按钮上,然后再移出,“确定”按钮会有一个放大缩小的交互动画效果,界面变得更加动感了。

                   此时可以保存下testwin窗体,保存的时候会出现一个选择框,选择要保存的窗体,由于现在只有testwin一个窗体,直接点OK,然后点保存就可以了,如下图:

                  

                   按照相同的方式,可以为取消也添加一个这样的动画效果。

                   下面再实现一个点击“确定”后的动画效果:点击确定后,窗体上的控件都以动画方式分散开,并且渐渐变得透明。

                   先选中testwin,然后将动画层里的 “触发消息“ 选为LCLICK(左键点击消息),”消息类型“选为”子FRAME消息“,”目标窗体“选为 确定 ,点”增加“,动画层会增加一个 LCLICK%确定 的动画层,

                   选中动画层里的INIT,切换到INIT层,然后在窗体编辑区选中”姓名“,将”添加到动画层“下的下拉框选为”LCLICK%确定“,然后点”添加到动画层“,将”姓名“添加到 LCLICK%确定 这个动画层,依次将”年龄“,编辑框,下拉框,确定,取消,都添加到 LCLICK%确定 动画层,然后分别为子窗体添加动画对象,将动画对象的alpha值修改0%,并修改等待时间为别为:0,100,200,300,400,500,按照以下方式排列,如下图:

                  

                   现在可以点测试,点确定按钮,如果参数无误的话,将会看到所有控件依次向左飞出,并渐渐消失。

5.   将做好的窗体,皮肤,布局输出成clayui可以读取的资源文件

                  点输出,然后选择testwin,OK后填写文件名与后缀,这里对文件名与后缀没有硬性规定,可以随便写,我这里就输出成testwin.ci文件,如下图:

                 

                

                      输出皮肤文件:点皮肤库标签,点”导出皮肤“,保存文件名填写fui1.cncskinex,如下图:

                     

                     输出布局文件:点布局库标签,点”导出布局库“,保存成 fui1.cnclayout,如下图:

                    

                     操作无误的话,最后会得到testwin.ci,fui1.cncskinex,fui1.cnclayout,这三个文件

                     下面介绍如何在VC里使用clayui导入界面,并显示:


                     1.   新建一个MFC对话框工程,工程名为:Clayui_demo1,在工程里加入clayui的include和lib路径,将clayui_ext文件夹复制到工程目录,并将clayui_ext目录下的所有文件添加到工程里

clayui_ext下的类和函数是一些辅助类与函数,帮助你快速创建初始化clayui,以及减少一些代码量

                      为工程添加RTTI支持,并选择Debug MultiThreaded DLL(debug模式),或者MultiThreaded DLL( Release模式),如下图:

                     

                     

                      在stdafx里加上:#include "clayui_ext/config_clayui.h"

                      LINK里添加:clayui_D.lib imm32.lib

                      2.   在CClayui_demo1Dlg里添加如下变量:

                     

                      CClayuiManager负责clayui的初始化,以及销毁

                      CClayuiRootWin负责管理clayui的窗口,绘图区,消息循环

                      3.   在CClayui_demo1Dlg::OnInitDialog()里添加如下代码:

                            

这里可以看到,m_clayuimgr载入了皮肤,布局文件,接在路径名后面的参数是皮肤和布局的名称,名称可以在编辑器里看到,如下图:

                            

               

里设置了绘图区的大小,为800,600,后面的islayeredwindow如果设为1,会将当前的MFC窗口变成一个layeredwindow,效果会更好

注意:设成layeredwindow时,需要将MFC的对话框的Border设为NONE,如下图:

                            

后面的看代码就很明白了,先创建一个clayui的窗口,然后载入我们刚做好的testwin.ci界面文件,然后将窗口指针传给m_rootwin.

CTestWin是一个派生自CLAYUI_BFRAME的自定义类。

4.   为CClayui_demo1Dlg添加一个WM_TIMER消息处理函数,并重载PreTranslateMessage(MSG* pMsg) ,代码如下:

                    

view plain  
  
1. void CClayui_demo1Dlg::OnTimer(UINT
2. {  
3. // TODO: Add your message handler code here and/or call default
4.     m_rootwin.Step(GetSafeHwnd());  
5.     CDialog::OnTimer(nIDEvent);  
6. }  
7.   
8. BOOL
9. {  
10. // TODO: Add your specialized code here and/or call the base class
11. this, pMsg->message, pMsg->lParam, pMsg->wParam);  
12. return
13. }



                       这时候可以点f5来运行一下程序,别忘记将clayui_d.dll,clayui.dll,testwin.ci,fui1.cnclayout,fui1.cncskinex与执行程序放到一个目录,如果没有意外的话,将会出现刚才做好的界面,将鼠标移动到“确定”按钮上试试,并点击“确定”按钮试试,是不是有动感效果呢?

                      5.   添加消息处理函数,clayui的消息处理函数与MFC类似,在MFC里是重载PreTranslateMessage函数,那么在clayui里则是重载UserAction(CLAYUI_MSGINFO *msginfo, int x, int y, DWORD msg)函数

UserAction(CLAYUI_MSGINFO *msginfo, int x, int y, DWORD msg)函数,如下


view plain  
  
1. void CTestWin::UserAction(CLAYUI_MSGINFO *msginfo, int x, int y, DWORD
2. {  
3. if(msg == CLAYUI_LCLICK)  
4.     {  
5. this);  
6. if(FrameNamecmp(frame, "取消"))  
7.         {  
8.             CClayui_demo1Dlg* dlg = (CClayui_demo1Dlg*)AfxGetApp()->m_pMainWnd;  
9.             dlg->m_rootwin.m_isquit = TRUE;  
10.             PostQuitMessage(0);  
11.         }  
12.     }  
13. }


                          代码很简单,可以看出是响应了LCLICK消息,

                          CLAYUI_FRAME* frame = msginfo->GetFrame(this);  这句是得到消息的来源窗口,然后利用窗口的标识来判断是哪个子窗口发来的消息,这里判断是否是“取消”按钮发送的消息,如果是,就结束整个程序。

                           然后,我们用代码来为testwin加上一个初始动画,演示下使用代码来创建动画效果。先为CTestWin重载LoadFromMem(BYTE *filebuffer, DWORD filesize, BOOL isMemMgr)函数,如下:


view plain  
  
1. void CTestWin::LoadFromMem(BYTE *filebuffer, DWORD filesize, BOOL
2. {  
3.     CLAYUI_BFRAME::LoadFromMem(filebuffer, filesize, isMemMgr);  
4.   
5.     AlphaTo(0);  
6.     ScaleTo(0, 0, 1);  
7.   
8. "twscale", this, 1000, 0, 1, 1, this, 0);  
9. "twalpha", this, 1000, 0, 100, this, 0);  
10. }


                         当CTestWin加载完布局后,会调用

LoadFromMem 函数

LoadFromMem函数里,先将窗口的透明值设为0,x,y缩放系数设为0,然后为CTestWin添加缩放动画与alpha动画,让CTestWin有一个渐显,放大的动态效果。

                         在config_clayui.h里还有其他的SetXXXAnimation系列的函数,这里说明一下里面的参数:

CLAYUI_BFRAME* parent:这个是指动画对象创建以后,会放到哪个窗口里管理,如果parent被销毁了,动画对象也会被销毁。

CLAYUI_FRAME* target:目标窗口,这里注意一下,parent和target可以是2个毫不相干的窗口,parent只是管理动画,而目标窗口是发生动画的窗口。

short isdie:动画播放完毕后,是否销毁目标窗口

short isendmsg:动画播放完毕后,是否发送一个动画播放完毕的消息CLAYUIMSG_ANIMATIONEND给target的父窗口,这里再说明下,target的父窗口是target->GetParent(),与传给动画的parent参数没有任何关系。

short loopmode:动画的循环方式:0-只播放一次,1-循环,2-定格在最后一桢

                         好的,这次就讲解到这里了,下次会继续介绍clayui的各种功能。


标签:动画,界面,整套,clayui,添加,窗体,testwin,选中
From: https://blog.51cto.com/u_130277/7022318

相关文章

  • 使用虚拟界面的方式,解决“xhost: unable to open display.
    背景最近在做一个项目,需求是将windows开发的ocx控件移植到linux。该需求的解决方案想的是:在linux中部署docker,在docker中安装wine容器,通过wine容器启动windwos程序。由于ocx控件依赖windows的控件,因此在使用wine命令时,需要传入$DISPLAY。一开始,在给linux安装好GUI界面后,按照上......
  • 界面控件DevExpress WPF Chart组件——拥有超快的数据可视化库!
    DevExpressWPF Chart组件拥有超大的可视化数据集,并提供交互式仪表板与高性能WPF图表库。DevExpressCharts提供了全面的2D/3D图形集合,包括数十个UI定制和数据分析/数据挖掘选项。PS:DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。......
  • zabbix 基于 Web 界面的提供分布式系统监视
    zabbix基于Web界面的提供分布式系统监视,能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。目录一、zabbix概述二、监控原理三、zabbix组件四、zabbix架构五、zabbix工作原理六、部署zabbix七、总结  ......
  • 使用Blazor构建现代的Web界面
    当谈到构建现代的Web界面时,Blazor已经成为一个备受关注的技术。Blazor是一个由微软开发的.NET平台上的Web框架,它允许您使用C#编程语言来构建交互式、现代化的前端应用程序。在本篇博客中,我们将探讨如何使用Blazor来构建现代的Web界面,并附上一些示例代码来帮助您入门。......
  • wordpress 插件 woocommerce对billing address和account details界面进行修改
    wordpress插件woocommerce高级使用对界面结构进行修改:参考HowToEditFiles只修改部分fieldbillingaddressadd_filter('woocommerce_billing_fields',function($billing_fields){unset($billing_fields['billing_email']);return$billing_fields;},10......
  • JavaSwing界面跳转技巧
    JavaSwing界面跳转技巧在JavaSwing应用程序中实现流畅的用户界面是非常重要的一部分。一个好的用户界面不仅需要美观的设计,还需要良好的交互体验。其中,界面跳转是用户体验的重要组成部分。本文将为你介绍JavaSwing界面跳转技巧,帮助你设计出流畅且易用的用户界面。JavaSwing界面......
  • 浏览器打开首先是百度的界面,该如何修改
    浏览器打开首先是百度的界面,该如何修改打开电脑管家选择上网主页保护提供一些可用的主页bing:https://www.bing.com/Google:https://www.google.com/......
  • xray安装,图形化界面以及和bp联动
    这两天学的乱起八糟的,本来是学反序列化,奈何太穷只能白嫖别人的ctfshow,做着做着发现环境没了掉线了,加上php基础不太好断断续续的没学啥玩意,就先放一边瞅了瞅php基础,顺带补之前互联网协议啥的作业也忘了咋回事就想起来装xray了直接下载或者是下载之后传上去:https://github.com/cha......
  • 在下方任务栏处可以看到软件启动但是在笔记本屏幕上看不到软件界面
    问题:在公司笔记本连接了显示器,到家后打开代码编辑器,在任务栏显示打开了,但总是看不到界面。解决方法:用鼠标在任务栏选中打不开的软件,ALT+空格,弹出的窗口选择:最大化,即可看到正常的软件界面。 ......
  • 如何退出scla命令行界面和scala常用命令
    对于初学者来说,有些东西要一点点来,尤其是基础,不能着急,无论你是小白,还是大白,有一些基础也好,多看基础命令对你来说都会有帮助的一常用命令scala>:helpAllcommandscanbeabbreviated,e.g.,:heinsteadof:help.:edit<id>|<line>edithistory:help[command]......