亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

在ActiveX控件中引入窗體技術

2019-11-17 05:32:34
字體:
來源:轉載
供稿:網友
一、引入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() { // 顯示對話框 m_helloDialog.DoModal(); }

  可以用ActiveX Control Test Container測試Hello Control的DoHello方法。

  下面介紹在制作ActiveX控件時引入無模式對話框技術,制作步驟如下:

  在上面工作的基礎上,用ClassWizard為CHelloCtrl添加WM_CREATE的處理函數OnCreate,在此創建無模式對話框;
 
  修改DoHello代碼,在此顯示對話框;

int CHelloCtrl::OnCreate (LPCREATESTRUCT lpCreateStruct) {
 if (COleControl::OnCreate(lpCreateStruct) == -1) return -1;
 // 創建對話框
 m_helloDialog.Create(IDD_HELLODIALOG);
 return 0;
}
void CHelloCtrl::DoHello() {
 // 顯示對話框
 m_helloDialog.ShowWindow(SW_SHOW);
}
  下面介紹制作以對話框作為界面的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) {
 if (COleControl::OnCreate(lpCreateStruct) == -1) return -1;
 // 創建對話框
 m_helloDialog.Create(IDD_HELLODIALOG,this);
 return 0;
}
void CHelloCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) {
 // 定位Hello對話框
 m_helloDialog.MoveWindow(rcBounds,TRUE);
}
  二、引入FormView技術

  下面介紹在制作ActiveX控件時引入FormView技術,制作步驟如下:

  在上面工作的基礎上,在ResourceView頁中新增一對話框資源,命名為IDD_HELLOFORMVIEW,可以在對話框上放自己的控件;
 
  設置對話框資源IDD_HELLODIALOG屬性的Style頁為Style:Child、Border:Dialog Frame、Title Bar:unchecked;設置More Style頁為Visible:checked;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;
 
  修改CHelloCtrl::OnCreate函數,在此創建m_helloFormView;
 
  修改DoHello代碼,在此顯示FormView;

int CHelloCtrl::OnCreate (LPCREATESTRUCT lpCreateStruct) {
 if (COleControl::OnCreate(lpCreateStruct) == -1) return -1;
 // 創建FormView
 m_helloFormView.Create(NULL,NULL,AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL);
 return 0;
}
void CHelloCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) {
 // 定位Hello對話框
 m_helloFormView.MoveWindow(rcBounds,TRUE);
}
  三、引入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() { // 創建打印線程 m_pPrintThread = (CPrintThread*) AfxBeginThread(RUNTIME_CLASS(CPrintThread), THREAD_PRIORITY_NORMAL, CREATE_SUSPENDED, NULL); m_pPrintThread- >ResumeThread();}
 
  在PrintThread.h中添加新成員變量

  CPrintDoc* m_pPrintDoc和CPrintFrame* m_pPrintFrame,并在構造函數和析構函數中完成對它們的初始設置和清除,確認在PrintThread.h中已加入語句#include "PrintDoc.h"和#include "PrintFrame.h";


CPrintThread::CPrintThread(){
 m_pPrintDoc=NULL;
 m_pPrintFrame=NULL;
}
CPrintThread::~CPrintThread(){
 if (m_pPrintDoc!=NULL)
  delete m_pPrintFrame;
 if (m_pPrintFrame!=NULL)
  delete m_pPrintDoc;
}
  在PrintThread.cpp的CPrintThread::InitInstance中,進行創建窗體CPrintFrame,確認在PrintThread.cpp中已加入語句#include "PrintFrame.h";

BOOL CPrintThread::InitInstance(){
 // 創建文檔/視圖框架
 CPrintFrame* pFrame = new CPrintFrame;
 m_pMainWnd = pFrame;
 m_pPrintFrame=pFrame;
 m_pPrintDoc=new CPrintDoc;
 CCreateContext context;
 context.m_pCurrentDoc = m_pPrintDoc;
 context.m_pNewViewClass = RUNTIME_CLASS(CPrintView);
 pFrame- >Create(NULL,"打印主窗體", WS_OVERLAPPEDWINDOW,CRect(0,0,100,100), NULL,NULL,0,&context);
 pFrame- >InitialUpdateFrame(m_pPrintDoc, TRUE);
 return TRUE;
}
  在PrintView.h的CPrintView中,添加成員函數CPrintDoc* GetDocument(),確認在PrintView.h中已加入語句#include "PrintDoc.h";

CPrintDoc* CPrintView::GetDocument(){
 ASSERT(m_pDocument- >ISKINdOf (RUNTIME_CLASS(CPrintDoc)));
 return (CPrintDoc*)m_pDocument;
}
  四、實現ActiveX打印預覽技術

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

  在上面工作的基礎上,用ClassWizard對CPrintView類實現OnPreparePrinting函數,如下:

BOOL CPrintView::OnPreparePrinting(CPrintInfo* pInfo) { // 預備打印 return DoPreparePrinting(pInfo);}
  用ClassWizard在Automation頁中為CHelloCtrl添加一方法void DoPreview(),外部名亦為DoPreview;

void CHelloCtrl::DoPreview() {
 // 進行打印預覽
 ::PostMessage(m_pPrintThread- >m_pPrintFrame- > GetActiveView()- >m_hWnd,WM_USER_PREVIEW,0,0);
}
  在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(CPrintView)
//
}}
AFX_MSG_MAPEND_MESSAGE_MAP()
  為類CPrintView添加成員函數LRESULT DoPreview(WPARAM wParam, LPARAM lParam)
 
  實現CPrintView::DoPreview如下:

