• 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维坐标是准备好的;

  • 相关阅读:
    android界面基本属性
    iOS请求webservice
    图片在鼠标经过时变大
    控制字体大小,em与px的区别与应用
    IE的另类CSS hack,条件注释
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    CSS实现文字压在边线上的效果,fieldset与legend
    每个.NET 开发人员应该下载的十个必备工具
    css做出丰富的Tooltips
    .NET牛人应该知道些什么?
  • 原文地址:https://www.cnblogs.com/dwjaissk/p/2815637.html
Copyright © 2020-2023  润新知