前面已经发布了分离后的Kui代码,我们继续,下面来解释该代码库的使用.
首先要说下Kui框架的一些基础概念:
一、
金山界面库不使用Windows的窗口布局,只是使用Windows的窗口作为一个载体,整个窗口都只是作为一个绘制面,
而Kui对窗口实行重新布局,取消了原窗口非客户区和客户区的概念.而自己对窗口划分为上中下三个部分.
上部分为Header,一般作为窗口标题栏,可以放置缩小,最大化,关闭按钮,
中部分为Body,是窗口主要功能操作区域,
下部分为Footer,一般作为状态显示.
这部分说明主要是为了以后写XML时使用.
二、
Kui将使用到的诸如图片,布局定义xml等文件使用zip打包,并按资源名"kuires.dat",资源类别为"SKIN",保存到运行程序的资源里
三、
Kui库使用xml格式定义控件及资源的布局,这也是通常DirectUI的做法(xml布局,脚本控制[Kui里面没使用],windowless)。
有了以上的概念就可以使用Kui来进行界面开发了。
同学们可以参考第一个样例程序----该程序在客户区显示经典的hello world.并且对窗口外框进行了美化。
一、建立工程
首先使用向导建立一个Win32程序,对!是Win32程序,选择了Kui,你将不能使用MFC编程了,因为没有了MFC的窗口概念。
你将应用微软的另一个库进行程序开发----WTL。
好处就是开发出来的程序不会那么臃肿了,缺点嘛,就是没有MFC那么方便了。
不过习惯了也没什么的。都是同一家公司的技术,所以肯定各有好处。
二、编写入口程序
首先当然是包含库文件,在stdafx.h中定义
// 界面库
#include "../../include/KUILib.h"
然后写入口函数
WTL的程序都有一个程序实例,与MFC的CWinApp对应,但Kui对它进行了继承以完成了一些初始化操作,你可以直接使用该类来定义实例。如Sample1所示:
HINSTANCE g_hInstance; // 定义实例句柄,必须的。
CKuiApp
CAppModule* _ModulePtr = &_Module;// 定义实例指针,必须的。
完整代码:
#include "stdafx.h" #include "./mainwnd.h" // HINSTANCE g_hInstance; // CKuiApp
三、窗口函数定义
下面接着要编写主窗口类了
其中头文件MainWnd.h如下:
#pragma once #include "stdafx.h" class CMainWnd : public CKuiDialogImpl
实现文件MainWnd.cpp如下:
#include "stdafx.h" #include "./mainwnd.h" CMainWnd::CMainWnd(void) : CKuiDialogImpl
下面对代码关键部分进行说明:
主窗口继承自两个类
CKuiDialogImpl
CWHRoundRectFrameHelper
KUI_NOTIFY_MAP(IDC_RICHVIEW_WIN) KUI_NOTIFY_ID_COMMAND(60001, OnBkBtnClose) KUI_NOTIFY_ID_COMMAND(60002, OnBkBtnMax) KUI_NOTIFY_ID_COMMAND(60003, OnBkBtnMin) KUI_NOTIFY_MAP_END()
上面这些宏映射了控件通知到相应的函数
BEGIN_MSG_MAP_EX(CMainWnd) MSG_KUI_NOTIFY(IDC_RICHVIEW_WIN) CHAIN_MSG_MAP(CKuiDialogImpl
上面这些宏映射了窗口消息到对应函数。
这些代码作用跟MFC的消息映射作用是一样的,但实作手法有些差异。其实WTL的更原始。
实现部分的代码就比较简单了。
四、最后就是资源的添加了。
可以参考Sample1.rc文件,直接在相应位置添加一行
kuires.dat SKIN "res//sample1.kui"
至此Kui库整个使用过程就是如此简单。
你需要做的就是定义主窗口的消息处理及函数而已。
本项目已经在GOOGLE的开源项目里创建了工程,如果你有兴趣加入可以联系我。
svn https://openkui.googlecode.com/svn/trunk
本程序代码可以在第一篇里下载
金山卫士界面源码解读及界面库分离(1)