国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

金山衛(wèi)士界面源碼解讀及界面庫分離(2)

發(fā)布時(shí)間:2011-3-29 21:57    發(fā)布者:1770309616
金山衛(wèi)士界面源碼解讀及界面庫分離.pdf (239.76 KB)


前面已經(jīng)發(fā)布了分離后的Kui代碼,我們繼續(xù),下面來解釋該代碼庫的使用.
首先要說下Kui框架的一些基礎(chǔ)概念:
一、
金山界面庫不使用Windows的窗口布局,只是使用Windows的窗口作為一個(gè)載體,整個(gè)窗口都只是作為一個(gè)繪制面,
而Kui對窗口實(shí)行重新布局,取消了原窗口非客戶區(qū)和客戶區(qū)的概念.而自己對窗口劃分為上中下三個(gè)部分.
上部分為Header,一般作為窗口標(biāo)題欄,可以放置縮小,最大化,關(guān)閉按鈕,
中部分為Body,是窗口主要功能操作區(qū)域,
下部分為Footer,一般作為狀態(tài)顯示.
這部分說明主要是為了以后寫XML時(shí)使用.
二、
Kui將使用到的諸如圖片,布局定義xml等文件使用zip打包,并按資源名"kuires.dat",資源類別為"SKIN",保存到運(yùn)行程序的資源里
三、
Kui庫使用xml格式定義控件及資源的布局,這也是通常DirectUI的做法(xml布局,腳本控制[Kui里面沒使用],windowless)。
有了以上的概念就可以使用Kui來進(jìn)行界面開發(fā)了。
同學(xué)們可以參考第一個(gè)樣例程序----該程序在客戶區(qū)顯示經(jīng)典的hello world.并且對窗口外框進(jìn)行了美化。
一、建立工程
首先使用向?qū)Ы⒁粋(gè)Win32程序,對!是Win32程序,選擇了Kui,你將不能使用MFC編程了,因?yàn)闆]有了MFC的窗口概念。
你將應(yīng)用微軟的另一個(gè)庫進(jìn)行程序開發(fā)----WTL。
好處就是開發(fā)出來的程序不會那么臃腫了,缺點(diǎn)嘛,就是沒有MFC那么方便了。
不過習(xí)慣了也沒什么的。都是同一家公司的技術(shù),所以肯定各有好處。
二、編寫入口程序
首先當(dāng)然是包含庫文件,在stdafx.h中定義
// 界面庫
#include "../../include/KUILib.h"
然后寫入口函數(shù)
WTL的程序都有一個(gè)程序?qū)嵗cMFC的CWinApp對應(yīng),但Kui對它進(jìn)行了繼承以完成了一些初始化操作,你可以直接使用該類來定義實(shí)例。如Sample1所示:
HINSTANCE g_hInstance; // 定義實(shí)例句柄,必須的。
CKuiApp _Module;//用Kui的默認(rèn)類,其中CMainWnd是模版參數(shù),是使用的主窗口類,后面會解釋,定義一個(gè)實(shí)例,你也可以繼承新的類。
CAppModule* _ModulePtr = &_Module;// 定義實(shí)例指針,必須的。
完整代碼:
view plaincopy to clipboardprint?
01.#include "stdafx.h"   
02.#include ".\mainwnd.h"   
03.  
04.  
05.//   
06.HINSTANCE g_hInstance;   
07.//   
08.CKuiApp _Module;   
09.CAppModule* _ModulePtr = &_Module;   
10.//   
11.//   
12.  
13.int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,   
14.    LPTSTR lpCmdLine, int nCmdShow)   
15.{   
16.    g_hInstance = hInstance;   
17.  
18.  
19.    _Module.Init( hInstance );   
20.    _Module.Main();   
21.    _Module.UnInit();   
22.  
23.      
24.    return 0;   
25.}  
#include "stdafx.h"
#include ".\mainwnd.h"

//
HINSTANCE g_hInstance;
//
CKuiApp _Module;
CAppModule* _ModulePtr = &_Module;
//
//
int WINAPI _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
g_hInstance = hInstance;

_Module.Init( hInstance );
_Module.Main();
_Module.UnInit();

