UI库阶段性进展(把背景图元设定为Wnd基类的成员)

本文介绍了控件背景配置的方法,支持纯色、单张背景图及九宫格拉伸背景图三种方式,并展示了如何通过设定纹理坐标实现按钮等多态控件的不同状态背景。

  把背景图元设定为Wnd基类的成员 主要是为了所有控件配置背景方便(基本所有的控件都是有背景的);

  下面是读取背景配置的示例代码:

        ATT_STRING(ATT_BG_IMG, m_strBgImg)
        ATT_COLOR(ATT_BG_COLOR, m_dwBgColor)
        ATT_CUSTOM(ATT_BG_MODE, OnSetBgMode)
        ATT_CUSTOM(ATT_BG_STRETCH, OnSetBgStretch)

 

      背景支持三种方式,纯色、单张背景图,九宫格拉伸的背景图;

      通过给wnd基类设定一个colorblockrender和一个texturerender来实现三种背景图;

      button等多态(包括disable状态)的控件,通过上次实现的texture设定纹理坐标实现;

 

      由于支持三种方式,在wnd基类中设定三个虚方法:

	virtual BOOL          InitColorBG();
	virtual BOOL          InitImgBG();
	virtual BOOL          InitNrgBG();

  分别初始化三种背景,子类控件可以重载实现自己的初始化过程,例如button在初始化的时候背景是一个序列的状态都在一张图中,

我们就可以重载InitImgBG的方法,然后再重载的方法中指定初始化的纹理坐标,示例代码如下:

BOOL CColorfulButton::InitImgBG()
{
    ...... 

    m_pBgTextureRender->SetWndRect(&m_rc);
    if(m_bDisable)
        m_pBgTextureRender->SetTextureUVByRatio(4,4);
    else
        m_pBgTextureRender->SetTextureUVByRatio(1,4);
    ......

    AddChildNode(dynamic_cast<CColorfulTreeNode *>(m_pBgTextureRender));

    return TRUE;
}

 

 

//根据pos指定计算控件位置,更新2维和3维空间的坐标
BOOL CalcWndPosition();

由于initialize方法是虚方法,wnd的实现中调用CalcWndPosition,由于render的消息是从后向前发,所以不能先调用积累wnd的initialize方法,

所以需要将该方法放到外部调用,以保证映射的3维坐标是准备好的;

 

 

 

 

转载于:https://www.cnblogs.com/dwjaissk/archive/2012/12/13/2815637.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值