惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LangChain Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Microsoft Azure Blog
Microsoft Azure Blog
N
Netflix TechBlog - Medium
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
WordPress大学
WordPress大学
U
Unit 42
腾讯CDC
D
Docker
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
Vercel News
Vercel News
I
InfoQ
Jina AI
Jina AI
爱范儿
爱范儿
宝玉的分享
宝玉的分享
博客园 - Franky
G
Google Developers Blog
P
Proofpoint News Feed

博客园 - 健忘猪

Skynet Pomelo Erlang Elixir 的认识 lua中得栈 Linux多线程编程(不限Linux)【转】 tolua++实现分析 cocos2dx的lua绑定 cocos2d ios 环境搭建 导出 C/C++ API 给 Lua 使用[转] C++中实现回调机制的几种方式[转] 0xcdcdcdcd ,0xdddddddd ,0xfeeefeee ,0xcccccccc ,0xabababab threading COM技术内幕(笔记) UI库阶段性进展(button在文本对齐的基础上增加文本偏移让文本位置更精准) UI库阶段性进展(完成textrender的文字align) UI库阶段性进展(完成文字列表,样式列表(样式列表可继承)) UI库阶段性进展(按钮初具雏形) 关于一个GetLevelDesc函数 的认知问题 UI库阶段性进展(增强图元功能) UI库阶段性进展(增加从xml中某一结点初始化窗口功能) UI库阶段性进展
UI库阶段性进展(把背景图元设定为Wnd基类的成员)
健忘猪 · 2012-12-13 · via 博客园 - 健忘猪

  把背景图元设定为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维坐标是准备好的;