用VC實現(xiàn)HTML中模式對話框的顯示_第1頁
用VC實現(xiàn)HTML中模式對話框的顯示_第2頁
用VC實現(xiàn)HTML中模式對話框的顯示_第3頁
用VC實現(xiàn)HTML中模式對話框的顯示_第4頁
用VC實現(xiàn)HTML中模式對話框的顯示_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、用VC實現(xiàn)HTML中模式對話框的顯示在Web應用開發(fā)中經(jīng)常會用到帶有圖象、聲音和動畫的對話框,然而要在VC+中實現(xiàn)這樣一個對話框需要做大量的工作。幸運的是,隨著Internet Explorer 4.0的出現(xiàn)以及它所使用的新的技術,所有這些工作無須大量的代碼就可實現(xiàn)。一種方法是使用web 瀏覽器控件,但它并不是最好的方法,尤其是對處理模式對話框時;另外一種方法是使用IE4所引入的HTML模式對話框,它駐留在系統(tǒng)的mshtml.dll這個對HTML進行解釋的引擎中。雖然有些功能諸如:單擊一個鏈接,對歷史記錄的管理以及在同一窗口中裝入一個鏈接在這個模式對話框中不能實現(xiàn),但對于我們幾乎所有的時候僅使

2、用一個模式對話框來說已經(jīng)足夠了。 如何使用HTML中的模式對話框 mshtml.dll中的函數(shù)SHOWHTMLDIALOGFN是用來顯示一個HTML對話框的,但它需要用于字符串和其它事務轉換的COM要素,為了簡化所有這些工作,筆者利用一個類來對COM要素進行封裝如下: class CMshtmlDialog public: void SetDlgOptions(LPCTSTR lpszOptions; void SetSize(int x, int y; LPCVARIANT GetReturnVariant(; CString GetReturnString(; void SetParam(

3、LPCTSTR lpszArgs; void SetParam(VARIANT* pvarArgs; virtual int DoModal(; CMshtmlDialog(LPCTSTR lpszURL, BOOL bRes = FALSE, CWnd* pParent = NULL; CMshtmlDialog (UINT nResID, CWnd* pParent = NULL; CMshtmlDialog ( ; virtual CMshtmlDialog( ; private: inline void ResourceToURL(LPCTSTR lpszURL; void Commo

4、nConstruct(; protected: HWND m_hWndParent; CString m_strOptions; COleVariant m_varArgs, m_varReturn; CString m_strURL; HINSTANCE m_hInstMSHTML; ; / CMshtmlDialog類的實現(xiàn)文件. CMshtmlDialog : CMshtmlDialog ( TRACE0("Warning: Initialization may not be done: Non Functional contructor" CMshtmlDialog

5、: CMshtmlDialog( /釋放Mshtml.dll :FreeLibrary(m_hInstMSHTML; CMshtmlDialog: CMshtmlDialog(UINT nResID, CWnd* pParent/*= NULL*/ m_hWndParent = pParent ? pParent-GetSafeHwnd( : NULL; CString strTemp; strTemp.Format("%d", nResID; ResourceToURL(strTemp; CommonConstruct(; CMshtmlDialog:CMshtmlDia

6、log(LPCTSTR lpszURL, BOOL bRes, CWnd* pParent/*= NULL*/ m_hWndParent = pParent ? pParent-GetSafeHwnd( : NULL; if (bRes ResourceToURL(lpszURL; else m_strURL = lpszURL; CommonConstruct(; int CMshtmlDialog:DoModal( /First get the proc ShowHTMLDialog SHOWHTMLDIALOGFN *pfnShowHTMLDialog; pfnShowHTMLDialo

7、g = (SHOWHTMLDIALOGFN*GetProcAddress(m_hInstMSHTML, TEXT("ShowHTMLDialog" if (!pfnShowHTMLDialog return -1; /Now create a URL Moniker IMoniker* pmk = NULL; BSTR bstrURL = m_strURL.AllocSysString(; CreateURLMoniker(NULL, bstrURL, &pmk; if (!pmk return -1; TCHAR* pchOptions = m_strOption

8、s.IsEmpty( ? NULL : m_strOptions.GetBuffer(0; /Now show the HTML Dialog HRESULT hr = (*pfnShowHTMLDialog(m_hWndParent, pmk, m_varArgs, pchOptions, m_varReturn; if (FAILED(hr0 return -1; return 0; void CMshtmlDialog:CommonConstruct( m_hInstMSHTML = :LoadLibrary(TEXT("MSHTML.DLL" inline void

9、 CMshtmlDialog:ResourceToURL(LPCTSTR lpszURL HINSTANCE hInstance = AfxGetResourceHandle(; ASSERT(hInstance != NULL; LPTSTR lpszModule = new TCHAR_MAX_PATH; if (GetModuleFileName(hInstance, lpszModule, _MAX_PATH m_strURL.Format(_T("res:/%s/%s", lpszModule, lpszURL; delete lpszModule; void C

10、MshtmlDialog:SetParam(VARIANT *pvarArgs m_varArgs = pvarArgs; void CMshtmlDialog:SetParam(LPCTSTR lpszArgs m_varArgs = lpszArgs; CString CMshtmlDialog:GetReturnString( ASSERT(m_varReturn.vt = VT_BSTR; CString str = m_varReturn.bstrVal; return str; LPCVARIANT CMshtmlDialog:GetReturnVariant( return (L

11、PCVARIANTm_varReturn; void CMshtmlDialog:SetSize(int x, int y m_strOptions.Format("dialogWidth: %d; dialogHeight: %d", x, y; void CMshtmlDialog:SetDlgOptions(LPCTSTR lpszOptions m_strOptions = lpszOptions; 使用CMshtmlDialog的一個簡單例子 比如我們要在一個關于對話框里使用這個類,我們所要做工作是寫一個HTML文件并把它以IDR_ABOUT_HTM包含進資源文件

12、里。這里列出OnAppAbout的函數(shù)如下: void CHDDemoApp:OnAppAbout( CMshtmlDialog dlg(IDR_ABOUT_HTM, AfxGetMainWnd(; dlg.DoModal(; 還可以利用構造函數(shù)傳遞字符串資源或要顯示的URLs,通過使用HTML中的圖形和聲音資源就可以在關于對話框中顯示一個復雜的效果。 向對話框中傳遞參數(shù) 在有些時候我們不僅僅要顯示一個HTML資源,還要從應用程序中向關于對話框傳遞一些參數(shù)進去(比如:產(chǎn)品序列號,許可號等),參數(shù)類型可以是string類型,也可以是variant類型,比如我們要在對話框顯示產(chǎn)品序列號、用戶名稱、

13、公司名稱和產(chǎn)品的版本號,可以在程序添加如下代碼: void CHDDemoApp:OnDemoParam1( CMshtmlDialog dlg(IDR_ABOUT1_HTM, AfxGetMainWnd(; CString str = m_strProductID /產(chǎn)品序列號 + ""+ m_strUserName /用戶許可號 + "" + m_strCompanyName /公司名稱 + "" + m_strAppVersion;/版本號 dlg.SetParam(str; dlg.DoModal( ; 在實際顯示的HTML主

14、頁中我們還必須包含一些javascript或vbscript函數(shù)。在HTML中傳給CMshtmlDialog的任何參數(shù)都可以作為window對象的dialogArguments屬性,以javascript為例: function getParameters( var args = new Array(; args = window.dialogArguments.split("" /Now display in the document Productid.innerText = args0; UserName.innerText = args1; CompanyName.

15、innerText = args2; AppVersion.innerText = args3; 從對話框中獲取返回值 我們已經(jīng)發(fā)現(xiàn)通過結合使用Javascript和C+可以獲得更多的信息,那么如何從對話框中傳遞參數(shù)作為我們獲得的返回值的結果并傳回C+程序呢?作為例子我們還結合Javascript和C+,在利用onunload的處理句柄關閉HTML窗口程序段中我們給出如下的代碼: function window_onclose( window.returnValue = UserName.value + "" + CompanyName.value; 只需通過設置返回值的屬

16、性就可將該值傳回C+程序中。返回值可以是任意的variant變量,然后在C+代碼中通過調(diào)用函數(shù)GetReturnString 或GetReturnVariant來處理這個返回值,如: dlg.DoModal( ; /Display the dialog CString str = dlg.GetReturnString( ; /Now handle the return value in whatever way 設置對話框的尺寸 在以上的例子中,對話框尺寸的設置是通過在HTML中使用下列標簽來設置的: HTML style="width: 25em; height: 30em 在ChtmlDial

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論