在ActiveX控制項中引入窗體技術

2021-04-08 16:22:36 字數 4931 閱讀 4148

一、引入dialog技術

---- 下面介紹在製作activex控制項時引入有模式對話方塊技術,製作步驟如下:

建立一新的mfc activex controlwizard專案,取名為hello,其他用預設選項;

在resourceview頁中新增一對話方塊資源,命名為idd_hellodialog,可以在對話方塊上放自己的控制項;

為對話方塊資源idd_hellodialog建立新類chellodialog,從cdialog繼承;

確認在helloctrl.h中已加入語句#include "hellodialog.h",為chelloctrl類新增成員變數chellodialog m_hellodialog;

用classwizard在automation頁中為chelloctrl新增一方法void dohello(),外部名亦為dohello;

void chelloctrl::dohello()

---- 可以用activex control test container測試hello control的dohello方法。

---- 下面介紹在製作activex控制項時引入無模式對話方塊技術,製作步驟如下:

在上面工作的基礎上,用classwizard為chelloctrl新增wm_create的處理函式oncreate,在此建立無模式對話方塊;

修改dohello**,在此顯示對話方塊;

int chelloctrl::oncreate

(lpcreatestruct lpcreatestruct)

void chelloctrl::dohello()

---- 下面介紹製作以對話方塊作為介面的activex控制項技術,製作步驟如下:

在上面工作的基礎上,設定對話方塊資源idd_hellodialog屬性的style頁為style:child、border:dialog frame、title bar:unchecked;設定more style頁為visible:checked;control:checked;設定extended styles頁為static edge:checked;

在chelloctrl::oncreate中寫入m_hellodialog.create(idd_hellodialog,this)語句;

在chelloctrl::ondraw中寫入m_hellodialog.movewindow(rcbounds,true);

int chelloctrl::oncreate(lpcreatestruct lpcreatestruct)

void chelloctrl::ondraw(cdc* pdc, const

crect& rcbounds, const crect& rcinvalid)

----

二、引入formview技術

---- 下面介紹在製作activex控制項時引入formview技術,製作步驟如下:

在上面工作的基礎上,在resourceview頁中新增一對話方塊資源,命名為idd_helloformview,可以在對話方塊上放自己的控制項;

設定對話方塊資源idd_hellodialog屬性的style頁為style:child、border:dialog frame、title bar:unchecked;設定more style頁為visible:unchecked;control:checked;設定extended styles頁為static edge:checked;

為對話方塊資源idd_helloformview建立新類chelloformview,從cformview繼承;

在helloformview.h中將chelloformview的建構函式chelloformview()和析構函式virtual ~chelloformview()從protected改為public;

在helloformview.h中對chelloformview類加入public friend class chelloctrl;

確認在helloctrl.h中已加入語句#include "helloformview.h",為chelloctrl類新增成員指標變數chelloformview *m_helloformview,因為cview的析構函式中有delete this,所以不能使用成員變數,否則會引起斷言錯誤;

修改chelloctrl::oncreate函式,在此建立m_helloformview;

修改oncreate()和ondraw()**,在此顯示formview;

int chelloctrl::oncreate

(lpcreatestruct lpcreatestruct)

void chelloctrl::ondraw(cdc* pdc, const

crect& rcbounds, const crect& rcinvalid)

9.在destory處理函式ondestory(...)中新增delete m_helloformview;

10.如何啟用視窗的訊息處理,有知道的告訴我一聲,謝謝。

---- 三、引入document/view結構技術

---- 下面介紹在製作activex控制項時引入document/view技術,製作步驟如下:

在上面工作的基礎上,在hello工程中用classwizard新增一新類cprintframe,取其父類為cframewnd;

在printframe.h中將cprintframe的建構函式cprintframe()和析構函式virtual ~cprintframe()從protected改為public;

在hello工程中用classwizard新增一新類cprintview,取其父類為cview;

