一種全新的軟體介面設計方法(續)

來源:互聯網
上載者:User

一種全新的軟體介面設計方法(續)

點擊下載文章所附代碼

撰文:Aweay

你可轉載,拷貝,但必須加入作者署名Aweay,如果用於商業目的,必須經過作者同意。

前段時間,筆者寫了一篇關於使用Web頁面設計見面用於Win32應用程式的文章,詳細內容請點擊這裡參考此文。但很可惜很多網友發mail說不知道我寫的是什麼,不就是設計網頁嘛,早都有的技術為什麼說是“全新的”的呢?還有網友提出如何?像網際飛音那樣的自訂協議,比如安裝網際飛音後中瀏覽器會處理dnmp://cmd/15這樣的地址,結果開啟了網際飛音程式,問我能不能也用我文中提到的方法實現?還有什麼WebCatcher://只類的東西,我也忘記了。為此作者決定再一篇續,補充討論一些東西,並試圖解決上面網友的問題,如果您還沒有看過上面文章,建議您先參考一下,其實我認為已經寫的非常清楚了,如果您已經是老讀者了,那我們繼續。

首先我在文中討論到的介面設計技術在國內的軟體中很少見到,在知名軟體中,我也就見過Windows,Visual Studio.Net IDE工具,Norton Anti Virus,Borland C# Builder使用,可是說也是非常少的,雖然鮮有軟體使用這樣的技術設計介面,但我個人認為這是軟體介面設計的一個方向,或者說趨勢吧,所以就試圖去研究這樣的技術,並介紹給大家,如果您還不明白,我用CyberArticle(因為有人問如何?這個軟體的某些部分,我就安裝了,發現挺好用)來說明一下:

這個介面是用於顯示使用者收藏的技術文章,在傳統的介面設計中,我們可以使用ListView32來實現,但這裡使用的InternetExplorer_Server,也就是Web頁面,如果點擊"移動到..."按鈕,就會彈出一個對話方塊(本地代碼),

我們知道在網頁裡是不能直接調用本地代碼的,當然您可以使用COM,但是在我那篇文章裡已非常清楚的說明了為什麼不使用COM,所以這裡也不是使用COM,那麼他怎麼做到的呢?有什麼好處呢?呵呵,這些問題在上面文章裡也有介紹,詳細內容請點擊這裡參考此文。

這就是這種技術,結合網頁表現介面的簡潔,又作到了介面使用的靈活性,還是這個這個軟體,如果我們開啟一個收藏的文章,網頁的串連地址是類似於CyberArticle://15這樣的地址,而不是我們常見的URL地址(這就是別人的問題,問我為什嗎?如何?),點擊這個地址後軟體會開啟一個本地的臨時網頁,裡面是使用者收藏的文章,是不是很神氣呢?如果仔細考慮這個軟體的實現,我想必須這樣做才好。

其實如果仔細看我的上篇文章,關於這個問題是可以解決的,在上篇文章中我們提到IDocHostUIHandler有很多虛擬方法,重載實現後可以定製瀏覽器的功能,在IDocHostUIHandler中有一個虛擬方法:TranslateUrl,這個方法可以給程式員一次自己解析URL地址的機會,這是我們判斷需要解析的URL是否是我們需要的CyberArticle://格式,如果是,取得後面資訊做相應處理,如果不是原樣返回給IE。代碼如下:

virtual HRESULT STDMETHODCALLTYPE TranslateUrl(    /* [in] */ DWORD dwTranslate,    /* [in] */ OLECHAR __RPC_FAR *pchURLIn,    /* [out] */ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut) {        String addr=WideString(pchURLIn);        if(addr.SubString(1,5)=="siney")        {          WCHAR* home=L"http://siney.nease.net/index.htm";          WCHAR* soft=L"http://siney.nease.net/myproj/MySoft.htm";          WCHAR* article=L"http://siney.nease.net/dialy.htm";          WCHAR* nd=0;          String section=addr.SubString(9,10);          if(section=="home/")            nd=home;           else if (section=="soft/")            nd=soft;          else if (section=="article/")            nd=article;          else            return S_FALSE;                      size_t ln=wcslen(nd);                  *ppchURLOut = (LPOLESTR)CoTaskMemAlloc((ln + 1) * sizeof(WCHAR));          wcscpy(*ppchURLOut, nd);          return S_OK;        }        else          return S_FALSE;  }

上面的代碼中,我們處理以siney://前置的協議URL地址類型,其他忽略,為此我們設計這樣的html代碼:

<html>
<head>
<SCRIPT language="JScript">
function MyFunc()
{
external.HelloWorld();
}
</SCRIPT>
</head>
<body>
<input type="Button" value="Show hello world" onClick="MyFunc();" />點擊按鈕後下面EditBox(本地的)會顯示文字
<br>
<a href="siney://home">我的首頁 siney://home</a><br>
<a href="siney://soft">我的軟體 siney://soft</a><br>
<a href="siney://article">我的文章 siney://article</a><br>
</body>
</html>

這樣當瀏覽器裡訪問siney://home這樣地址的時候,就會來到我們首頁地址,同樣上面的html代碼僅限於我們自己的定製瀏覽器可以訪問,如果使用IE開啟這個html檔案,則訪問是失敗的,類似於上篇文章一樣。

到這裡我以為已經解決網友的問題,但我發現網際飛音的dnmp協議類型地址在任何基於IE的瀏覽器都能被準確執行(甚至FireFox也可以,Opera不行),比如:dnmp://45765adsf465a4sdf568a6d7s可能開啟網際飛音播放一首mp3,說明它使用了不同的方法,經過一番研究,我發現它使用了更簡單的方法,就是在註冊表裡註冊一個索引值,類似於註冊一個副檔名一樣,不同的是多了一個URL Protocol

這樣,只要註冊了相應協議類型的程式,IE就會在必要時把地址作為參數傳遞給註冊的程式處理,這點同樣類似於註冊檔案類型。

到這裡,我們已經解決了全部問題,如果大家還有什麼問題可以多看看MSDN和一些COM相關的東西,如果有什麼想法或者心得也歡迎您與我取得聯絡:siney@yeah.net

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.