在ActiveX中使用Dialog和FormView

最近作ActiveX插件,以網上一位牛人的《基於MFC的ActiveX控件開發》這一系列文章入門,不過,他的文章主要介紹在ActiveX自己提供的框架內進行開發,若是我但願個人ActiveX插件自己就以Dialog或者FormView窗體的形式呈現,那該如何處理呢?本文就總結一下這個,而且附帶總結一下vs2008下以及網頁下如何調試ActiveX,做爲上述系列文章的補充。html


1、在ActiveX中使用Dialog瀏覽器


  1.   首先建立一個ActiveX工程,工程名假設爲:MyActiveX安全


2.  建立一個對話框資源(Dialog),並關聯一個類(CMyDialog)。檢查一下對話框資源的配置,推薦配置:style:child, border:dialog frame, visible:ture, control:ture框架


 3.  對ActiveX控制類(CMyActiveXCtrl)作以下操做:ide


(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 函數中,添加以下代碼this


m_myDlg.MoveWindow(rcBounds, TRUE);

      

4. 到此,基本工做完成。能夠在 Active X control test container 中進行測試了。spa


、在ActiveX中使用FormView


在ActiveX中使用FormView跟使用Dialog大致相似,可是FormView與Dialog有不少不一樣的地方,所以有些須要特別注意。

     

  1. 同上,首先建立一個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控件,檢查一下相關的安全配置狀況)

相關文章
相關標籤/搜索