基于单文档程序的OCX创建方法:(OCXDoc的创建方法)

来源:互联网 发布:淘宝比价软件哪个好 编辑:程序博客网 时间:2024/06/06 11:38

基于单文档的OCX控件,应用范围是WEB发布显示工业监控软件界面


COCXDoc的建立过程:

1.建立MFC ActiveX工程 (例如:MyActiveX)
2.用CActiveXDocControl替换COleControl
3.把ActivDoc.h和ActivDoc.cpp加入工程中
4.ActivDoc.h头文件加入MyActiveXCrtl文件的头部
5.拷贝单文档视图的文件/**********(这里是指realview文件)**********/(框架文件(*frm.cpp,*frm.h),文档文件(*doc.cpp,*doc.h),视图文件(*view.cpp,*view.h),和其他.cpp和.h,注意,不包括App文件)到ActiveX工程。
6.把这些文件加入工程,在这些文件头部加入App头文件的包含,并在MyActiveXCrtl文件的头部加入这些头文件包含,如果StdAfx.h有不同,需要手工合并。
7.手工把单文档视图工程的资源文件合并到ActiveX工程的资源文件中(应该不难吧,把两个资源文件用编辑器打开,把变量,对话框,类等等全部合并,不过这是个细活,哈)。
8.把单文档视图工程的classWizard(*.clw)文件合并到ActiveX工程中(方法同上,用编辑器打开两个文件手工合并)。
9.在框架文件中加入定义:
class CActiveToolBar : public CToolBar{     LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);     public:     BOOL Create(CWnd* pParentWnd);};
和动作:
BOOL CActiveToolBar::Create(CWnd* pParentWnd){     if (!CToolBar::Create(pParentWnd) || !LoadToolBar(IDR_MAINFRAME))         return FALSE;     SetBarStyle(GetBarStyle() |    CBRS_TOOLTIPS |         CBRS_FLYBY | CBRS_SIZE_FIXED);     return TRUE;}
LRESULT CActiveToolBar::WindowProc(UINT message, WPARAM wParam, LPARAM lParam){      MSG msg;     msg.hwnd = m_hWnd;     msg.message = message;     msg.wParam = wParam;     msg.lParam = lParam;     GetCursorPos(&msg.pt);     FilterToolTipMessage(&msg);     return CToolBar::WindowProc(message,wParam,lParam);}

10.把框架文件中用到的sCStatusBarCSplitterWnd删除,并把ToolBar的类型改为CActiveToolBar,
例如:
CToolBar m_ToolBar; 
改为
CActiveToolBar m_ToolBar;

11.把框架文件的oncreate改为类似:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct){   if (CFrameWnd::OnCreate(lpCreateStruct) == -1)   return -1;   if (!m_ToolBar.Create(this))      {          TRACE0("Failed to create toolbar ");          return -1;      }    return 0;}
12.利用classWizard给控件(*ctrl)的Automation中加入成员变量 DocumentName,产生onchange动作:
void MyMiniDrawCtrl::OnDocumentNameChanged(){    GetDocTemplate()->OpenDocumentFile(m_documentName);    SetModifiedFlag();}
13.同上加入StockBorderStyle.
14.删除控件的OnDraw动作,把构造函数改为,类似以下:
MyMiniDrawCtrl::MyMiniDrawCtrl(){   InitializeIIDs(&IID_DMyMiniDraw, &IID_DMyMiniDrawEvents);   // TODO: Initialize your control's instance data here.   SetInitialSize(200, 200);   AddDocTemplate(new CActiveXDocTemplate(   RUNTIME_CLASS(CMinidrawDoc),   //改为你的文档类   RUNTIME_CLASS(CMainFrame), //改为你的框架类   RUNTIME_CLASS(CMinidrawView))); //改为你的视图类}
参考文献引用完毕


0 0
原创粉丝点击