return 0;
}
三、窗口函數(shù)定義
下面接著要編寫主窗口類了
其中頭文件MainWnd.h如下:
view plaincopy to clipboardprint?
01.#pragma once   
02.#include "stdafx.h"   
03.class CMainWnd : public CKuiDialogImpl   
04.    , public CWHRoundRectFrameHelper   
05.{   
06.public:   
07.    CMainWnd(void);   
08.    virtual ~CMainWnd(void);   
09.    void OnDestroy();   
10.  
11.    void OnBkBtnClose();   
12.    void OnBkBtnMax();   
13.    void OnBkBtnMin();   
14.      
15.  
16.    KUI_NOTIFY_MAP(IDC_RICHVIEW_WIN)   
17.        KUI_NOTIFY_ID_COMMAND(60001, OnBkBtnClose)   
18.        KUI_NOTIFY_ID_COMMAND(60002, OnBkBtnMax)   
19.        KUI_NOTIFY_ID_COMMAND(60003, OnBkBtnMin)   
20.        //KUI_NOTIFY_TAB_SELCHANGE(IDC_TAB_MAIN, OnBkTabMainSelChange)   
21.    KUI_NOTIFY_MAP_END()   
22.  
23.    BEGIN_MSG_MAP_EX(CMainWnd)   
24.        MSG_KUI_NOTIFY(IDC_RICHVIEW_WIN)   
25.        CHAIN_MSG_MAP(CKuiDialogImpl)   
26.        CHAIN_MSG_MAP(CWHRoundRectFrameHelper)   
27.  
28.        //MSG_WM_INITDIALOG(OnInitDialog)   
29.        //MSG_WM_SYSCOMMAND(OnSysCommand)   
30.        MSG_WM_DESTROY(OnDestroy)   
31.           
32.        REFLECT_NOTIFICATIONS_EX()   
33.    END_MSG_MAP()   
34.};  
#pragma once
#include "stdafx.h"
class CMainWnd : public CKuiDialogImpl
, public CWHRoundRectFrameHelper
{
public:
CMainWnd(void);
virtual ~CMainWnd(void);
void OnDestroy();
void OnBkBtnClose();
    void OnBkBtnMax();
    void OnBkBtnMin();

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_TAB_SELCHANGE(IDC_TAB_MAIN, OnBkTabMainSelChange)
    KUI_NOTIFY_MAP_END()
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()
};

實(shí)現(xiàn)文件MainWnd.cpp如下:
view plaincopy to clipboardprint?
01.#include "stdafx.h"   
02.#include ".\mainwnd.h"   
03.  
04.  
05.CMainWnd::CMainWnd(void) : CKuiDialogImpl( "IDR_DLG_MAIN" )   
06.{   
07.}   
08.  
09.CMainWnd::~CMainWnd(void)   
10.{   
11.}   
12.  
13.void CMainWnd::OnDestroy()   
14.{   
15.    PostQuitMessage(0);   
16.}   
17.  
18.  
19.void CMainWnd::OnBkBtnMax()   
20.{   
21.    if (WS_MAXIMIZE == (GetStyle() & WS_MAXIMIZE))   
22.    {   
23.        SendMessage(WM_SYSCOMMAND, SC_RESTORE | HTCAPTION, 0);   
24.    }   
25.    else  
26.    {   
27.        SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE | HTCAPTION, 0);   
28.    }   
29.}   
30.  
31.void CMainWnd::OnBkBtnMin()   
32.{   
33.    SendMessage(WM_SYSCOMMAND, SC_MINIMIZE | HTCAPTION, 0);   
34.}   
35.  
36.void CMainWnd::OnBkBtnClose()   
37.{   
38.    DestroyWindow();   
39.}  
#include "stdafx.h"
#include ".\mainwnd.h"

CMainWnd::CMainWnd(void) : CKuiDialogImpl( "IDR_DLG_MAIN" )
{
}
CMainWnd::~CMainWnd(void)
{
}
void CMainWnd::OnDestroy()
{
    PostQuitMessage(0);
}

