关于duilib的按钮响应函数/C360SafeFrameWnd
http://www.duilib.com/ duilib官网。
class C360SafeFrameWnd : public CWindowWnd, public INotifyUI
主窗口类继承于 INotifyUI类。
在窗口类中实现函数Notify()
void Notify(TNotifyUI& msg)
在Notify函数中根据msg消息的发送者/消息类型,判断按钮,并写功能代码。
在主窗口类C360SafeFrameWnd的OnCreate实现中:
CControlUI* pRoot = builder.Create(tstrSkin.c_str(), (UINT)0, &cb, &m_pm); //加载XML并动态创建界面无素,与布局界面元素ASSERT(pRoot && _T("Failed to parse XML"));m_pm.AttachDialog(pRoot); //控件与m_pm(CPaintMangerUI)关联//这里间接设置控件的CPaintManagerUI???//会间接CPaintManagerUI的InitControls(pControl);
CPaintMnagerUI的InitControls函数中调用CControlUI的SetManager,这样控件就与m_pm相关联。
bool CPaintManagerUI::InitControls(CControlUI* pControl, CControlUI* pParent /*= NULL*/)
{ASSERT(pControl);if( pControl == NULL ) return false;pControl->SetManager(this, pParent != NULL ? pParent : pControl->GetParent(), true);pControl->FindControl(__FindControlFromNameHash, this, UIFIND_ALL);return true;
}
再之后在主窗口类OnCreate中
m_pm.AddNotifier(this);
m_pm的m_aNotifiers成员加上主窗口类本身。
这样,点击按钮的时候,调用流程是 CButtonUI::Event--->CButtonUI::Activate()--->CButtonUI成员m_pManager的SendNotify
---->CPaintMangerUI成员m_aNotifier的Notify (也就包含主窗口类的Notify函数)
for( int i = 0; i < m_aNotifiers.GetSize(); i++ ){static_cast<INotifyUI*>(m_aNotifiers[i])->Notify(Msg);}
疑惑:
CControlUI* pRoot = builder.Create(tstrSkin.c_str(), (UINT)0, &cb, &m_pm);
builder.Create中循环递归解析xml中的元素,最后调用:
CControlUI* CDialogBuilder::_Parse(CMarkupNode* pRoot, CControlUI* pParent, CPaintManagerUI* pManager)
_Parse函数中,先是:
// Init default attributesif( pManager ){pControl->SetManager(pManager, NULL, false); //此处设置控件的CPaintManager
最后又有:
if( pManager ) {pControl->SetManager(NULL, NULL, false);}
ezhong的博客园:http://www.cnblogs.com/ezhong/
转载于:https://www.cnblogs.com/ezhong/archive/2011/11/15/2249894.html
关于duilib的按钮响应函数/C360SafeFrameWnd相关推荐
- duilib 自带树形控件的认识
CTreeViewUI 1.该控件继承自CListUI,所以是使用了对应的列表来模拟树形控件.该控件的容器填装的是CTreeNodeUI,而CTreeNodeUI也继承CListContainerEl ...
- Android安卓程序消息提示和按钮响应事件
首先在界面的XML里添加按钮响应函数 android:onClick="OnMyClick" <Buttonandroid:id="@+id/button1&quo ...
- 怎么把dll库写成MATLAB接口,如何在Matlab中应用动态连接库接口技术
1 引言 Matlab是当前应用最为广泛的数学软件,具有强大的数值计算.数据分析处理.系统 分析.图形显示甚至符号运算等功能.利用这一完整的数学平台,用户可以快速实现十分 复杂的功能,极大地提高工程分 ...
- 记录一下集成修改触发模式的过程
备注一下:修改的意义在于减少操作,修改触发模式的频率会影响操作速度.这样从四个控件改成两个,能够加快速度. 修改的一些目的见另一篇: 动态显示时采色改为单帧采色 修改之后,关于对触发模式,只剩下下面四 ...
- xcode 学习笔记2:动态添加view
xcode 学习笔记2:动态添加view 2011-07-06 16:48:39| 分类: 计算机学习|字号 订阅 前面说的都是用的Interface Builder来编辑.xib文件来给窗口添加各 ...
- 【Android 逆向】IDA 工具使用 ( 函数窗口 Function window | 创建引用图 Xrefs graph to | 创建调用图 Xrefs graph from )
文章目录 一.函数窗口 Function window 二.创建引用图 Xrefs graph to 三.创建调用图 Xrefs graph from 一.函数窗口 Function window 左 ...
- VC++对话框学习总结
VC++中如何复制对话框资源 http://www.cnblogs.com/Yogurshine/p/3710566.html 法1: 在你的工程中添加另一个工程的rc文件,这时资源视图中就会出现两个 ...
- Matlab与C/C++混合编程接口及应用
http://www.cnblogs.com/lidabo/archive/2012/08/24/2654148.html 在参考文献基础上.补充和完善了. Matlab与C/C++混合编程接口及应用 ...
- 无法执行添加/移除操作,因为代码元素**是只读的
在vs中,大量添加窗体或者控件后,发现无法由系统IDE自动生成代码,如自动添加按钮响应函数等,rc管理器界面双击按钮添加函数,会出现 提示框 "无法执行添加/移除操作,因为代码元素**是只读 ...
最新文章
- thinkphp如何跨模块调用方法呢?
- odps结合mysql统计
- 程序调用mysql突然变慢_排查Mysql突然变慢
- JavaScript/JS的学习
- 南蛮图腾(洛谷P1498题题解,Java语言描述)
- 理解Linux中断 (3)【转】
- UTF8,Unicode 的区别(zt)
- 当你感到迷茫焦虑时,请听听白岩松这个演讲
- 两个类相互包含对方成员的问题(2)
- GitHub上最火的74个Android开源项目(三)
- 计网笔记(一) 什么是因特网
- 转载:bat批处理简易教程
- 【3D游戏模型】在ZBrush中制作3D兽人
- linux sed替换文件,linux的sed命令替换文件
- 4.1 使用常见的各种字体属性 [原创Excel教程]
- Java组各任务工作流程
- 贸然的对音乐版权进行维护,这种激进的方式将如何收场?
- 为什么使用LeakCanary检测内存泄漏?
- 怎么优化自己网站的关键词_新网站seo必做步骤
- BioNano生物纳米分子的“原始数据到完成装配和组装分析”管线与基于序列的基因组FASTA映射...