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

  • 相关阅读:
    针式PKM的主要画面的功能简介
    程序员早日走向架构师的利器:针式PKM V8.01发布
    如何经营你的知识资产
    一般软件工程师怎样拥有更多的资产
    剪贴板的使用技巧
    不要给自己找不“深入学习”的理由了
    《小论无所事事》
    全国(1977年~2011年)历年参加高考人数和录取人数
    Sql Server中,文件批量重命名
    HTML斜线表头
  • 原文地址:https://www.cnblogs.com/dwjaissk/p/2815637.html
Copyright © 2011-2022 走看看