佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1093|回复: 1

制作可换肤的程式界面(Skinable UI)

[复制链接]
发表于 27-10-2006 05:24 PM | 显示全部楼层 |阅读模式
如题,想请教各位有经验的朋友,这些基本是如何达到。
小章鱼想到的是如游戏般,抛开 Windows 自带的图象,自己绘,不过如此效率一定很差。
应该有更好的方法,像直接替代 Windows UI 的图象等。

希望各位可以在此讨论讨论相关的制作、方法、技巧等。
回复

使用道具 举报


ADVERTISEMENT

发表于 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 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 23-5-2024 07:35 AM , Processed in 0.054865 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表