程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 在ActiveX中使用Dialog和FormView

在ActiveX中使用Dialog和FormView

編輯:關於C語言

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

一、在ActiveX中使用Dialog

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

  1. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 

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

  1. m_myDlg.Create(IDD_MYDLG,this);   //IDD_MYDLG為對話框資源ID 

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

  1. m_myDlg.MoveWindow(rcBounds, TRUE); 

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

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

  1. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 

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

  1. p_myForm = new CMyForm(); 
  2. p_myForm->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL);  

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

  1. p_myForm->MoveWindow(rcBounds,TRUE);  

      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平台。

   650) this.width=650;" alt="" src="data:image/png;base64,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" />

     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)  使用管理員權限打開vs2008vs exe圖標右鍵->以管理員身份運行)
    3)  如果問題還是沒有解決的話,請注意查看你的ActiveX工程所依賴的庫文件是否都在.ocx文件所在的目錄下,如果缺少所依賴的庫文件,也會報這個錯誤。

 四、在網頁中測試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://ticktick.blog.51cto.com/823160/610784

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved