用 .Net 語言寫 WinForm 應用時,很多系統控件都帶有很漂亮的樣式,今天休息隨便在網絡上逛逛,又看到 DougHennig 的 Call .Net Code from VFP 的文章,看到其中調用 OpenFileDialog 的代碼,界面確實不錯,可惜作者采用的方法是先用 .Net 生成一個 DLL,再給 vfp 使用,有了這個組件,還有必要另外用 C# 再寫一個 COM 來調用嗎?轉到出品 wwDotnetBridge 的西風公司網頁,大致重溫了下這個組件的功能和用法,然后嘗試用 vfp 實現了直接用這個組件來調用 OpenFileDialog 類的方法。
用 vfp 自帶的 GetFile 函數的界面是這樣:

用 .Net 組件的界面是這樣:類定義參見:OpenFileDialog 類

對于選擇文件夾,如果使用 .Net 提供的 FolderBrowserDialog 類,與 vfp GetDir 函數帶 BIF_NEWDIALOGSTYLE 參數的樣式沒有區別;如果想顯示與上面相似的樣式,則需要使用微軟提供的擴展庫 Microsoft Windows API Code Pack 才行,樣式如下:

聯想到之前論壇上網友要實現的 hmac 簡約算法,直接用這個組件調用 .Net 類,也可以很容易的實現這個算法:類定義參見:HMAC 類

示例代碼:http://download.csdn.net/detail/dkfdtf/9758533 (重要:下載后右擊壓縮包,屬性 -> 解除鎖定,然后再解壓,否則, .Net 會阻止裝入 wwDotNetBridge.dll)
/* -------------------------------------------------------------------------------------------------
補充:對于重載過的枚舉值,這個組件指定起來還真是有些麻煩,例如,上面示例中,如果想指定初始文件夾為桌面,.Net 語言一句就搞掂:
OpenFileDialog1.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop)然而使用這個組件來指定,卻需要這樣:m.oo = m.oDotNet.CreateComValue()m.cc = m.oDotNet.InvokeStaticMethod('System.Environment', 'GetFolderPath' ; , m.oo.SetEnum('System.Environment.SpecialFolder.Desktop'))m.oDotNet.Set參考連接:
1. Calling .NET Code from VFP the Easy Way
2. Calling .NET Components from Visual FoxPro with wwDotnetBridge
3. .NET Interop for Visual FoxPro made easy
4. Class wwDotNetBridge - West Wind Client Tools
新聞熱點
疑難解答