天天看點

在ActiveX中使用Dialog和FormView

一、在ActiveX中使用Dialog

  首先建立一個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消息響應:

(3)在上述 OnCreate 消息響應函數中,添加如下代碼:

(4)在 CMyActiveXCtrl類 的 OnDraw 函數中,添加如下代碼

4. 到此,基本工作完成。可以在 Active X control test container 中進行測試了。

二、在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消息響應

(3) 在上述 OnCreate 消息響應函數中,添加如下代碼:

(4)在 CMyActiveXCtrl類 的 OnDraw 函數中,添加如下代碼:

5.  到此,基本工作完成。可以在 Active X control test container 中進行測試了。

三、 在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檔案所在的目錄下,如果缺少所依賴的庫檔案,也會報這個錯誤。

四、在網頁中測試ActiveX

然後,執行如下步驟: 

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控件,檢查一下相關的安全配置情況)

本文轉自 Jhuster 51CTO部落格,原文連結:http://blog.51cto.com/ticktick/610784,如需轉載請自行聯系原作者

繼續閱讀