查看: 1137|回复: 1
|
制作可换肤的程式界面(Skinable UI)
[复制链接]
|
|
如题,想请教各位有经验的朋友,这些基本是如何达到。
小章鱼想到的是如游戏般,抛开 Windows 自带的图象,自己绘,不过如此效率一定很差。
应该有更好的方法,像直接替代 Windows UI 的图象等。
希望各位可以在此讨论讨论相关的制作、方法、技巧等。 |
|
|
|
|
|
|
|
发表于 29-10-2006 03:35 PM
|
显示全部楼层
小章鱼想到的是如游戏般,抛开 Windows 自带的图象,自己绘,不过如此效率一定很差。
效率高低是程式寫法的問題。
多數程式都是用Windows Control来作爲界面,比如Button, Label, Textbox, Listbox等。這些控制其實都是window,也就是说,每个控制都有一个window handle。这种程式要换肤,就要在這些控制的wm_paint里画出你想要的樣子。比如在C#,就是override這些控制的OnPaint。當然,你也可以創造完全新的控制。
换肤的時候,其實就是换這些控制的屬性(properties),然後叫所有控制重新paint过(C#里就是叫Control.Refresh)。OnPaint就根據這些屬性来畫出界面。
另一种程式,其主要界面很少或根本沒用Windows Control, 比如遊戲,IE, Firefox, WinAmp等。這些程式有自己的視窗系統或物件系統。
拿IE来说,当你打开Google主页时,会出現一些控制:搜索的textbox,Search按鈕,一些连结等。這些控制其實都沒有window handle,它們是IE自己的物件。因爲沒有window handle, 有人称這些控制为windowless control。
爲什麽要這樣做?因爲這些控制所使用的資源比真正的window少,也比真正的window有更大的自由度。
这种程式较难写,因爲有許多東西必須自己动手。你必須自己計算滑鼠目前在哪个控制上,必須自己排列z-order等,必須自己写出event系統。
.NET 3.0 里的 Windows Presentation Foundation (WPF) 就是这種東東。
[ 本帖最后由 fxam 于 29-10-2006 03:36 PM 编辑 ] |
|
|
|
|
|
|
| |
本周最热论坛帖子
|