LRESULT CPrintView::DoPreview(WPARAM wParam, LPARAM lParam){
 // 進入打印預覽
 OnFilePrintPreview();
 return 0;
}
  為CPrintView添加public成員變量COleControl* m_pControlPreview,并初始化如下:

CPrintView::CPrintView(){
 m_pControlPreview=NULL;
 // 初始化要預覽的ActiveX控件類為空
}
  在CPrintView::OnDraw中對控件內容進行顯示:

void CPrintView::OnDraw(CDC* pDC){
 if (m_pControlPreview==NULL)
  pDC->TextOut(0,0,"No Preview View");
 else {
  CRect controlRect;
  m_pControlPreview- >GetClientRect(&controlRect);
  CRect previewRect(0,0,controlRect. Width(),controlRect.Height());
  m_pControlPreview- >OnDraw (pDC,controlRect,controlRect);
 }
}
  用ClassWizard在Automation頁中為CHelloCtrl添加一方法void SetPreviewControl(),外部名亦為SetPreviewControl,對其實現如下:


void CHelloCtrl::SetPreviewControl() {
 // 設置要預覽的View
 CView* pView=m_pPrintThread- > m_pPrintFrame- >GetActiveView();
 CPrintView* pPrintView=(CPrintView*)pView;
 pPrintView- >m_pControlPreview=this;
}
  在ActiveX Control Test Container測試,激活方法次序為DoHello、SetPreviewControl、DoPreview。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91影院在线免费观看视频| 亚洲午夜未删减在线观看| 欧美日韩成人免费| 91在线国产电影| 欧美高清在线视频观看不卡| 中文国产成人精品久久一| 国产亚洲精品久久| 久久频这里精品99香蕉| 国产精品免费在线免费| 日韩中文字幕精品视频| 亚洲欧美日韩一区二区三区在线| 亚洲一区二区精品| 欧美日韩第一视频| 成人欧美一区二区三区黑人| 欧美理论在线观看| 成人性生交大片免费看视频直播| 国产精品1234| 欧美老女人xx| 亚洲第一av网站| 亚洲综合在线做性| 久久成人精品一区二区三区| 欧美成人h版在线观看| 亚洲美女免费精品视频在线观看| 国产精品人人做人人爽| 亚洲色图15p| 欧美激情乱人伦| 最近更新的2019中文字幕| 亚洲全黄一级网站| 亚洲欧洲第一视频| 欧美日韩国产精品| 国产99久久久欧美黑人| 久久91亚洲精品中文字幕| 日韩av在线直播| 国产成人精品视频在线观看| 91国产在线精品| 精品久久久久久久中文字幕| 亚洲香蕉在线观看| 精品国产自在精品国产浪潮| 亚洲成色999久久网站| 久久国产加勒比精品无码| 日本欧美中文字幕| 欧美激情一二三| 欧美性极品xxxx做受| 综合国产在线观看| 久久人人97超碰精品888| 色伦专区97中文字幕| 成人免费大片黄在线播放| 57pao成人永久免费视频| 韩国一区二区电影| 国产999视频| 久热精品视频在线观看一区| 精品国产福利在线| 欧洲亚洲免费在线| 国产美女91呻吟求| 国产精品久久久久久久午夜| 欧美激情亚洲自拍| 欧美一级高清免费| 亚洲香蕉伊综合在人在线视看| 日韩欧美国产成人| 国产亚洲精品久久| 亚洲欧美国产视频| 一区二区三区四区在线观看视频| 欧美午夜女人视频在线| 久久五月天综合| 欧亚精品在线观看| 国产精品久久久久7777婷婷| 亚洲韩国欧洲国产日产av| 久久久久久中文字幕| 欧美麻豆久久久久久中文| 97在线日本国产| 97在线观看视频国产| 国产成人黄色av| 亚洲国产精品久久久久秋霞不卡| 亚洲成人激情视频| www.久久撸.com| 日韩中文字幕免费看| 国产色婷婷国产综合在线理论片a| 亚洲天堂免费在线| 日韩在线观看免费高清完整版| 91精品在线观| 黄色91在线观看| 这里只有精品视频| 亚洲欧美日韩直播| 韩剧1988免费观看全集| 久久久精品日本| 亚洲最大福利网站| 国产一区二区三区久久精品| 亚洲成人aaa| 日韩中文字幕久久| 亚洲少妇中文在线| 欧美第一页在线| 日本精品va在线观看| 久久精品国产综合| 午夜精品99久久免费| 国产视频丨精品|在线观看| 日韩一区二区精品视频| 成人黄色免费片| 国产精品日韩精品| 欧美香蕉大胸在线视频观看| 曰本色欧美视频在线| 日韩网站在线观看| 久久艹在线视频| 在线观看不卡av| 欧美日韩一二三四五区| 国产成人精品视频在线观看| 亚洲精品国产精品国自产在线| 久久久久久美女| www.欧美免费| 欧美老女人bb| 亚洲丝袜av一区| 亚洲国产天堂久久国产91| 成人写真福利网| 啊v视频在线一区二区三区| 色婷婷亚洲mv天堂mv在影片| 亚洲裸体xxxx| 欧美做受高潮1| 久久久中精品2020中文| 欧美日韩中文字幕日韩欧美| 亚洲人成电影网站色xx| 亚洲欧美精品suv| 久久精品视频在线播放| 国产精品激情av在线播放| 国产精品久久久久久久久粉嫩av| 欧美肥臀大乳一区二区免费视频| 2021久久精品国产99国产精品| 成人国产精品一区| 国内外成人免费激情在线视频| 福利一区视频在线观看| 日本高清久久天堂| 精品国产一区二区在线| 中文国产亚洲喷潮| 亚洲欧美日韩中文在线制服| 欧美超级免费视 在线| 亚洲r级在线观看| 国产精品偷伦视频免费观看国产| 91精品中文在线| 亚洲石原莉奈一区二区在线观看| 91在线高清免费观看| 国产精品成人aaaaa网站| 欧美一级bbbbb性bbbb喷潮片| 91亚洲午夜在线| 久久伊人免费视频| 久久精品视频导航| 少妇av一区二区三区| 日本高清不卡的在线| 中文字幕免费精品一区高清| 国产精品ⅴa在线观看h| 精品久久中文字幕久久av| 国产精品色视频| 成人美女免费网站视频| 国产日韩在线一区| 欧美色道久久88综合亚洲精品| 国产精品黄色影片导航在线观看| 亚洲影院污污.| 一区二区三区视频免费| 精品久久久精品| …久久精品99久久香蕉国产| 久久久久久久999| 日产日韩在线亚洲欧美| 国产精品专区第二| 麻豆成人在线看| 亚洲第一精品久久忘忧草社区| 久久亚洲国产精品| 欧美成人中文字幕|