原文位址::http://www.uieasy.com/cn/blog/?p=479
客戶經常來信詢問該如何選擇界面庫産品:
“你們的産品跟其他同類産品相比有什麼優勢?”
“你們的DSkinLite界面庫跟DirectUI界面庫有什麼不同,哪個産品更适合我們公司?”
上一篇文章:
如何選擇VC界面庫産品(二)–- DSkinLite界面庫介紹
本文主要介紹UIEASY DirectUI庫界面産品的特點及優勢。
如何選擇VC界面庫産品?(三)— DirectUI 界面庫介紹 UIEASY DirectUI界面庫産品
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iYtVHa09FMxIWb1hGdfV2Zh1WavwVMx8CXwEDMy8CXzRWYvxGc19CX05WZ052bj1Cc39CXn9Gbi9CXuN2Lc12bj5SezFWZpVnL3d3dvw1LcpDc0RHaiojIsJye.png)
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界面庫有以下主要特點:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iYtVHa09FMxIWb1hGdfV2Zh1WavwVMx8CXwEDMy8CXzRWYvxGc19CX05WZ052bj1Cc39CXn9Gbi9CXuN2Lc12bj5SezFWZpVnL3d3dvw1LcpDc0RHaiojIsJye.png)
XML配置界面
支援XML配置應用程式界面的虛拟控件及Win32控件,同時可以布局界面。在DirectUI界面庫中,界面元素分為虛拟控件(Windowless 控件)和Win32控件。如下圖所示:
可在XML中定義Windowsless控件,Win32 控件,并定義界面布局;同時也可以在XML中定義控件元素風格。
事件與腳本
支援腳本語言。通過使用腳本語言來實作界面元素和程式邏輯之間互動,可以簡化代碼的編寫與調試。
-
為什麼需要腳本語言?
DirectUI界面庫内部會建立一些虛拟控件,如label,button,checkbox等,這些虛拟控件主要用以顯示界面和響應事件。同時我們在程式中,也需要改變這些控件屬性,如顯示/隐藏,位置變化等。如果像MFC等架構那樣處理,則應用程式需要直接操作這些虛拟控件類,造成程式邏輯與界面操作深度交叉,違背了我們将程式與腳本分離的初衷;同時應用程式将依賴一系列新的UI類,程式變得複雜,也帶來不穩定性。
鑒于這種情況,很多界面架構都引入腳本,用以控制界面元素并響應事件。在UIEASY的DirectUI界面庫中,我們也引入的腳本控制。每個界面控件都會對應一個腳本對象,這樣開發人員可以在腳本中操作此控件。
通過腳本的引入,内部虛拟控件對應用程式來說是不可見的。這樣極大的減少應用程式對界面庫的依賴,簡化了程式。
-
腳本控制界面控件屬性
腳本一個重要作用就是控制界面控件的屬性。如下腳本代碼:
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建立的邏輯控件,應用程式無法獲得其事件。這樣我們通過腳本将将相應的事件傳遞出來,發送到應用程式中。如以下代碼:
| |
| |
| |
| |
| |
以上代碼相應linkSkinCmd1虛拟控件的click消息,并通知應用程式。
4. 響應來自應用程式的事件
在實際程式開發中,有些時候需要根據程式邏輯來控制界面虛拟控件的屬性等。這種需求也通過腳本來實作。如以下代碼:
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
以上代碼根據程式發送過來的消息,設定虛拟控件的titile,slider控件的pos等。
下一篇文章:
如何選擇VC界面庫産品?(四)— DSkinLite vs DirectUI