zoukankan      html  css  js  c++  java
  • 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维坐标是准备好的;

  • 相关阅读:
    NSString属性声明中的copy和retain区别
    Xcode6无法安装VVDocumenter插件的解决方法
    Xcode好用插件
    REVEAL APP for IOS 永久试用
    Foundation框架 ---- 结构体
    Foundation框架集合 ---- NSArray和NSMutableArray
    《 算法分析与设计》 实验一-分治算法
    B-浮点常量问题
    Servlet 404原因
    小C语言--词法分析程序
  • 原文地址:https://www.cnblogs.com/dwjaissk/p/2815637.html
Copyright © 2011-2022 走看看