代码:
http://www.rayfile.com/zh-cn/files/43e39bde-8b68-11e1-8d11-0015c55db73d/
测试工程参考我的另一篇文章<<金山卫士开源软件之旅(二) 简单教程:如何创建一个基于金山卫士界面库的工程>>:
http://blog.csdn.net/chenyujing1234/article/details/7399014
最近在金山开源文坛上学习了网友添加控件的方法,这里做个综合,分享给大家.
添加的步骤(以CBkEdit为例):
1、完成控件bkwndedit.h代码。
具体实现方法请参考代码,这里主要分析加入的控件与外部的接口
class CBkEdit : public CBkWindow
{
BKOBJ_DECLARE_CLASS_NAME(CBkEdit, "edit")
........
}
-
- #define BKOBJ_DECLARE_CLASS_NAME(theclass, classname) \
- public: \
- static theclass* CheckAndNew(LPCSTR lpszName) \
- { \
- if (strcmp(GetClassName(), lpszName) == 0) \
- return new theclass; \
- else \
- return NULL; \
- } \
- \
- static LPCSTR GetClassName() \
- { \
- return classname; \
- } \
- \
- virtual LPCSTR GetObjectClass() \
- { \
- return classname; \
- } \
- \
- virtual BOOL IsClass(LPCSTR lpszName) \
- { \
- return strcmp(GetClassName(), lpszName) == 0; \
- } \
上面的宏中classname就是我们在IDR_BK_MAIN_DIALOG(即res\\dlg_main.xml 文件,这个文件名可设定的)
中要加入的节点的控件名字.这在下面会讲到.
2、在bkwndpanel.h中添加头文件
#include "bkwndedit.h"
并在inline CBkWindow* CBkPanel::_CreateBkWindowByName(LPCSTR lpszName)
添加代码
- inline CBkWindow* CBkPanel::_CreateBkWindowByName(LPCSTR lpszName)
- {
- CBkWindow *pNewWindow = NULL;
-
- pNewWindow = CBkEdit::CheckAndNew(lpszName);
- if (pNewWindow)
- return pNewWindow;
第二步是根据XML主界面文件中的
<edit id="200" defaultfont="0200" pos="100,355,230,375">编辑框</edit>
节点前名edit传给lpszName,然后根据名字去调用CheckAndNew函数。这个函数就是上第1点中讲到的宏里定义的.
这里补充讲一下加载过程,让大家明白做第二步的原因.
而红色函数 BOOL LoadChilds(TiXmlElement* pTiXmlChildElem)
的实现是
- BOOL LoadChilds(TiXmlElement* pTiXmlChildElem)
- {
- BkSendMessage(WM_DESTROY);
-
- BOOL bVisible = IsVisible(TRUE);
-
- for (TiXmlElement* pXmlChild = pTiXmlChildElem; NULL != pXmlChild; pXmlChild = pXmlChild->NextSiblingElement())
- {
- CBkWindow *pNewChildWindow = _CreateBkWindowByName(pXmlChild->Value());
- if (!pNewChildWindow)
- continue;
-
-
-
-
- pNewChildWindow->SetParent(m_hBkWnd);
- pNewChildWindow->SetContainer(m_hWndContainer);
- pNewChildWindow->Load(pXmlChild);
-
-
-
-
- m_lstWndChild.AddTail(pNewChildWindow);
- }
-
- return TRUE;
- }
里面的CreateBkWindowByName函数就是我们修改的部分,如果没有添加的话那么就不会去创建CBkEdit对象了.
3、在主界面文件中添加节点
<body class="dialogbody" width="full" height="full">
<dlg pos="3,0,-3,-0">
<text pos="20,350,100,370">用户名:</text>
<edit id="200" defaultfont="0200" pos="100,355,230,375">编辑框</edit>
<combo id="1000" pos="10,30,100,50"></combo>
</dlg>
</body>
分享到:
相关推荐
欢迎进入 金山卫士开源计划 ! 在这里你可以接触到中国最专业的安全类软件源代码; 你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品; 进一步的详细信息请访问: http://code.ijinshan.com/ = 开源作品...
欢迎进入 金山卫士开源计划 ! 在这里你可以接触到中国最专业的安全类软件源代码; 你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品; = 代码仓库维护根说明 = Administrator: Zoom.Quiet 负责: + ...
金山卫士开源 源码。 肯定不是全部开源,只是部分开源, 没有太仔细看。
金山卫士开源代码 官方公开源代码 金山网络日前启动金山卫士开源计划,宣布将金山卫士全面开源,任何第三方的厂商或者个人均可自由下载和使用金山卫士源代码,不限制开源后的代码进行商业性的使用 释放第一份作品:...
金山卫士开源代码界面演示,演示各个基本控件的使用
这是金山公布金山卫士开源代码,欢迎大家下载!
金山卫士开源计划 ! 在这里你可以接触到中国最专业的安全类软件源代码; 你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品; 进一步的详细信息请访问: http://code.ijinshan.com/ = 开源作品根索引 = ....
VC++金山卫士开源代码,包含所有模块的源码,促进互联网行业的开源计划 ;也是你学习VC++的绝佳范例,可以接触到中国最专业的安全类软件源代码,你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品。VC++...
欢迎进入 金山卫士开源计划 ! 在这里你可以接触到中国最专业的安全类软件源代码; 你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品; 进一步的详细信息请访问: http://code.ijinshan.com/ = 代码仓库...
金山卫士开源代码
这是金山公布金山卫士开源代码,欢迎大家下载!
今天简化了金山的开源代码,用来学习一下,先谢谢金山的开源精神了,呵呵···直接弄最简单的,窗口见下图,关键代码如下,全部的代码放附件里吧。分析中关于累的继承机制等没有详细的说明了,在函数申明中我会用...
依赖 ------------------------------------------------------------------------------- 外部库包: ...下载后,将其中子目录覆盖 pcmanager 目录; 即:LIB4pcmanager ├── lib └── src 将 lib 和 src 目录,覆盖 ...
金山卫士的开源代码,可供学习和交流 基础功能基本实现。是很好的学习素材
金山卫士开源BKUI.21.圆角矩形窗体的源代码 视频地址:http://www.tudou.com/home/zhzhb/
金山软件开源代码
金山开源安全卫士全套代码编译指南 金山开源安全卫士全套代码编译指南 金山开源安全卫士全套代码编译指南
12月1日,金山网络高调启动金山卫士开源计划,宣布将金山卫士全面开源, 任何第三方的厂商或者个人均可自由下载和使用金山卫士源代码,不限制开源后的代码进行商业性的使用。 这是国内首个安全软件开源,从此以后,...
金山卫士开源BKUI.12.BeforePaint和AfterPaint函数 视频地址:http://www.tudou.com/home/zhzhb/