若是我但願個人ActiveX插件自己就以Dialog或者FormView窗體的形式呈現,那該如何處理呢?本文就總結一下這個,而且附帶總結一下vs2008下以及網頁下如何調試ActiveX,做爲上述系列文章的補充。html
1、在ActiveX中使用Dialogdocker
首先建立一個ActiveX工程,工程名假設爲:MyActiveX瀏覽器
2. 建立一個對話框資源(Dialog),並關聯一個類(CMyDialog)。檢查一下對話框資源的配置,推薦配置:style:child, border:dialog frame, visible:ture, control:ture安全
3. 對ActiveX控制類(CMyActiveXCtrl)作以下操做:微信
(1) 在CMyActiveXCtrl類的定義中,添加一個成員變量:CMyDialog m_myDlg;函數
(2) 爲CMyActiveXCtrl類添加OnCreate消息響應:工具
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
(3)在上述 OnCreate 消息響應函數中,添加以下代碼:學習
m_myDlg.Create(IDD_MYDLG,this); //IDD_MYDLG爲對話框資源ID
(4)在 CMyActiveXCtrl類 的 OnDraw 函數中,添加以下代碼測試
m_myDlg.MoveWindow(rcBounds, TRUE);
4. 到此,基本工做完成。能夠在 Active X control test Container 中進行測試了。this
2、在ActiveX中使用FormView
在ActiveX中使用FormView跟使用Dialog大致相似,可是FormView與Dialog有不少不一樣的地方,所以有些須要特別注意。
同上,首先建立一個ActiveX工程,工程名假設爲:MyActiveX
2. 建立一個FormView資源,並關聯一個派生於CFormView的類(CMyForm)。檢查一下對話框資源的配置,推薦配置:style:child, border:none, visible:ture, control:ture
3. 在CMyForm類的定義裏面添加一項友元聲明(friend class CmyActiveXCtrl;)由於FromView類的Create函數是protected型,因此若是想手動調用FromView派生類的Create函數的話,要麼加友元聲明,要麼,在派生類CMyForm的定義中,重載Create方法,並設置爲 public型。
4. 對ActiveX控制類(CMyActiveXCtrl)作以下操做:
(1) 在CMyActiveXCtrl類的定義中,添加一個成員變量:CMyForm * p_myFrom; // 注意,這裏要使用指針,FormView資源必須動態建立,若是這裏直接使用對象,而不是用指針,則在釋放ActiveX控件的時候,會出現 Debug Assertion Fail 的錯誤。
(2) 爲CMyActiveXCtrl類添加OnCreate消息響應
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
(3) 在上述 OnCreate 消息響應函數中,添加以下代碼:
p_myForm = new CMyForm(); p_myForm->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL);
(4)在 CMyActiveXCtrl類 的 OnDraw 函數中,添加以下代碼:
p_myForm->MoveWindow(rcBounds,TRUE);
5. 到此,基本工做完成。能夠在 Active X control test container 中進行測試了。
3、 在win7 + vs2008下調試ActiveX控件
在vs2008下,沒有自帶 Active X control test container,須要本身編譯,這個過程可能會遇到一些問題,我把解決方案(部分是網上搜集的)寫在下面,以供你們參考。
在編ActiveX控件時,能夠用到Active X control test container來測試activex控件,這在Visual Studio 6裏面是很方便查找的,工具菜單下面就有。可是在Visual Studio 2008 裏面TSTCON32.exe這個文件卻消失了。那它是沒了嗎,不是的。而是微軟把它放在了例子程序裏面,須要本身編譯。詳細目錄:好比我裝在C盤裏面,VC的例子在 “C:\Program Files\Microsoft Visual Studio 9.0\Samples\2052\AllVCLanguageSamples.zip”,把這個文件解壓縮之後,在下面的目錄能夠找到TSTCON32.exe的源代碼:“C++\MFC\ole\TstCon”,本身編譯就能夠了。
這裏特別注意,因爲默認的是Win32的解決方案平臺,因此在編譯TCProps和TstCon要將編譯平臺選爲Win32,而不是默認的Itanium平臺。
OK拿去編譯,注意得先編譯TCProps,而後再編譯TstCon。
若是是在win7下,運行測試時,則還會出現錯誤,彈出“並行運行錯誤”的對話框,【解決方法】:
(1)分別在TstCon和TCProps兩個Project的StdAfx.h文件加入 #define _WIN32_WINNT 0x0600.
(2)原始TstCon工程沒有相應語句之間添加便可;原始TCProps工程將#define _WIN32_WINNT 0x0400改成#define _WIN32_WINNT 0x0600便可。
(3)分別對各個工程進行:選中對應工程-->點擊右鍵,選擇 Properties-->Configuration Properties-->Linker-->Manifest File-->選中Enable User Account Control(UAC):改成No,原始爲Yes,點擊,應用,肯定便可。需Release、Debug下各配置一次。
另外,在vs2008下在編譯MyActiveX工程的時候,可能會出現以下錯誤:
Project : error PRJ0050: Failed to register output. Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.
【解決方法】:
(1) 在工程配置-> Linker -> General -> Per-User Redirection 選擇No
(2) 使用管理員權限打開vs2008(vs exe圖標右鍵->以管理員身份運行)
(3) 若是問題仍是沒有解決的話,請注意查看你的ActiveX工程所依賴的庫文件是否都在.ocx文件所在的目錄下,若是缺乏所依賴的庫文件,也會報這個錯誤。
4、在網頁中測試ActiveX
首先,安裝 ActiveX Control Pad 軟件,這個軟件是微軟提供的專門用來動態生成測試ActiveX的html頁面代碼的工具,用這個工具,能夠很方便地生成須要的html代碼或者網頁。
而後,執行以下步驟:
1. 將本身的myActiveX工程設置爲release,生成一個release版本(必須),不然使用ActiveX Control Pad沒法獲得有效的插件信息。(提示,改爲release版後,注意工程配置,好比依賴的庫,都要與debug一致。)
2. 打開ActiveX Control Pad,選擇菜單File -> New HTML,建立一個HTML頁面。
3. 從ActiveX Control Pad選擇菜單Edit -> Insert ActiveX Control ....,而後會彈出一個消息框。從消息框的列表中選擇相應的ActiveX Control,點擊OK便可將ActiveX Control插入到HTML頁面。(能夠在彈出的框中調整相關參數,好比控件大小等)
4. 在本機經過IE瀏覽器打開生成的HTML便可看到ActiveX Control顯示在HTML頁面中。(注意,有的瀏覽器可能會禁止加載ActiveX控件,檢查一下相關的安全配置狀況)
結束語
免費學習更多精品課程,登陸樂搏學院官網http://h.learnbo.cn/
或關注咱們的官方微博微信,還有更多驚喜哦~
本文出自 「Jhuster的專欄」 博客,請務必保留此出處http://ticktick.blog.51cto.com/823160/610784