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

VS2010開發MFC ActiveX控件:攝像頭拍照上傳WebService(1)

     編輯:C++ 入門

ActiveX基礎概念

  • **OCX/DLL形式**:嵌入容器(網頁、應用程序)運行,不能獨立執行
  • **基於COM**:語言無關,網絡交互技術集
  • **MFC vs ATL**:MFC開發快但依賴MFC運行庫;ATL輕量但需深厚COM功底

VS2010創建MFC ActiveX項目步驟

  1. 新建項目 → "MFC ActiveX 控件" → 命名TestMfcAtlDebug
  2. 控件向導:概述/設置/名稱均用默認 → 完成

三大核心類解析

類名職責
CTestMfcAtlDebugAppDLL入口,`DllRegisterServer`/`DllUnregisterServer`實現註冊/反註冊
CTestMfcAtlDebugCtrl**核心控件類**:消息映射(窗口事件)、調度映射(外部調用屬性/方法)、事件映射(向外發送事件)
CTestMfcAtlDebugPropPage屬性頁顯示

關鍵:IDL文件(對外接口定義)

library TestMfcAtlDebugLib {
    importlib(STDOLE_TLB);
    
    // 調度接口:屬性和方法
    dispinterface _DTestMfcAtlDebug {
        methods:
            [id(DISPID_ABOUTBOX)] void AboutBox();
    };
    
    // 事件接口
    dispinterface _DTestMfcAtlDebugEvents {
        methods: // 事件列表
    };
    
    // 類信息:ClassID = DD0CF7EF-A181-428C-B5FC-C44A1C13CA43
    coclass TestMfcAtlDebug {
        [default] dispinterface _DTestMfcAtlDebug;
        [default, source] dispinterface _DTestMfcAtlDebugEvents;
    };
}

添加自定義方法(調度映射)

  1. 類視圖 → TestMfcAtlDebugLib → _DTestMfcAtlDebug → 右鍵「添加方法」
  2. 輸入方法名如`Fuck2`,類型`void`
  3. 自動更新三處:
// 1. IDL文件
[id(1)] void Fuck2();

// 2. Ctrl類頭文件聲明
void Fuck2();

// 3. Ctrl類cpp實現
void CTestMfcAtlDebugCtrl::Fuck2() {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    // 具體邏輯
}

註冊與測試

註冊命令

regsvr32 C:\path\TestMfcAtlDebug.ocx     // 註冊
regsvr32 /u C:\path\TestMfcAtlDebug.ocx  // 反註冊

需管理員權限,確保無進程占用依賴DLL。

三種測試方式

  1. HTML網頁:``
  2. MFC對話框:右鍵插入ActiveX控件
  3. ActiveX Control Test Container:VS自帶工具(需手動編譯TstCon項目添加到工具菜單)
  4. 添加可視界面(對話框資源)

    1. 資源視圖 → 新建對話框 → IDD_MAIN_DIALOG
    2. 屬性:Border=None, Child=True, Control=True, Visible=True
    3. 雙擊添加類 `CMainDialog` 繼承 `CDialog`
    4. 在 `CTestMfcAtlDebugCtrl::OnCreate` 中創建並顯示對話框

    下一步預告

    第二部分將講解:使用`vfw.h`實現攝像頭預覽/拍照,第三部分:圖片裁剪、格式轉換、上傳WebService。

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