DuiLib : CControlUI->SetAttribute(L"pos"后, 属性不生效的问题
来源:互联网 发布:商业系统域名 编辑:程序博客网 时间:2024/05/29 04:44
今天在重构一段遗留的UI代码, 原来是3个200行的函数, 里面95%的代码都相同. 不同的地方都可以提炼成函数.
最后重构了一个函数 + 3个调用, 每个调用带不同的参数.
但是在重构成一个函数后, 发现有 CControlUI->SetAttribute(L"pos" 的调用, 由于调用时机的问题, 导致没有位置变化的效果.
后来才弄清楚, 是需要界面(控件的Owner控件)刷新一下, 才有子控件属性变化的效果. e.g. 位置在容器中的位置变化了.
这种操作不能很频繁, 应该在UI初始化或按钮点击等事件开始的地方处理.
std::wstring strTag = ns_base::StringFormatV(L"my_ctrl_%d", i_RowIndex); CLabelUI* pLableObj = static_cast<CLabelUI*>(m_pList->FindSubControl(strTag.c_str())); /// 必须在 SetAttribute 之后调用 Owner的NeedUpdate, 否则属性不生效 pLableObj->SetAttribute(L"pos",L"55,20,0,0"); m_pList->NeedUpdate(); ///< !
我觉得在UI中移动控件位置很烦人, 如果是我, 我会尽量的显示场景放在不同的Tab中, 这样维护起来很方便.
如果在不同场景下, 同时要移动多个控件, 很容易出BUG. 而且UI代码写的较多.
e.g. List中的行中的列, 如果有10种变化(e.g. 下载, 下载失败, 重新下载, 安装, 安装失败, 重新安装...), 这样搞在某行某列中建立Tab, 在Tab中建立N种子页.
这样换场景的时候, 只需要切换Tab页, 这样逻辑简化好多.
没有代码审查的环境, 对于多人开发后的维护, 真是个恶梦.
0 0
- DuiLib : CControlUI->SetAttribute(L"pos"后, 属性不生效的问题
- 【问题分析】 为什么设置了android:windowIsTranslucent属性后Activity的退出动画就不生效了
- Linux 里hostName和修改后不生效的问题
- atomikos 配置好后 @transactional 注解不生效的问题
- jQuery-Ajax-Timeout属性不生效的问题
- 不使用setAttribute()方法改变某个图片的src属性
- Duilib 源码分析之 CControlUI 篇
- 复选框组的全选、全不选点击两次后,attr()不生效、checkBox状态不改变问题
- IE中使用setAttribute方法设置属性的问题
- nginx配置反向代理,域名代理后不生效问题
- bootstrap折叠调用collapse()后data-parent不生效问题
- 解决修改CSS文件后网页显示不生效问题
- 输入法切换快捷键不生效的问题
- Android中setHeight不生效的问题
- 修改php.ini不生效的问题
- PHP参数修改不生效的问题
- crontab ntpdate不生效的问题
- alarmmanger set 不生效的问题
- FileItem类
- 太白---落燕纷飞第一重 Android单元测试Instrumentation和irobotium
- 性能优化
- POJ1062 昂贵的聘礼
- 2015-6-5(纠结的问题)
- DuiLib : CControlUI->SetAttribute(L"pos"后, 属性不生效的问题
- Storyboard-故事板
- 构造函数方法创建Mat对象
- 块设备
- jquery绝对路径
- CentOS安装PostgreSQL数据库
- Java集合框架22课后编程题
- 大视野在线测评 1010 [HNOI2008]玩具装箱toy (动态规划)
- 编译复习2