MFC 對話方塊中動態載入OCX控制項

2021-08-09 23:34:05 字數 1268 閱讀 8125

以前在mfc中建立ocx控制項後,再到對話方塊中載入用的都是看似簡單但實際上最麻煩的辦法:

那是就是在對話方塊上右鍵->insert activex control...,然後給插入的控制項繫結乙個變數,這時候mfc會自動生成乙個對應的類,然後呼叫方法,相應事件都很簡單。

但是如果這個ocx不成熟需要改動,比如加個介面,刪掉某個介面,再需要重新編譯,就需要先關閉呼叫的專案,如此反覆的話會讓人抓狂,經過多次嘗試終於找到乙個相對比較好的辦法:

使用嚮導新增類-mfc class from activex control-file(選擇從檔案建立)-選擇對應得ocx檔案,這時會自動生成乙個類,這個和以前的方式類似,裡面有類似如下的函式:

void showtest()

long testadddata(long num1, long num2)

1.普通介面呼叫

在呼叫的對話方塊標頭檔案中引入這個類的標頭檔案,並定義乙個變數如:

cdtestx m_ctrtest;

resource.h 中第乙個id :#define idc_ocx_test                    1001

在對話方塊的oninitdialog函式中建立:

m_ctrtest.create("",ws_child|ws_visible,crect(0,0,100,200),this,idc_ocx_test);

m_ctrtest.showwindow(sw_show);

然後就可以在需要的地方呼叫其介面:

.....

m_ctrtest.showtest();

.....

2.事件的響應:

對對話方塊標頭檔案中新增

declare_eventsink_map()

void tes_eventtestxctrl1(long num);

cpp檔案中新增:

begin_eventsink_map(c***dlg, cdialogex)

on_event(c***dlg, idc_ocx_test, 2, c***dlg::tes_eventtestxctrl1, vts_i4)

end_eventsink_map()

void c***dlg::tes_eventtestxctrl1(long num)

這樣一來就不用關閉這個工程就可以重新編譯ocx原始碼了,如果有新增介面可以自己在生成的類中自己新增

有一點需要注意

invokehelper函式的第乙個引數對應的就是ocx的介面id

on_event的第三個引數是事件的id

mfc 子對話方塊控制父對話方塊 MFC對話方塊構架程式

遺憾的是 從來沒有被堅定選擇過,就像是,他只是剛好需要,你只是剛好在。網易雲熱評 一 對話方塊架構分類 1 模式對話方塊,彈出來不能進行其他操作 2 無模式對話方塊,彈出來後可以進行其他操作 二 新建win32應用程式 模式對話方塊 1 建立 2 修改屬性 3 新增dialog資源 4 包含標頭檔案...

MFC 對話方塊

1 建立對話方塊模板,設定對話方塊屬性 cadditionddlg 主對話方塊類 顯示的主要介面 addition的資源樹 4個子項 dialog 對話方塊 含有2個對話方塊模板 id為idd aboutbox 關於對話方塊模板 idd addtion dlalog 主對話方塊模板 lcon 圖示 ...

mfc中的對話方塊

mfc的對話方塊.分類 模式 非模式相關類 cdialog類 父類是cwnd類.提供了對話方塊的基本操作.ccommondialog類 父類是cdialog類,稱為通用對話方塊類,包括以下6個子類 分別是檔案對話方塊,顏色對話方塊,字型對話方塊,查詢替換對話方塊 頁面設定對話方塊和列印對話方塊.cp...