011 - 问,如何使用KUI创建一个界面程序?目标一:显示出对话框

011 - 问,如何使用KUI创建一个界面程序?目标一:显示出对话框

http://www.cppblog.com/everett/archive/2012/05/21/175515.html 

金山卫士开源后,很多时候,并没有去关注功能的实现,而对其使用的界面库产生了兴趣。做界面一直不是自己的强项,考虑能研究研究,说不定能在公司产品中用上。

KUI(Kingsoft UI,网上都这么叫)。

今天目标:按照下面的步骤,使用KUI开发一个基本的对话框程序。

平台:Windows

工具:Visual Studio 2008 SP1 (非Express版本)

首先,我们创建个文件夹,假设E:\mykui。并创建几个文件夹,存放下载的文件及我们的第一个项目工程。


KUI库文件

1、WTL 

(其实WTL库完全可以从金山开源的代码中找到,这里主要是为了能给VS添加个工程向导。)

a、下载、解压

网站:http://sourceforge.net/projects/wtl/  

稳定版本是2007年的WTL80,不过,WTL一直处于维护之中,可以Browse All Files。

现在最新版WTL81:

http://sourceforge.net/projects/wtl/files/WTL%208.1/WTL%208.1.12085/ 

下载解压得到:


b、安装VS2008向导

进入解压后的目录中AppWiz目录,双击setup90.js,提示成功。


这时打开VisualStudio2008,及可看到向导了。


注:安装完成后,wtl81_12085\AppWiz目录就不能换位置了,否则向导就无法运行了。(记得一天qq群里有人问,顺便这里提下)

2、KUI文件提取

a) 金山卫士开源计划网站http://code.ijinshan.com/ 

下载压缩包:http://code.ijinshan.com/download/tip.tar.bz2

解压:


b) 获取KUI所需文件

我们所需的大部分文件都在这里:E:\mykui\downloadfiles\kingsoft\oss\pcmanager\src\publish

把这个目录下的几个文件夹复制到工程的publish目录下

复制到E:\mykui\project\publish\

bkres

bkres

bkwin

bkwin

tinyxml

tinyxml

wtl

wtl

如果想使用新下载的wtl库,那就复制新的。

复制到

E:\mykui\downloadfiles\wtl81\wtl81_12085\Include

E:\mykui\project\publish\wtl

开始创建第一个程序

1. 使用WTL向导创建一个对话框项目HelloKUI。


确定后,会有这个警告,确定即可。


目录结构如此:


2. 配置“C/C++包含目录”和“资源包含目录”


资源,也是“所有配置”。


3. 修改stdafx.h文件,包含KUI基本的头文件。

注意黄色背景部分。

// stdafx.h : include file for standard system include files,

//  or project specific include files that are used frequently, but

//  are changed infrequently

//

#pragma once

// Change these values to use different versions

#define WINVER 0x0500

#define _WIN32_WINNT 0x0501

#define _WIN32_IE 0x0501

#define _RICHEDIT_VER 0x0200

#include <atlbase.h>

#include <atlwin.h>

#include <atlstr.h>

#include <atltrace.h>

#define _WTL_NO_CSTRING

#include <wtl/atlapp.h>

#include <wtl/atlframe.h>

#include <wtl/atlctrls.h>

#include <wtl/atlctrlx.h>

#include <wtl/atldlgs.h>

#include <wtl/atlcrack.h>

#include <wtl/atlmisc.h>

#include <tinyxml/tinyxml.h>

#include <bkwin/bkdlgview.h>

#include <bkres/bkres.h>

extern CAppModule _Module;

#if defined _M_IX86

  #pragma comment(linker"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")

#elif defined _M_IA64

  #pragma comment(linker"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")

#elif defined _M_X64

  #pragma comment(linker"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")

#else

  #pragma comment(linker"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

#endif

4. HelloKUI工程中添加文件bkwinres.hbkwinres.rc2

这两个文件是使用KUI界面库的工程必备的文件,且文件名也必须这么叫,用于定义资源ID、关联ID与资源并产生资源文件。(见bkres\bkres.h

5. 将bkres\bkres.rc添加到工程中。

6. 修改HelloKUI.rc文件。

修改#include "atlres.h" 为 #include "wtl\atlres.h"

这时,可以先编译一下,是可以编译通过的。

7. 添加tinyxml到工程中,并将tinyxml的cpp文件修改为“不使用预编译头”。


8. 在bkwinres.rc2中定义并添加xml资源描述文件

// file : bkwinres.rc2

// xml

DEFINE_XML(IDR_BK_SKIN_DEF, 100, "res\\xml\\def_skin.xml")

DEFINE_XML(IDR_BK_STYLE_DEF, 101, "res\\xml\\def_style.xml")

DEFINE_XML(IDR_BK_STRING_DEF, 102, "res\\xml\\def_string.xml")

DEFINE_XML(IDR_BK_MAIN_DIALOG, 103, "res\\xml\\dlg_main.xml")

在E:\mykui\project\HelloKUI\HelloKUI\res\xml 下创建这几个空xml文件。(内容稍后再加)


9. 修改WinMain函数(HelloKUI.cpp

在对话框显示之前,增加以下代码。

BkString::Load(IDR_BK_STRING_DEF);

BkFontPool::SetDefaultFont(_T("宋体"), -12);

BkSkin::LoadSkins(IDR_BK_SKIN_DEF);

BkStyle::LoadStyles(IDR_BK_STYLE_DEF);

int nRet = 0;

// BLOCK: Run application

{

CMainDlg dlgMain;

nRet = dlgMain.DoModal();

}

10. 修改MainDlg.hMainDlg.cpp

将MainDlg.h的全部内容替换为下面。(剩余功能一步一步加)

// MainDlg.h : interface of the CMainDlg class

//

/////////////////////////////////////////////////////////////////////////////

#pragma once

class CMainDlg : public CBkDialogImpl<CMainDlg>

{

public:

CMainDlg() : CBkDialogImpl<CMainDlg>(IDR_BK_MAIN_DIALOG)

{

}

};

那么,对应的MainDlg.cpp文件中的相关函数一起去掉。

// MainDlg.cpp : implementation of the CMainDlg class

//

/////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "resource.h"

#include "MainDlg.h"

11. xml文件中的内容添加

def_string.xml

<string>

</string>

def_skin.xml

<skins>

</skins>

def_style.xml

<style>

<style>

dlg_main.xml

<layer title="HelloKUI" width="800" height="600" appwin="1" resize="1">

</layer>

12. 终于可以运行

编译程序,可以直接运行了。

运行后,程序显示一个黑色背景的对话框。无法关闭。

停止调试(或者结束进程)吧。

13. 添加控件及事件响应

// todo : 目标二

14. xml资源介绍及美化

// todo : 目标三

样例程序下载

http://download.csdn.net/detail/everettjf/4316879

参考资料

KUI中xml元素定义与代码中类的对应:

http://www.cppblog.com/everett/archive/2012/02/18/165907.html 

结束语

hardwork but value .

你可能感兴趣的:(011 - 问,如何使用KUI创建一个界面程序?目标一:显示出对话框)