DUI界面库
文章平均质量分 68
nighsen
这个作者很懒,什么都没留下…
展开
-
金山界面库分析(4)
如何创建一个模态对话框 我们创建的窗口类从CBkDialogImpl继承而来,这个窗口就是一个模态的窗口,我们需要调用其DoModal方法,但是在界面库里面是如何实现的一个模态的对话框呢。 核心就在这个类中的_ModalMessageLoop方法,我们来研究一下。 void _ModalMessageLoop() { BOOL bRet; MS原创 2012-10-09 10:32:01 · 1679 阅读 · 0 评论 -
金山界面库分析(2)
统一的资源管理 为了对界面资源进行管理,同时也为了方便替换,需要对使用的资源进行统一的管理。 在BKLib中,资源管理主要由以下几种: BkBmpPool:HBITMAP资源池,用于统一管理HBITMAP,单例。 BkFontPool:FONT资源池,用于统一管理FONT,单例。 BkPngPool:PNG图片资源池,用于统一管理PNG图片,单例,使用GDI+。 BkStrin原创 2012-10-09 10:23:52 · 1945 阅读 · 0 评论 -
金山界面库分析(0)
资源下载地址: 代码下载地址 http://download.csdn.net/detail/nighsen/4628001 word版本文档下载地址 http://download.csdn.net/detail/nighsen/4628008原创 2012-10-09 11:19:41 · 5869 阅读 · 2 评论 -
金山界面库分析(8)
如何进行绘制 首先我们来看一下CBkDialogViewImpl类的绘制过程: CBkDialogViewImpl含有一个CBkImage类成员m_imgMem用于双缓冲绘制,在WM_SIZE消息处理函数中进行创建: m_imgMem.CreateBitmap(rcClient.Width(), rcClient.Height(), RGB(0,0, 0)); CBkDialo原创 2012-10-09 10:52:43 · 1459 阅读 · 0 评论 -
金山界面库分析(3)
真实窗口的封装以及实窗口到虚窗口的转化 所谓的DUI库,windowless都是在一个窗口体系内虚拟出来虚窗口概念,并且通过接管界面布局、消息传递和分发以及界面绘制来完成更优秀的界面效果。不过这些的根基却又都要落到真实的窗口上,所以在界面库中需要对真实窗口进行封装,并将真实窗口纳入到我们创建的控件体系当中,并在这个过程中完成windows消息的传递,鼠标键盘事件的分发处理,实窗口上的虚窗原创 2012-10-09 10:30:11 · 2056 阅读 · 0 评论 -
金山界面库分析(1)
通过XML创建界面---对象的动态创建以及属性的设置 为了界面可配置化和换肤,需要界面元素可以根据XML动态创建和设置属性。 在BKLib中,CBkObject类就完成了这样的功能,主要负责类的创建和属性的设置。因为对象都是从XML动态创建的,动态的创建是一个类最基本的属性,所以其他类都从CBkObject派生。 来看看这个类的四个方法: BOOL IsClass(LPCSTR l原创 2012-10-09 10:15:55 · 3764 阅读 · 0 评论 -
金山界面库分析(10)
鼠标消息、窗口状态的管理 首先来看CBkDialogViewImpl类的鼠标消息处理方法 OnMouseLeave方法: 如果现在处于非跟踪的状态,那么调用_TrackMouseEvent并设置m_bTrackFlag; 之后获取现在鼠标所悬停的控件,通过调用header,body和footer的BkGetHWNDFromPoint方法来判断,因为这三者覆盖整个客户区域 如原创 2012-10-09 10:57:18 · 1901 阅读 · 0 评论 -
金山界面库分析(7)
如何进行排版 前面我们分析过对于WM_SIZE消息的处理过程,CBkDialogViewImpl窗口类在处理WM_SIZE消息时,调用了自身的_RepositionItems方法,在这个方法内对窗口上的虚拟控件进行处理,现在我们来详细看一下控件体系内是如何进行排版操作的。 在_RepositionItems方法中定义了4个CRect变量,就是rcClient, rcHeader, rc原创 2012-10-09 10:51:32 · 1915 阅读 · 0 评论 -
金山界面库分析(6)
消息和事件的传递、分发、相应 既然没有真实的窗口,那么也就不能使用windows的根据句柄来分发消息的方式了,我们需要创建自己的消息和事件分发体系。主要应该包括这几个方面: 1. 接收真实窗口的消息,并将其转化虚窗口体系中的处理 2. 虚窗口体系内有一套独立的消息分发机制,可以讲系统消息发至该接收的控件 3. 虚窗口需要能够抛出事件的能力,因为虚窗口之原创 2012-10-09 10:39:36 · 2820 阅读 · 2 评论 -
金山界面库分析(5)
无窗口模式---逻辑树结构的建立 对于无窗口的模式,各种控件之间的关系需要我们自己来维护,因为我们要进行消息传递,排版布局,创建等操作时都需要沿着各种包含关系来逐个调用,这样对于窗口中的控件就形成了一个逻辑上的树形结构。我们看一下CBkPanel类,这个类的名字就表示它是一个有包含功能的类,可以有自己的子节点。这个类有一个成员CAtlList m_lstWndChild,也就是每个CBk原创 2012-10-09 10:34:30 · 1572 阅读 · 0 评论 -
金山界面库分析(9)
渲染层的封装和隔离:BkSkin 控件的绘制工作基本都封装到了Skin里面,如果控件对应的Skin存在的话,那么会按照Skin的描述进行绘制,在CBkWindow的DrawBkgnd方法中,使用Skin进行了绘制: CBkSkinBase*pSkin = BkSkin::GetSkin(m_style.m_strSkinName); if原创 2012-10-09 10:56:17 · 1543 阅读 · 0 评论