void CMainWnd::OnBkBtnMax()
{
if (WS_MAXIMIZE == (GetStyle() & WS_MAXIMIZE))
{
  SendMessage(WM_SYSCOMMAND, SC_RESTORE | HTCAPTION, 0);
}
else
{
  SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE | HTCAPTION, 0);
}
}
void CMainWnd::OnBkBtnMin()
{
SendMessage(WM_SYSCOMMAND, SC_MINIMIZE | HTCAPTION, 0);
}
void CMainWnd::OnBkBtnClose()
{
DestroyWindow();
}
下面對代碼關(guān)鍵部分進(jìn)行說明:
主窗口繼承自兩個(gè)類
CKuiDialogImpl 是對話框窗口實(shí)現(xiàn)模版,主窗口繼承自該類,沒有接觸模版的同學(xué)可能對該寫法有些奇怪,看看模版介紹就可以了。
CWHRoundRectFrameHelper 是一個(gè)異型窗口輔助,實(shí)現(xiàn)了圓角窗口。
view plaincopy to clipboardprint?
01.KUI_NOTIFY_MAP(IDC_RICHVIEW_WIN)   
02.        KUI_NOTIFY_ID_COMMAND(60001, OnBkBtnClose)   
03.        KUI_NOTIFY_ID_COMMAND(60002, OnBkBtnMax)   
04.        KUI_NOTIFY_ID_COMMAND(60003, OnBkBtnMin)   
05.    KUI_NOTIFY_MAP_END()  
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()

上面這些宏映射了控件通知到相應(yīng)的函數(shù)
view plaincopy to clipboardprint?
01.BEGIN_MSG_MAP_EX(CMainWnd)   
02.  MSG_KUI_NOTIFY(IDC_RICHVIEW_WIN)   
03.  CHAIN_MSG_MAP(CKuiDialogImpl)   
04.  CHAIN_MSG_MAP(CWHRoundRectFrameHelper)   
05.  
06.  //MSG_WM_INITDIALOG(OnInitDialog)   
07.  //MSG_WM_SYSCOMMAND(OnSysCommand)   
08.  MSG_WM_DESTROY(OnDestroy)   
09.     
10.  REFLECT_NOTIFICATIONS_EX()   
11. END_MSG_MAP()  
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()

上面這些宏映射了窗口消息到對應(yīng)函數(shù)。
這些代碼作用跟MFC的消息映射作用是一樣的,但實(shí)作手法有些差異。其實(shí)WTL的更原始。
實(shí)現(xiàn)部分的代碼就比較簡單了。
四、最后就是資源的添加了。
可以參考Sample1.rc文件,直接在相應(yīng)位置添加一行
kuires.dat    SKIN     "res\\sample1.kui"
至此Kui庫整個(gè)使用過程就是如此簡單。
你需要做的就是定義主窗口的消息處理及函數(shù)而已。
本文地址:http://m.qingdxww.cn/thread-60403-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應(yīng)用程序
  • 使用Harmony3加速TCP/IP應(yīng)用的開發(fā)培訓(xùn)教程
  • 集成高級模擬外設(shè)的PIC18F-Q71家族介紹培訓(xùn)教程
  • 探索PIC16F13145 MCU系列——快速概覽
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久精品视频免费观看 | 欧洲第一区第二区第三区 | 99九九视频 | 欧美日韩第一区 | 清纯唯美亚洲综合五月天 | 国产欧美日韩一区二区三区视频 | 免费在线不卡视频 | www.99精品视频在线播放 | 欧洲欧美人成在线视频免费下载 | 精品卡一卡2卡三卡免费 | 日韩一区二区三区四区 | 噜噜噜噜色 | 9色视频在线 | 欧美日韩精品一区二区 | 国产亚洲欧美在线播放网站 | 欧美线在线精品观看视频 | 亚欧免费视频一区二区三区 | 亚洲第一色在线 | 亚洲精品视频在线看 | 国产v日韩v欧美v精品专区 | 国产人免费人成免费视频 | 青青青免费网站在线观看 | 国产在线视频99 | 亚洲精品资源 | 99爱视频 | 91精品国产综合久久福利 | avtt男人天堂 | 欧美人与禽zzz000xxx | 中文字幕在线国产 | 国产在线视频www片 国产在线视频99 | 一级一级特黄女人精品毛片视频 | 麻豆调教 | 国产不卡毛片 | 日韩二三区 | 午夜国产羞羞视频免费网站 | 欧美日韩一区二区中文字幕视频 | 亚洲精品二区 | 日韩在线视频一区二区三区 | 亚洲综合15p | 欧美日韩大尺码免费专区 | 狠狠操五月天 |