首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

在 ActiveX 控件中嵌入 Dialog 與 FormView 完整實作指南

     編輯:關於C語言

前言

開發 ActiveX 控件時,若希望控件本身以對話框或表單視圖形式呈現,而非僅在預設框架內繪製,需要特別處理視窗建立與繪製流程。本文整理在 ActiveX 中使用 CDialog 與 CFormView 的完整步驟,並補充 VS2008 環境下的偵錯與網頁測試實務,作為 MFC ActiveX 開發系列的實戰補充。

一、在 ActiveX 中使用 Dialog

1. 建立專案與對話框資源

  • 建立 MFC ActiveX 控件專案,專案名稱假設為 MyActiveX。
  • 新增對話框資源,並關聯類別 CMyDialog。
  • 對話框屬性建議設定:Style: Child、Border: Dialog Frame、Visible: True、Control: True。

2. 修改控件類別 CMyActiveXCtrl

  1. 在類別定義中加入成員變數:CMyDialog m_myDlg;
  2. 為類別添加 OnCreate 訊息處理器:
    afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  3. 在 OnCreate 中建立對話框:
    m_myDlg.Create(IDD_MYDLG, this); // IDD_MYDLG 為對話框資源 ID
  4. 在 OnDraw 中調整對話框大小以填滿控件區域:
    m_myDlg.MoveWindow(rcBounds, TRUE);

3. 測試

完成上述步驟後,即可在 ActiveX Control Test Container 中測試控件顯示效果。

二、在 ActiveX 中使用 FormView

使用 CFormView 與 CDialog 大體相似,但因 CFormView::Create 為 protected,需特別處理。

1. 建立 FormView 資源與類別

  • 新增 FormView 資源,關聯衍生自 CFormView 的類別 CMyForm。
  • 資源屬性建議:Style: Child、Border: None、Visible: True、Control: True。

2. 解決 Create 權限問題

在 CMyForm 類別定義中加入友元宣告:friend class CMyActiveXCtrl;
或在 CMyForm 中重載 Create 並設為 public。

3. 修改控件類別 CMyActiveXCtrl

  1. 成員變數需使用指標:CMyForm* p_myForm;
    注意: 必須動態建立,若直接用物件會在釋放控件時觸發 Debug Assertion Fail。
  2. 加入 OnCreate 訊息處理器(同 Dialog)。
  3. 在 OnCreate 中動態建立 FormView:
    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. 在 OnDraw 中調整大小:
    p_myForm->MoveWindow(rcBounds, TRUE);

4. 測試

同樣可在 ActiveX Control Test Container 中驗證。

三、Win7 + VS2008 環境下偵錯 ActiveX 控件

1. 取得並編譯 Test Container

VS2008 未內建 TSTCON32.exe,需自行編譯範例專案:

  • 解壓縮 C:\Program Files\Microsoft Visual Studio 9.0\Samples\2052\AllVCLanguageSamples.zip
  • 源碼位於 C++\MFC\ole\TstCon
  • 編譯前請將方案平台從預設的 Itanium 改為 Win32
  • 先編譯 TCProps,再編譯 TstCon

2. 解決 Win7 下的「並行執行錯誤」

  1. 在 TstCon 與 TCProps 的 StdAfx.h 加入:
    #define _WIN32_WINNT 0x0600
  2. 專案屬性 → Linker → Manifest File → Enable User Account Control (UAC): No(Debug/Release 皆需設定)

3. 解決 ActiveX 專案編譯錯誤 PRJ0050

  1. 專案屬性 → Linker → General → Per-User Redirection: No
  2. 以系統管理員身分執行 VS2008
  3. 檢查 .ocx 所在目錄是否包含所有相依 DLL

四、在網頁中測試 ActiveX 控件

  1. 安裝 ActiveX Control Pad(微軟官方工具,用於產生測試用 HTML)。
  2. 將專案設為 Release 版本建置(必須),確保相依庫路徑與 Debug 一致。
  3. 開啟 Control Pad → File → New HTML → Edit → Insert ActiveX Control,選擇你的控件並調整參數。
  4. 用 IE 開啟產生的 HTML,若被阻擋請檢查安全性設定(允許執行 ActiveX 控件)。

本文整理自「對影成三人」博客,原文出處:https://ticktick.blog.51cto.com/823160/610784

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved