clayui界面库系列教程之二:详解CLAYUI_FRAME

CLAYUI_FRAME类参考

公有成员

virtual void SetBmpEffect (short type, short radius, short x, short y, short r, short g, short b, short a)
 设置滤镜.
BOOL IsEnable ()
 判断frame是否响应用户的交互操作.
void GetClipRect (NC_RECT_INT *cliprect)
 得到裁减矩形.
virtual void GetFrameValue (CLAYUI_VARIANT *var)
 返回frame的用户输出值.
void Die ()
 这个很好理解,就是让窗口销毁.
void DistbMsgToReceivers (CLAYUI_MSG *msg)
 将消息发送给接收者.
void SetMsgReceiver (CLAYUI_FRAME *frame)
 设置消息接收窗口.
void SetFrameID (DWORD frameid)
 强制设置frame的ID.
DWORD GetFrameID ()
 得到frame的ID.
void GetRelativeMatrix (CNC_MATRIX *m)
 得到自身的变换矩阵.
void GetScale (float &x, float &y)
 得到frame的缩房系数.
void GetAngle (float &angle)
 得到frame的旋转角度.
void GetTrans (float &x, float &y)
 得到frame的坐标.
void GetOri (int &x, int &y)
 得到frame的中心点坐标.
UINT GetFrameFlags (UINT flag)
 得到frame的窗口设置参数.
void SetFrameFlags (UINT flagtype, short flagvalue)
 设置frame的窗口设置参数.
void SetClip (int isclip, int left, int top, int width, int height)
 设置窗口的裁减矩形.
virtual void UpdateSkin ()
 更新皮肤.
virtual void Clear ()
 清除窗口里的皮肤和动画资源.
void Enable (BOOL isEnable)
 设置窗口的Enable状态.
virtual void SetOri (FIXEDT x, FIXEDT y)
 设置窗口的中心点坐标.
BOOL GetIsTransform ()
 获取窗口是否需要被更新.
virtual void SetIsTransform (BOOL isTransform)
 设置窗口需要被更新.
BOOL GetIsChildTransform ()
 获取子窗口是否发生了更新.
void SetParent (CLAYUI_BFRAME *bframe)
 强制设置父窗口.
void SetDragMode (int dragmode)
 设置窗口是否可以被鼠标拖拽.
CLAYUI_BFRAME * GetParent ()
 得到父窗口指针.
virtual void Init (CLAYUI_BFRAME *parent, HL_GRAPHICS draw, BOOL iscreateIndex)
 初始化.
virtual int OnKeyDown (CLAYUI_CHAR n_char, UINT n_repcnt, UINT flags)
 响应键盘消息.
virtual int OnLButtonUP (int x, int y, int flag)
 响应左键弹起.
virtual int OnRButtonUP (int x, int y, int flag)
 响应右键弹起.
virtual int OnMouseMove (int x, int y, int flag)
 响应鼠标滑过.
virtual int OnLButtonDown (int x, int y, int flag)
 响应左键按下.
virtual int OnRButtonDown (int x, int y, int flag)
 响应右键按下.
void SetIdname (char *idname)
 设置frame的名称标识.
BOOL PtInFramerect (int x, int y)
 判断点是否落在窗口内.
BOOL PtInCliprect (int x, int y)
 判断点是否落在裁减矩形内.
CLAYUI_FRAME_ITEM * AddFrameItem (HL_GITEM gitem, GRAPHICS_EXTINFO *gextinfo, int x, int y, int angle, float xscale, float yscale, float alpha)
 加入一个皮肤对象.
virtual void SetFrameSize (int width, int height)
 设置frame的高度和宽度
void GetFrameSize (int &width, int &height)
 得到frame的高度和宽度
void AlphaTo (int alpha)
 将frame的透明度设置到alpha
void ScaleTo (float x, float y)
 将frame的缩放系数设置为x, y
void RotateTo (float angle)
 将frame的旋转角度设置为angle
void MoveTo (float x, float y)
 将frame移动到坐标(x, y)
void SetColorTrans (int amult, int rmult, int gmult, int bmult, int aadd, int radd, int gadd, int badd)
 设置frame的颜色变换
virtual void Update ()
 每桢对frame进行更新

友元

class CLAYUI_BFRAME
class CLAYUI_FRAME_ITEM
class CLAYUI_TTEXT

成员函数文档

CLAYUI_FRAME_ITEM* CLAYUI_FRAME::AddFrameItem(HL_GITEM gitem,
  GRAPHICS_EXTINFO * gextinfo,
  int x,
  int y,
  int angle,
  float xscale,
  float yscale,
  float alpha 
 )  

加入一个皮肤对象.

HL_GITEM gitem: 图形对象

GRAPHICS_EXTINFO* gextinfo:如果图形对象是一个栅格图形,并需要只显示其中某个区域(left, top, right, bottom)

那么gextinfo应该按照如下方式初始化

GRAPHICS_EXTINFO* exinfo = new GRAPHICS_EXTINFO; exinfo->gwidth = right - left; exinfo->gheight = bottom - top; exinfo->bmpsrcinfo = new GRAPHICS_BMP_SRCINFO; exinfo->bmpsrcinfo->m_colorkey = 0; exinfo->bmpsrcinfo->m_srcx = left; exinfo->bmpsrcinfo->m_srcy = top;

