基于单文档的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.把框架文件中用到的
sCStatusBar和
CSplitterWnd删除,并把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.同上加入
Stock-
BorderStyle.
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))); //改为你的视图类
}
参考文献引用完毕