|
9月11日
Visual FoxPro 下的 Vista Aero Glass標(biāo)題:Vista's Aero Glass for Visual FoxPro
翻譯:xinjie
Aero Glass 效果 當(dāng)透明表單剛剛出現(xiàn)時(shí),就已經(jīng)有了一些關(guān)于它的一些技術(shù),它是來自 Windows Vista 的具有強(qiáng)烈震撼的 Aero Glass 效果。我的看法是,Aero Glass 效果是一個(gè)決定性的要素,它標(biāo)志著一個(gè)應(yīng)用程序可以運(yùn)行于 Windows Vista 。所以,一些開發(fā)者針對(duì)他們的應(yīng)用程序找到一些方式使它看上去非常像 Aero Glass 效果,這并不是特別能認(rèn)人感到驚喜。Bernard Bout 在他的博客中提供了一些非常好的示例。它需要開發(fā)時(shí)有好的視力,可以從 Cesar Chalom 和 GDI+ 可以得到一些幫助,它是 Windows Vista 的 Aero Glass 入門指南,Bernard 已經(jīng)給我留下了印象(隨后我也說出了我的看法)。請(qǐng)參看下面的他的博客連接來查看我討論過什么。 Visual FoxPro 怎樣運(yùn)行于 Vista 創(chuàng)建一個(gè)具有 Aero Glass 效果的 Visual FoxPro 應(yīng)用程序非常容易。頂層表單(ShowWindow = 2)可以自動(dòng)適應(yīng)(標(biāo)題欄、控件和邊框)Aero Glass 。這是一件好事,Visual FoxPro 不需要改變就可以在微軟提供的操作系統(tǒng)中得到最新最好的視覺效果(還記得在 VFP 中增加的主題支持嗎?)。替代方案并不是真實(shí)的,這種方案才是真實(shí)的(參看下面的截圖,一個(gè) ShowWindow = 0 或 1 的 VFP 表單)。
在開始之前需要了解的 我知道你在讀這些內(nèi)容時(shí)在想什么:“Craig, 你在這里講的 Windows Vista 中實(shí)現(xiàn) Aero Glass 效果和其他已經(jīng)展示的方法相比,沒什么新的東西!”。 然而,你大概還沒有看到過在客戶區(qū)域(表面的區(qū)域)顯示出 Aero Glass 效果的 VFP 表單(我不相信你曾經(jīng)看到過),這就是我要討論的東西。下面的截圖是一個(gè)例子,也就是我要討論的東西。
它是如何做到的? 為了實(shí)現(xiàn)它,我使用了來自 Windows Vista 中 Desktop Window Manager API (dwmapi.dll) 的函數(shù) DwmExtendFrameIntoClientArea 。在 MSDN 中該函數(shù)是這樣聲明的: HRESULT DwmExtendFrameIntoClientArea( 并且,MARGINS 結(jié)構(gòu)(參看上面代碼的 pMarInset 參數(shù))是這樣定義的: typedef struct _MARGINS{ 我將它轉(zhuǎn)換成下面的聲明格式,并且將代碼增加到運(yùn)行于 Windows Vista 的 Visual FoxPro 9.0 的頂層表單的 Init() 事件中: DECLARE LONG DwmExtendFrameIntoClientArea IN dwmapi.dll Long hwnd, string @ pMarInset 這段代碼在我的頂層表單中并沒有顯示出任何效果,我知道我遇到了一個(gè)難題。答案來自 article out on Code Project 。它指出,DwmExtendFrameIntoClientArea 函數(shù)的工作需要將作為神奇的 Aero Glass 效果的像素設(shè)置它們自己的 Alpha channel ,且設(shè)置為 0 。并且,文章指出,最容易的方式就是將這些像素設(shè)置為黑色。 所以,相比于綁定 windows 消息,我選擇使用 GDI+ 來實(shí)現(xiàn)它(我確信可以),在表單中使用一些黑色的 VFP shapes 。我在表單中放置了 4 個(gè) shape ,并且設(shè)置了它們的寬高(依賴于它們所在的位置),以匹配我已經(jīng)賦值的 m.lnGlassLeft、m.lnGlassRight、m.lnGlassTop 和 m.lnGlassBottom (參看上面的代碼,我偽造了一個(gè) MARGINS 結(jié)構(gòu))。設(shè)計(jì)結(jié)束的表單,在設(shè)計(jì)器中就是下面截圖這個(gè)樣子。并且,當(dāng)我運(yùn)行它時(shí),我得到了一個(gè)在客戶區(qū)域具有 Aero Glass 效果的 VFP 表單!
這樣做的好處是什么? 使用這個(gè)方法已經(jīng)設(shè)計(jì)出了很多偉大的 UI 示例。如果你在 Code Project article 查找的話,可以找到很多。簡(jiǎn)而言之,針對(duì) Visual FoxPro 應(yīng)用程序,用它來創(chuàng)建 UI 的結(jié)構(gòu)是一個(gè)好方法。 一個(gè)很好的應(yīng)用就是創(chuàng)建一個(gè)頂層表單,它具有狀態(tài)欄,其中包含一個(gè)進(jìn)度條和其他一些控件。下面的圖片是一個(gè)簡(jiǎn)單的示例,展示了它的效果。我使用了和上面同樣的代碼,僅僅更改參數(shù) m.lnGlassBottom 為 50 (其他都設(shè)置為 0) ,且底部的 shape 的背景色設(shè)置為黑色。
還需要做更多的工作 這個(gè)概念的證明并沒有完成,我們需要放置在客戶區(qū)域的任何 VFP 類/控件 都可以使用 Aero Glass 效果,但是存在一些問題。這是因?yàn)椋憧梢赃@樣假設(shè),任何的東西都是黑色的(像前景色和背景色),都可以轉(zhuǎn)換成半透明。圍繞這個(gè)有幾種方法來使用 ActiveX 控件/Windows 類 ,就像我在表單上使用 Microsoft ProgressBar Control(5.0 sp2)。另一些方法就是使用圖形元素和使用 GDI+ 的文本。在這方面,來自 Visual FoxPro 9.0 中的 _gdiplus.vcx 和 VFPX 中 GDIPlusX project 可以很好的處理它。無論如何,我們知道在 Visual FoxPro 9 中很容易的實(shí)現(xiàn) Aero Glass 效果是很好的消息。我對(duì)找到如此簡(jiǎn)單的實(shí)現(xiàn)方法既感到高興,又有些驚訝。 一直到下次... Visual FoxPro 前進(jìn)!
|
|
|