在其他情况,gextinfo的值是NULL

x, y: 皮肤在窗口里的坐标

angle, xscale, yscale, alpha: 皮肤的旋转角度,缩放系数,透明度

 


 

void CLAYUI_FRAME::AlphaTo(int alpha) 

将frame的透明度设置到alpha

alpha取值范围为0-100

 


 

void CLAYUI_FRAME::Die( ) 

这个很好理解,就是让窗口销毁.

需要注意的是,Die()函数调用后,窗口并不会马上被delete掉,只是变成了“准备销毁”的状态

在CLAYUI_HLG_Draw里,窗口会被真正销毁

 


 

void CLAYUI_FRAME::DistbMsgToReceivers(CLAYUI_MSG * msg) 

将消息发送给接收者.

关于CLAYUI_MSG的详细说明,请查看clayui的消息机制说明

 


 

void CLAYUI_FRAME::Enable (BOOL isEnable) 

设置窗口的Enable状态.

Enable状态决定frame是否响应鼠标和键盘消息的

 


 

void CLAYUI_FRAME::GetClipRect (NC_RECT_INT * cliprect) 

得到裁减矩形.

返回的裁减矩形是以frame的自身坐标系为参考,即以frame的左上角为原点

 


 

void CLAYUI_FRAME::GetFrameSize(int & width,
  int & height 
 )  

得到frame的高度和宽度

 


 

virtual void CLAYUI_FRAME::GetFrameValue(CLAYUI_VARIANT * var)[virtual]

返回frame的用户输出值.

在clayui里,每个窗口都有一个用户输出值,例如:

CLAYUI_TTEXT的输出值为一串字符串

CLAYUI_CHECKBOX的输出值为check状态

这个主要是复合型控件会用到的一个功能

 


 

BOOL CLAYUI_FRAME::GetIsTransform ( ) 

获取窗口是否需要被更新.

当窗口发生了位移,旋转,缩放,颜色,宽高改变时,更新状态将被设置为TRUE

void CLAYUI_FRAME::GetOri (int & x,
  int & y 
 )  

得到frame的中心点坐标.

frame的中心点坐标是相对于frame的左上角坐标的偏移值

 


 

virtual void CLAYUI_FRAME::Init (CLAYUI_BFRAME * parent,
  HL_GRAPHICS draw,
  BOOL iscreateIndex 
 ) [virtual]

初始化.

parent: 父窗口指针 draw: 绘图设备 iscreateIndex: 目前没有作用的参数

 


 

BOOL CLAYUI_FRAME::IsEnable ( ) 

判断frame是否响应用户的交互操作.

返回值是FALSE时,frame是不响应鼠标和键盘消息的

 


 

void CLAYUI_FRAME::MoveTo (float x,
  float y 
 )  

将frame移动到坐标(x, y)

 


 

virtual int CLAYUI_FRAME::OnLButtonDown (int x,
  int y,
  int flag 
 ) [virtual]

响应左键按下.

详细请查看

参见: OnLButtonUP(int x, int y, int flag)

virtual int CLAYUI_FRAME::OnLButtonUP (int x,
  int y,
  int flag 
 ) [virtual]

响应左键弹起.

响应鼠标消息的函数,如果用户重载了此函数,请在函数最后再调用CLAYUI_FRAME::OnLButtonUP(int x, int y, int flag);

x,y: 鼠标的坐标在clayui绘图区域内的坐标 flag: clayui系统的参数,用户不能更改

 


 

virtual int CLAYUI_FRAME::OnMouseMove (int x,
  int y,
  int flag 
 ) [virtual]

响应鼠标滑过.

详细请查看

参见: OnLButtonUP(int x, int y, int flag)

virtual int CLAYUI_FRAME::OnRButtonDown (int x,
  int y,
  int flag 
 ) [virtual]

响应右键按下.

详细请查看

参见: OnLButtonUP(int x, int y, int flag)
virtual int CLAYUI_FRAME::OnRButtonUP (int x,
  int y,
  int flag 
 ) [virtual]

响应右键弹起.

详细请查看

参见: OnLButtonUP(int x, int y, int flag)


BOOL CLAYUI_FRAME::PtInCliprect (int x,
  int y 
 )  

判断点是否落在裁减矩形内.

x, y是clayui绘图区域的坐标

 


 

BOOL CLAYUI_FRAME::PtInFramerect (int x,
  int y 
 )  

判断点是否落在窗口内.

x, y是clayui绘图区域的坐标

 


 

void CLAYUI_FRAME::RotateTo (float angle) 

将frame的旋转角度设置为angle

 


 

void CLAYUI_FRAME::ScaleTo (float x,
  float y 
 )  

将frame的缩放系数设置为x, y

 


 

virtual void CLAYUI_FRAME::SetBmpEffect (short type,
  short radius,
  short x,
  short y,
  short r,
  short g,
  short b,
  short a 
 ) [virtual]

