1. 程式人生 > >CDHtmlDialog類的使用心得 -- [今天轉幾篇基礎桌面技術文章]

CDHtmlDialog類的使用心得 -- [今天轉幾篇基礎桌面技術文章]

在CDHtmlDialog類使用中,總是會遇到HTML不能正確解析資源的問題。我的經驗如下:

1。使用絕對路徑在資源裡引入HTML網頁和圖片資源:
     使用RES://應用程式名稱/資源型別/#資源號
     例如:如果你的應用程式名為c.exe,html網頁或資源儲存在HTML型別下。並且檢視資源標示號為133,便可以這樣引用:res://c.exe/html/#133。或這樣引用:res
://c:/c.exe/html/#133

2。使用相對路徑引用:
    如果使用方法1,總得去尋找應用程式名稱,如果引入的是html中的圖片,有諸多不便,譬如:應用程式如果改變了名稱,那呼叫便會無效。為了防止這些糾葛,有一個非常好的辦法就是:把所有使用的資源(圖片,CSS,JS等),統統放到HTML資源型別下,引用的時候寫成 res://#資源號

就可以了。譬如上例便可以這樣引用:res:/#133。當然好像res:/ 和res:// 是通用的。

3。FLASH控制元件的支援:
   我沒有在資源裡引用flash成功,看了看flash的官方文件,好像必須為絕對路徑才可以。例如movie=“d://flash//test.swf是可以成功的。

4。不在資源裡引用HTML,直接在本地檔案裡使用。可以在CDHtmlDialog的繼承類裡新增一個函式來處理。

void CDHtmlViewSpec::GotoUrl(LPCTSTR pszUrl) { CString strPath,str; DWORD dwSize=MAX_PATH; ::GetModuleFileName(NULL,strPath.GetBuffer(MAX_PATH),dwSize);
//AfxGetResourceHandle() strPath.ReleaseBuffer(dwSize); str=strPath.Left(strPath.ReverseFind('//')+1); ASSERT(pszUrl!=NULL); if(pszUrl!=NULL) { CString strUrl; strUrl=str+pszUrl; Navigate(_T("file:///")+strUrl); } }

本函式為了方便沒有對路徑進行更多處理,在使用的時候,可以以exe檔案所在的目錄為當前目錄,以相對路徑表示pszUrl。呼叫方法:
gotoUrl("html//test.html")
gotoUrl("..//html2/test.htm")

這樣載入HTML網頁,網頁內的資源定位都是相對路徑定義即可。圖片和flash都可以正常載入。
不過這樣的話,就有個問題,使用者可以隨時修改你的html檔案。如果你有訊息處理的話,很容易就使你的程式崩潰。
我一般的做法就是修改html的副檔名,迫使一般使用者不輕易修改它,譬如改稱.dat。