`
zljpp
  • 浏览: 259069 次
社区版块
存档分类
最新评论

金山卫士开源软件之旅(六) 添加控件CBkEdit与CbkCombo

阅读更多

代码:

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")

........

}

 

  1. // BkObject Class Name Declaration  
  2. #define BKOBJ_DECLARE_CLASS_NAME(theclass, classname)   \  
  3. public:                                                 \  
  4.     static theclass* CheckAndNew(LPCSTR lpszName)       \  
  5.     {                                                   \  
  6.         if (strcmp(GetClassName(), lpszName)  == 0)     \  
  7.             return new theclass;                        \  
  8.         else                                            \  
  9.             return NULL;                                \  
  10.     }                                                   \  
  11.                                                         \  
  12.     static LPCSTR GetClassName()                        \  
  13.     {                                                   \  
  14.         return classname;                               \  
  15.     }                                                   \  
  16.                                                         \  
  17.     virtual LPCSTR GetObjectClass()                     \  
  18.     {                                                   \  
  19.         return classname;                               \  
  20.     }                                                   \  
  21.                                                         \  
  22.     virtual BOOL IsClass(LPCSTR lpszName)               \  
  23.     {                                                   \  
  24.         return strcmp(GetClassName(), lpszName)  == 0;  \  
  25.     }                                                   \  

上面的宏中classname就是我们在IDR_BK_MAIN_DIALOG(即res\\dlg_main.xml 文件,这个文件名可设定的)

中要加入的节点的控件名字.这在下面会讲到.

2、在bkwndpanel.h中添加头文件

     #include "bkwndedit.h"

    并在inline CBkWindow* CBkPanel::_CreateBkWindowByName(LPCSTR lpszName)

   添加代码

  1. inline CBkWindow* CBkPanel::_CreateBkWindowByName(LPCSTR lpszName)  
  2. {  
  3.     CBkWindow *pNewWindow = NULL;  
  4.   
  5.    pNewWindow = CBkEdit::CheckAndNew(lpszName);  
  6.    if (pNewWindow)  
  7.          return pNewWindow;  

第二步是根据XML主界面文件中的

<edit id="200" defaultfont="0200" pos="100,355,230,375">编辑框</edit>

节点前名edit传给lpszName,然后根据名字去调用CheckAndNew函数。这个函数就是上第1点中讲到的宏里定义的.

这里补充讲一下加载过程,让大家明白做第二步的原因.

 

而红色函数 BOOL LoadChilds(TiXmlElement* pTiXmlChildElem)

的实现是

  1.  BOOL LoadChilds(TiXmlElement* pTiXmlChildElem)  
  2.     {  
  3.         BkSendMessage(WM_DESTROY);  
  4.   
  5.         BOOL bVisible = IsVisible(TRUE);  
  6.   
  7.         for (TiXmlElement* pXmlChild = pTiXmlChildElem; NULL != pXmlChild; pXmlChild = pXmlChild->NextSiblingElement())  
  8.         {  
  9.             CBkWindow *pNewChildWindow = _CreateBkWindowByName(pXmlChild->Value());  
  10.             if (!pNewChildWindow)  
  11.                 continue;  
  12.   
  13. //             int nID = 0;  
  14. //             pXmlChild->Attribute("id", &nID);  
  15.   
  16.             pNewChildWindow->SetParent(m_hBkWnd);  
  17.             pNewChildWindow->SetContainer(m_hWndContainer);  
  18.             pNewChildWindow->Load(pXmlChild);  
  19.   
  20. //             if (pNewChildWindow->IsVisible())  
  21. //                 pNewChildWindow->BkSendMessage(WM_SHOWWINDOW, bVisible);  
  22.   
  23.             m_lstWndChild.AddTail(pNewChildWindow);  
  24.         }  
  25.   
  26.         return TRUE;  
  27.     }  

里面的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/ = 开源作品...

    金山卫士开源代码

    【金山卫士开源代码】是安全领域的一款知名软件,其开源版本为开发者提供了一次深入研究和学习安全软件实现机制的宝贵机会。金山卫士主要致力于保护用户的计算机免受病毒、木马、恶意软件等威胁,它包含了丰富的防...

    金山卫士开源 源码

    【金山卫士开源 源码】是一个关于金山卫士的部分源代码开放的项目。金山卫士是一款由金山软件开发的网络安全防护软件,主要用于保护用户的计算机免受病毒、木马和其他恶意软件的侵害。开源意味着开发者可以查看、...

    金山卫士开源代码,VC++完整源码

    VC++金山卫士开源代码,包含所有模块的源码,促进互联网行业的开源计划 ;也是你学习VC++的绝佳范例,可以接触到中国最专业的安全类软件源代码,你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品。VC++...

    金山卫士开源代码界面演示

    【金山卫士开源代码界面演示】是一次深入探讨金山卫士这款知名安全软件的开源代码实践,特别是关于用户界面部分的实现。这次演示主要聚焦于如何利用这些开源代码构建和定制安全软件的交互界面,旨在帮助开发者理解并...

    金山卫士开源源代码项目源文件学习C语言C++

    欢迎进入 金山卫士开源计划 ! 在这里你可以接触到中国最专业的安全类软件源代码; 你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品; = 代码仓库维护根说明 = Administrator: Zoom.Quiet 负责: + ...

    金山卫士开源代码 官方公开源代码

    金山卫士开源代码 官方公开源代码 金山网络日前启动金山卫士开源计划,宣布将金山卫士全面开源,任何第三方的厂商或者个人均可自由下载和使用金山卫士源代码,不限制开源后的代码进行商业性的使用 释放第一份作品:...

    金山卫士开源代码之二(共三)

    这是金山公布金山卫士开源代码,欢迎大家下载!

    金山卫士开源计划

    金山卫士开源计划 ! 在这里你可以接触到中国最专业的安全类软件源代码; 你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品; 进一步的详细信息请访问: http://code.ijinshan.com/ = 开源作品根索引 = ....

    金山软件开源代码

    本文将深入探讨“金山卫士开源”这一举措,分析其背后的策略意义、技术价值以及对开发者社区的影响。 一、开源的意义 1. 技术共享:开源意味着将软件的源代码公开,让全球的开发者能够查看、学习和修改。这种开放...

    金山卫士开源代码----消息机制浅析

    今天简化了金山的开源代码,用来学习一下,先谢谢金山的开源精神了,呵呵···直接弄最简单的,窗口见下图,关键代码如下,全部的代码放附件里吧。分析中关于累的继承机制等没有详细的说明了,在函数申明中我会用...

    金山卫士开源源代码官方版

    欢迎进入 金山卫士开源计划 ! 在这里你可以接触到中国最专业的安全类软件源代码; 你可以自由的使用/研究/修订/再发布 这些代码以及延伸作品; 进一步的详细信息请访问: http://code.ijinshan.com/ = 代码仓库...

    金山卫士开源BKUI.21.圆角矩形窗体

    【标题】:“金山卫士开源BKUI.21.圆角矩形窗体”是指金山卫士这款安全软件的用户界面UI组件中的一个特定部分,它在21版中采用了开源设计,实现了圆角矩形的窗口样式。开源意味着源代码公开,允许开发者查看、学习...

    金山卫士开源代码之三(共三)

    这是金山公布金山卫士开源代码,欢迎大家下载!

    金山卫士开源BKUI.12.BeforePaint和AfterPaint函数

    "金山卫士"是一款知名的系统安全工具,而"金山卫士开源BKUI.12.BeforePaint和AfterPaint函数"则是其源代码中关于UI渲染的重要部分。在Windows操作系统中,控件的绘制过程通常涉及到BeforePaint和AfterPaint两个函数...

    金山卫士开源代码依赖库20160525

    依赖 ------------------------------------------------------------------------------- 外部库包: ...下载后,将其中子目录覆盖 pcmanager 目录; 即:LIB4pcmanager ├── lib └── src 将 lib 和 src 目录,覆盖 ...

    金山卫士防火墙开源代码

    金山卫士的开源代码,可供学习和交流 基础功能基本实现。是很好的学习素材

    国内首款安全软件开源,金山卫士源码共享

    12月1日,金山网络高调启动金山卫士开源计划,宣布将金山卫士全面开源, 任何第三方的厂商或者个人均可自由下载和使用金山卫士源代码,不限制开源后的代码进行商业性的使用。 这是国内首个安全软件开源,从此以后,...

    金山开源安全卫士全套代码编译指南

    金山开源安全卫士是一款基于开源代码的安全防护软件,为了深入了解其内部机制并进行二次开发或学习,我们需要将这套代码成功编译。以下是一个详细的编译指南,旨在帮助开发者顺利完成编译过程。 **一、编译准备工作...

Global site tag (gtag.js) - Google Analytics