前面已經發布了分離後的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"
然後寫入口函式
完整**:
view plain
copy to clipboard
print?
#include "stdafx.h"
#include "./mainwnd.h"
//hinstance g_hinstance;
////
//int winapi _twinmain( hinstance hinstance, hinstance hprevinstance,
lptstr lpcmdline, int ncmdshow)
三、視窗函式定義
下面接著要編寫主視窗類了
其中標頭檔案mainwnd.h如下:
view plain
copy to clipboard
print?
#pragma once
#include "stdafx.h"
class cmainwnd : public ckuidialogimpl
, public cwhroundrectframehelper
; 實現檔案mainwnd.cpp如下:
view plain
copy to clipboard
print?
#include "stdafx.h"
#include "./mainwnd.h"
cmainwnd::cmainwnd(void) : ckuidialogimpl( "idr_dlg_main" )
cmainwnd::~cmainwnd(void)
void cmainwnd::ondestroy()
void cmainwnd::onbkbtnmax()
else
} void cmainwnd::onbkbtnmin()
void cmainwnd::onbkbtnclose()
下面對**關鍵部分進行說明:
主視窗繼承自兩個類
ckuidialogimpl是對話方塊視窗實現模版,主視窗繼承自該類,沒有接觸模版的同學可能對該寫法有些奇怪,看看模版介紹就可以了。
cwhroundrectframehelper是乙個異型視窗輔助,實現了圓角視窗。
view plain
copy to clipboard
print?
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()
上面這些巨集映**控制項通知到相應的函式
view plain
copy to clipboard
print?
begin_msg_map_ex(cmainwnd)
msg_kui_notify(idc_richview_win)
chain_msg_map(ckuidialogimpl)
chain_msg_map(cwhroundrectframehelper)
//msg_wm_initdialog(oninitdialog)
//msg_wm_syscommand(onsyscommand)
msg_wm_destroy(ondestroy)
reflect_notifications_ex()
end_msg_map()
上面這些巨集映**視窗訊息到對應函式。
這些**作用跟mfc的訊息對映作用是一樣的,但實作手法有些差異。其實wtl的更原始。
實現部分的**就比較簡單了。
四、最後就是資源的新增了。
可以參考sample1.rc檔案,直接在相應位置新增一行
kuires.dat skin "res//sample1.kui"
至此kui庫整個使用過程就是如此簡單。
你需要做的就是定義主視窗的訊息處理及函式而已。
金山衛士介面 tinyxml
tinyxml就不用介紹了。金山衛士中使用tinyxml作為xml解析。tinyxml有乙個缺點,就是不能支援unicode,這個問題也是眾所周知的。但程式已經採用unicode編碼了,還想用金山衛士的介面,暫時的權宜之計如下 1,tinyxml不影響從文字中讀取的文字內容 2,tinyxml不影響...
JDK原始碼解讀 Collection(介面)
collection介面是對儲存資料的容器的抽象,裡面定義的方法其實就是容器應該具有的功能。boolean add e e boolean addall collection c boolean remove object o boolean removeall collection c void ...
JDK原始碼解讀 Iterator(介面)
1.hasnext 判斷是否還有元素 boolean hasnext 2.next 返回下乙個元素 e next 3.remove default void remove 一般集合都提供了remove方法,為什麼迭代器介面還要提供乙個介面呢?其實如果在iterator迭代操作的時候,collecti...