天天看點

如何選擇VC界面庫産品?(三)— DirectUI 界面庫介紹

原文位址::http://www.uieasy.com/cn/blog/?p=479

客戶經常來信詢問該如何選擇界面庫産品: 

“你們的産品跟其他同類産品相比有什麼優勢?” 

“你們的DSkinLite界面庫跟DirectUI界面庫有什麼不同,哪個産品更适合我們公司?” 

上一篇文章: 

      如何選擇VC界面庫産品(二)–- DSkinLite界面庫介紹 

    本文主要介紹UIEASY DirectUI庫界面産品的特點及優勢。

如何選擇VC界面庫産品?(三)— DirectUI 界面庫介紹
 UIEASY DirectUI界面庫産品

DirectUI界面庫背景知識 

        DirectUI界面庫使用XML來描述界面風格,界面布局,使用腳本語言(如vbscript,javascript,lua)等來作為界面元素和程式邏輯的互動。從這方面來看,DirectUI界面庫可以看成是一個迷你的微軟WPF,mozilla XUL,或者Adobe的Flex,這些平台代表的應用程式的發展方向,同時也有很多相似的架構,比如多采用類似XML的方式描述定義界面,使用腳本語言 (xul使用javascript,flex使用Action Script)來作為控制界面元素并和程式邏輯之間互動。

        DirectUI 界面庫采用相似的設計,使用xml描述界面,同時使用javascript / vbscript來作為界面和邏輯的粘合。在控件設計方 面,DirectUI界面庫更多的融入了XUL,WPF,Flex等控件設計理念,并沒有一味的照搬window标準控件,以期望其成為一款真正使用實用的界面庫。

UIEASY DirectUI界面庫 

    UIEASY于2008年正式推出DirectUI界面庫産品,是國内外最早推出的DirectUI類界面産品。DirectUI界面庫深受歡迎,同時其首創的界面設計思路影響了衆多國内外界面開發人員,目前大多數國内外DirectUI類型界面産品大多都采用了我們的界面設計思路。

     UIEASY DirectUI界面庫産品不僅是一款界面庫産品,也是一種全新的界面庫設計架構。如果您是界面開發人員,無論您否有意選擇我們的産品,都可以下載下傳我們的産品,了解我們的産品設計思路,相信會對您的界面開發帶來全新的思路。

如何選擇VC界面庫産品?(三)— DirectUI 界面庫介紹
UIEASY DirectUI界面庫有以下主要特點:

XML配置界面

支援XML配置應用程式界面的虛拟控件及Win32控件,同時可以布局界面。在DirectUI界面庫中,界面元素分為虛拟控件(Windowless 控件)和Win32控件。如下圖所示:

如何選擇VC界面庫産品?(三)— DirectUI 界面庫介紹

可在XML中定義Windowsless控件,Win32 控件,并定義界面布局;同時也可以在XML中定義控件元素風格。

事件與腳本

          支援腳本語言。通過使用腳本語言來實作界面元素和程式邏輯之間互動,可以簡化代碼的編寫與調試。 

  1. 為什麼需要腳本語言? 

           DirectUI界面庫内部會建立一些虛拟控件,如label,button,checkbox等,這些虛拟控件主要用以顯示界面和響應事件。同時我們在程式中,也需要改變這些控件屬性,如顯示/隐藏,位置變化等。如果像MFC等架構那樣處理,則應用程式需要直接操作這些虛拟控件類,造成程式邏輯與界面操作深度交叉,違背了我們将程式與腳本分離的初衷;同時應用程式将依賴一系列新的UI類,程式變得複雜,也帶來不穩定性。 

          鑒于這種情況,很多界面架構都引入腳本,用以控制界面元素并響應事件。在UIEASY的DirectUI界面庫中,我們也引入的腳本控制。每個界面控件都會對應一個腳本對象,這樣開發人員可以在腳本中操作此控件。 

          通過腳本的引入,内部虛拟控件對應用程式來說是不可見的。這樣極大的減少應用程式對界面庫的依賴,簡化了程式。

  2. 腳本控制界面控件屬性 

         腳本一個重要作用就是控制界面控件的屬性。如下腳本代碼: 

    01

    function

    Window::OnInit()

    02

    {

    03

    edit1.title = 

    "DirectUI is powerful gui library! "

    ;

    04

    edit2.title = 

    "DirectUI is powerful gui library!"

    ;

    05

    search_edit2.title = 

    "DirectUI is powerful gui library!"

    ;

    06

    win32button1.title = 

    "NotifyScript1"

    ;

    07

    win32button2.title = 

    "NotifyScript2"

    ;

    08

    09

    }

    10

    function

    Button2::onClick(cx,cy)

    11

    {

    12

    //Hide the CheckBoxGroup

    13

    if

    (progress1.value >= 100)

    14

    progress1.value = 0;

    15

    else

    16

    progress1.value = progress1.value + 10;

    17

    18

    if

    (progress2.value >= 100)

    19

    progress2.value = 0;

    20

    else

    21

    progress2.value = progress2.value + 10;

    22

    23

    if

    (progress3.value >= 100)

    24

    progress3.value = 0;

    25

    else

    26

    progress3.value = progress3.value + 10;

    27

    }

以上代碼在相應的程式中,設定控件edit title,設定progress控件value。 在DirectUI界面庫中,腳本支援控制虛拟控件屬性,也支援控制Win32控件屬性。

3.    響應來自虛拟控件的事件

        虛拟控件為DirectUI建立的邏輯控件,應用程式無法獲得其事件。這樣我們通過腳本将将相應的事件傳遞出來,發送到應用程式中。如以下代碼:

1

function

linkSkinCmd1::onClick(cx, cy)

2

{

3

var

str = 

"http://www.uieasy.com"

;

4

Window.OnSkinCmd (101, str);

5

}

以上代碼相應linkSkinCmd1虛拟控件的click消息,并通知應用程式。

4.  響應來自應用程式的事件

     在實際程式開發中,有些時候需要根據程式邏輯來控制界面虛拟控件的屬性等。這種需求也通過腳本來實作。如以下代碼:

01

function

Window::OnNotify(code, var1)

02

{

03

if

(code == 1000)

04

{

05

if

( Button1.title == 

"HideCheck"

)

06

Button1.title = var1;

07

else

if

( Button1.title == 

"New Text"

)

08

Button1.title = 

"HideCheck"

09

}

10

else

if

( code == 1001)

11

{

12

if

(slider1.pos >= 100)

13

slider1.pos = 0;

14

else

15

slider1.pos = slider1.pos + var1

16

}

17

}

以上代碼根據程式發送過來的消息,設定虛拟控件的titile,slider控件的pos等。

下一篇文章:

       如何選擇VC界面庫産品?(四)— DSkinLite vs DirectUI

繼續閱讀