在printview.h中將cprintview的建構函式cprintview()和析構函式virtual ~cprintview()從protected改為public;

在hello工程中用classwizard新增一新類cprintdoc,取其父類為cdocument;

在printdoc.h中將cprintdoc的建構函式cprintdoc()和析構函式virtual ~cprintdoc()從protected改為public;

在hello工程中用classwizard新增一新類cprintthread,取其父類為cwinthread;

在helloctrl.h檔案中為chelloctrl類新增成員變數cprintthread* m_pprintthread,確認在helloctrl.h中已加入語句#include "printthread.h"; void chelloctrl::dohello()

在printthread.h中新增新成員變數 cprintdoc* m_pprintdoc和cprintframe* m_pprintframe,

並在建構函式和析構函式中完成對它們的初始設定和清除,確認在printthread.h中已加入語句

#include

"printdoc.h"和#include "printframe.h";

cprintthread::cprintthread()

cprintthread::~cprintthread()

在printthread.cpp的cprintthread::initinstance中,進行建立窗體cprintframe,確認在printthread.cpp中已加入語句#include "printframe.h"; bool cprintthread::initinstance()

在printview.h的cprintview中,新增成員函式cprintdoc* getdocument(),確認在printview.h中已加入語句#include "printdoc.h"; cprintdoc* cprintview::getdocument()

----

四、實現activex列印預覽技術

---- 下面介紹利用上面的技術成果來實現activex的列印預覽技術,實現步驟如下:

在上面工作的基礎上,用classwizard對cprintview類實現onprepareprinting函式,如下: bool cprintview::onprepareprinting(cprintinfo* pinfo)

用classwizard在automation頁中為chelloctrl新增一方法void dopreview(),外部名亦為dopreview; void chelloctrl::dopreview()

在printview.h中新增#define wm_user_preview wm_user+10

在printview.cpp中的訊息對映中新增on_message(wm_user_preview, dopreview),形成如下: begin_message_map(cprintview, cview)

on_message(wm_user_preview, dopreview)

//}afx_msg_map

end_message_map()

為類cprintview新增成員函式lresult dopreview(wparam wparam, lparam lparam)

實現cprintview::dopreview如下: lresult cprintview::dopreview

(wparam wparam, lparam lparam)

為cprintview新增public成員變數colecontrol* m_pcontrolpreview,並初始化如下: cprintview::cprintview()

在cprintview::ondraw中對控制項內容進行顯示 void cprintview::ondraw(cdc* pdc)

}用classwizard在automation頁中為chelloctrl新增一方法void setpreviewcontrol(),外部名亦為setpreviewcontrol,對其實現如下: void chelloctrl::setpreviewcontrol()

---- 在activex control test container測試,啟用方法次序為dohello、setpreviewcontrol、dopreview。

在ActiveX控制項中引入窗體技術

在activex控制項中引入窗體技術 一 引入dialog技術 下面介紹在製作activex控制項時引入有模式對話方塊技術,製作步驟如下 建立一新的mfc activex controlwizard專案,取名為hello,其他用預設選項 在resourceview頁中新增一對話方塊資源,命名為idd...

在Chrome上使用ActiveX控制項

一名id叫做eagleonhill的chrome迷論壇會員這幾天就寫出了乙個chrome擴充套件,通過將activex包裝成了chrome firefox支援的npapi外掛程式,從而實現在chrome firefox平台的activex控制項支援,目前已經基本實現了windows平台chrome的...

在Chrome上使用ActiveX控制項

ie 上使用 ocx 外掛程式網上已經有很多資料說明,這裡就不重複了,那如何在 chrome 瀏覽器上使用 ocx 外掛程式呢?1 編寫 ocx 外掛程式,增加測試 html 頁面。普通呼叫 本著讓世界變得更美好的高尚信念,我幫他們設計了一套解決方案,並幫他們開發了出來,執行多時,還算穩定。下面,就...