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

基于单文档的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))); //改为你的视图类
}
参考文献引用完毕


你可能感兴趣的:(基于单文档程序的OCX创建方法:(OCXDoc的创建方法))