自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

七彩狻猊

只说必要的

  • 博客(19)
  • 资源 (2)
  • 收藏
  • 关注

原创 金山界面库分析(0)

资源下载地址:代码下载地址http://download.csdn.net/detail/nighsen/4628001word版本文档下载地址http://download.csdn.net/detail/nighsen/4628008

2012-10-09 11:19:41 5833 2

原创 金山界面库分析(10)

鼠标消息、窗口状态的管理首先来看CBkDialogViewImpl类的鼠标消息处理方法 OnMouseLeave方法:如果现在处于非跟踪的状态,那么调用_TrackMouseEvent并设置m_bTrackFlag;之后获取现在鼠标所悬停的控件,通过调用header,body和footer的BkGetHWNDFromPoint方法来判断,因为这三者覆盖整个客户区域如

2012-10-09 10:57:18 1890

原创 金山界面库分析(9)

渲染层的封装和隔离:BkSkin控件的绘制工作基本都封装到了Skin里面,如果控件对应的Skin存在的话,那么会按照Skin的描述进行绘制,在CBkWindow的DrawBkgnd方法中,使用Skin进行了绘制: CBkSkinBase*pSkin = BkSkin::GetSkin(m_style.m_strSkinName); if

2012-10-09 10:56:17 1532

原创 金山界面库分析(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 1446

原创 金山界面库分析(7)

如何进行排版前面我们分析过对于WM_SIZE消息的处理过程,CBkDialogViewImpl窗口类在处理WM_SIZE消息时,调用了自身的_RepositionItems方法,在这个方法内对窗口上的虚拟控件进行处理,现在我们来详细看一下控件体系内是如何进行排版操作的。在_RepositionItems方法中定义了4个CRect变量,就是rcClient, rcHeader, rc

2012-10-09 10:51:32 1900

原创 金山界面库分析(6)

消息和事件的传递、分发、相应既然没有真实的窗口,那么也就不能使用windows的根据句柄来分发消息的方式了,我们需要创建自己的消息和事件分发体系。主要应该包括这几个方面:1.      接收真实窗口的消息,并将其转化虚窗口体系中的处理2.      虚窗口体系内有一套独立的消息分发机制,可以讲系统消息发至该接收的控件3.      虚窗口需要能够抛出事件的能力,因为虚窗口之

2012-10-09 10:39:36 2807 2

原创 金山界面库分析(5)

无窗口模式---逻辑树结构的建立对于无窗口的模式,各种控件之间的关系需要我们自己来维护,因为我们要进行消息传递,排版布局,创建等操作时都需要沿着各种包含关系来逐个调用,这样对于窗口中的控件就形成了一个逻辑上的树形结构。我们看一下CBkPanel类,这个类的名字就表示它是一个有包含功能的类,可以有自己的子节点。这个类有一个成员CAtlList m_lstWndChild,也就是每个CBk

2012-10-09 10:34:30 1557

原创 金山界面库分析(4)

如何创建一个模态对话框我们创建的窗口类从CBkDialogImpl继承而来,这个窗口就是一个模态的窗口,我们需要调用其DoModal方法,但是在界面库里面是如何实现的一个模态的对话框呢。核心就在这个类中的_ModalMessageLoop方法,我们来研究一下。  void _ModalMessageLoop() { BOOL bRet; MS

2012-10-09 10:32:01 1666

原创 金山界面库分析(3)

真实窗口的封装以及实窗口到虚窗口的转化所谓的DUI库,windowless都是在一个窗口体系内虚拟出来虚窗口概念,并且通过接管界面布局、消息传递和分发以及界面绘制来完成更优秀的界面效果。不过这些的根基却又都要落到真实的窗口上,所以在界面库中需要对真实窗口进行封装,并将真实窗口纳入到我们创建的控件体系当中,并在这个过程中完成windows消息的传递,鼠标键盘事件的分发处理,实窗口上的虚窗

2012-10-09 10:30:11 2045

原创 金山界面库分析(2)

统一的资源管理为了对界面资源进行管理,同时也为了方便替换,需要对使用的资源进行统一的管理。在BKLib中,资源管理主要由以下几种:BkBmpPool:HBITMAP资源池,用于统一管理HBITMAP,单例。BkFontPool:FONT资源池,用于统一管理FONT,单例。BkPngPool:PNG图片资源池,用于统一管理PNG图片,单例,使用GDI+。BkStrin

2012-10-09 10:23:52 1931

原创 金山界面库分析(1)

通过XML创建界面---对象的动态创建以及属性的设置为了界面可配置化和换肤,需要界面元素可以根据XML动态创建和设置属性。在BKLib中,CBkObject类就完成了这样的功能,主要负责类的创建和属性的设置。因为对象都是从XML动态创建的,动态的创建是一个类最基本的属性,所以其他类都从CBkObject派生。来看看这个类的四个方法:BOOL IsClass(LPCSTR l

2012-10-09 10:15:55 3753

原创 在C++实现反射

<br />反射这个特性在C++中是没有的。所谓反射,自己的认为就是通过一个名字就可创建、调用、获取信息等一系列的操作,这个在脚本语言里面是比较常见的,COM组件也类似,知道个ID名,就可以做很多的工作了。<br />看看JAVA中的描述:<br />JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为JAVA语言的反射机制。<br />JAVA反射机制主要提供了以下功能:在运行时判

2011-05-09 17:06:00 18967 4

原创 在C++实现委托

<br />在前面提到回调了,那么现在就开始说委托吧。个人是这么理解委托的,就是一件事你不做或者不能做或者不想做,那么就委托给别人做,我只调用别人的函数接口就可以了,也就是我要实现一个功能,我只要接口,实际的实现委托给别人,突然有一天我要做的事的逻辑发生了变化,那么我也不需要更改自己的调用,只需要被委托者更换一下逻辑就可以了。同时,如果在一定的场合下要调用很多相同形式的函数,那么使用委托将很方便。<br />在设计模式中状态模式、策略模式、访问者模式本质上是在更特殊的场合采用了委托模式。委托也可以接受多个实

2011-05-09 11:43:00 1887 1

原创 在C++实现回调(续)

Method6:使用类的非静态函数作为回调(采用thunk的方法2)在上面的实现过程中,可以看出来主要的部分就是这里:        bMovEcx = 0xB9;                dwThis  = (DWORD)pThis;        bJmp    = 0xE9;        dwRealProc = DWORD((INT_PTR)proc - ((INT_PTR)this+sizeof(THUNK)));意思就是Move Ecx pThis; 即把this指针保存到了ECX的寄存

2011-05-06 13:43:00 1637

原创 在C++实现回调

来看看怎么在C++中实现回调吧。Method1:使用全局函数作为回调在C语言中的回调很方便。当然,我们可以在C++中使用类似于C方式的回调函数,也就是将全局函数定义为回调函数,然后再供我们调用。typedef void(*pCalledFun)(int *);void GetCallBack(pCalledFunparafun){/*do something*/}如果我们想使用GetCallBack函数,那么就要实现一个pCalledFun类型的回调函数:void funCallback(int *iNum

2011-05-06 13:22:00 8579 2

原创 在C++实现”Final”

<br />在C#中有sealed关键字,而Java中有final关键字,其作用就是为了提供一种机制使一个类不能被继承。当然,C++不能^_^,但是他能实现,下面来讨论一下吧。<br /> <br />Method1:最简单的想法就是使一个类得构造函数和析构函数成为私有函数,这样,子类的构造函数和析构函数就无法调用父类的构造函数和析构函数,也就难以构造或者析构父类对象,就可以了。当然,这样我们也无法构造对象,这个,我们可以采用静态方法来创建和释放类得实例。如下:<br />class NoDerivedCl

2011-04-26 10:04:00 3960

原创 使用VBScript读取ini文件

使用VBScript读取ini文件

2010-09-09 14:16:00 4233

原创 VBScript实现inputbox多输入框和inputbox和checkbox框

VBScript实现inputbox多输入框和inputbox和checkbox框

2010-09-09 13:08:00 9559 3

原创 VBScript中格式化输出日期的方法

VBScript中格式化输出日期的方法

2010-09-09 11:49:00 16354

金山界面库分析文档

金山开源界面库的分析文档,也可以到博客围观,这里是word版本

2012-10-09

金山界面库代码_BKUIlib

金山界面库的开源代码,使用C++,采用DUI方式自绘界面

2012-10-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除