设置滤镜.

short type: 滤镜的类型,可以取的值为

TYPE_BMPEFT_NONE:无滤镜

TYPE_BMPEFT_NONE:阴影滤镜,阴影滤镜只对本身投射阴影,对子FRAME不产生作用

short radisu: 滤镜的模糊半径

short x, y: 滤镜相对于frame的位移

short r,g,b,a: 滤镜的颜色

 


 

void CLAYUI_FRAME::SetClip (int isclip,
  int left,
  int top,
  int width,
  int height 
 )  

设置窗口的裁减矩形.

裁减矩形是以frame的自身坐标系为参考,即以frame的左上角为原点

 


 

void CLAYUI_FRAME::SetColorTrans (int amult,
  int rmult,
  int gmult,
  int bmult,
  int aadd,
  int radd,
  int gadd,
  int badd 
 )  

设置frame的颜色变换

颜色变换的公式为dest = src * mult + add

mult的取值范围为0-100

add的取值范围为-255-255

其中a, r, g, b, 前缀分别代表:透明度,红色分量,绿色分量,兰色分量

 


 

void CLAYUI_FRAME::SetDragMode (int dragmode) 

设置窗口是否可以被鼠标拖拽.

0:不支持拖拽

1:可以被鼠标左键拖拽

2:可以被鼠标右键拖拽

 


 

void CLAYUI_FRAME::SetFrameFlags (UINT flagtype,
  short flagvalue 
 )  

设置frame的窗口设置参数.

clayui的窗口有如下设置参数:

CLAYUI_FS_KEYINPUT: 是否接收键盘消息,默认是不接收

以下为在不同窗口(不包括父窗口)间传递消息的设置参数//

这里有点复杂,如果不需要在窗口间转发消息或者自己处理的,可以略过

这里对clayui的消息简单说明一下,在clayui里,每个frame都会给自身以及父窗口发送以下7个基本消息

CLAYUI_ONLBUTTONDOWN:鼠标左键按下消息

CLAYUI_ONLBUTTONUP:鼠标左键弹起消息

CLAYUI_ONMOUSEIN:鼠标滑入消息

CLAYUI_ONMOUSEOUT:鼠标滑出消息

CLAYUI_ONMOUSEMOVE:鼠标滑动消息

CLAYUI_ONRBUTTONDOWN:鼠标右键按下消息

CLAYUI_ONRBUTTONUP:鼠标右键弹起消息

这7个消息以下简称基本消息

CLAYUI_FS_SENDMSG_RULE_AS:转发所有非基本消息的消息

CLAYUI_FS_SENDMSG_RULE_SES:转发自身的基本消息

CLAYUI_FS_SENDMSG_RULE_CSES:转发子FRAME的基本消息

CLAYUI_FS_SENDMSG_RULE_OTHER:转发由别的窗口(非子窗口)转发的消息

窗口初始化时,默认CLAYUI_FS_SENDMSG_RULE_AS是开启的,其它3个都是关闭的

//

 


 

void CLAYUI_FRAME::SetFrameID (DWORD frameid) 

强制设置frame的ID.

在clayui里,每个窗口都有一个ID,这个ID仅在不同窗口(不包括父窗口)间传递消息时发挥作用

在一个frame被加到其父窗口中时,父窗口会给这个frame自动分配一个ID,所以用户并不用自己设置

父窗口会根据子frame的名称标识(idname)分配一个唯一的ID并保存这个对应关系,也就是说,当这个frame被销毁了,下次仍然以原来的名称标识加入到父窗口时,分配的ID仍然是原先的ID

 


 

virtual void CLAYUI_FRAME::SetFrameSize (int width,
  int height 
 ) [virtual]

设置frame的高度和宽度

 


 

void CLAYUI_FRAME::SetIdname (char * idname) 

设置frame的名称标识.

每个frame在其父frame里的名称标识都是唯一的,

 


 

void CLAYUI_FRAME::SetMsgReceiver (CLAYUI_FRAMEframe) 

设置消息接收窗口.

这个函数用于在不同的窗口间传递消息,frame会将自身的一部分消息发送给接收窗口

只有在发送方和接收方都有父窗口的情况下,此函数才有效,当然,主窗口是个例外,因为主窗口没有父窗口

frame会默认将自身消息发送给父窗口,所以,不用设置父窗口为消息接收窗口

关于发送消息的详细情况,请查看

参见: SetFrameFlags()

virtual void CLAYUI_FRAME::SetOri (FIXEDT x,
  FIXEDT y 
 ) [virtual]

设置窗口的中心点坐标.

frame的中心点坐标是相对于frame的左上角坐标的偏移值

 


 

void CLAYUI_FRAME::SetParent (CLAYUI_BFRAME * bframe) 

强制设置父窗口.

非特殊情况,不建议使用

 


 

virtual void CLAYUI_FRAME::Update ( )[virtual]

每桢对frame进行更新

 


 

virtual void CLAYUI_FRAME::UpdateSkin ( )[virtual]

更新皮肤.

如果更改了当前的皮肤槽,需要调用主窗口的UpdateSkin()来更新皮肤


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值