单文档视图结构ActiveX控件
ActiveX 控件概述

ActiveX 控件概述Visual FoxPro 包含一组 ActiveX 控件(.OCX 文件),您可以将这些控件添加到您的应用程序中,并一起发布。
使用 Visual FoxPro 的 OLE 容器控件,可以将 ActiveX 控件添加到应用程序的表单中。
如果您在安装 Visual FoxPro 时选择了“完全安装”选项,则默认安装 ActiveX 控件。
如果未选择此选项,您可以在任何时候运行Visual FoxPro 安装程序,并只安装 ActiveX 控件。
ActiveX 控件被安装在 Windows 95 的 SYSTEM 目录中,或者 Windows NT 的SYSTEM32 目录中。
附注:与 Visual FoxPro 一起发布的很多 ActiveX 控件是用来与其他应用程序一起使用的。
当把一个控件放在表单上,并按下 F1 键查看该控件的帮助信息时,所显示的帮助是原来应用程序的,而不是Visual FoxPro 的。
下列是与 Visual FoxPro 一起发布的 .OCX 文件,及其包含的ActiveX 控件。
文件 控件COMCTRL32.OCX ImageList 控件ListView 控件ProgressBar 控件Slider 控件StatusBar 控件TabStrip 控件Toolbar 控件TreeView控件COMDLG32.OCX Common Dialogs 控件DBLIST32.OCX MSDataCombo 控件MSDataList 控件FOXHWND.OCX Visual FoxPro HWND 控件FOXTLIB.OCX Visual FoxPro Foxtlib 控件GRID32.OCX Grid 控件MCI32.OCX Microsoft Multimedia 控件MSACAL70.OCX Calendar 控件MSCOMM32.OCX Microsoft Comm 控件MSMAPI32.OCX Microsoft MAPI Message 控件Microsoft MAPI Session 控件MSOUTL32.OCX Outline 控件PICCLP32.OCX PicClip 控件RICHTX32.OCX Rich Textbox 控件SINFO.OCX SysInfo 控件TABCTL32.OCX SSTab 控件THREED32.OCX Threed Checkbox 控件Threed Command Button 控件Threed Frame 控件Threed Group Push Button 控件Threed Option Button 控件Threed Panel 控件附注:如果安装了 Visual FoxPro 联机文档,则也安装了MediaView 1.41 ActiveX 控件 (MEDV141N.OCX)。
ExcelActiveX控件属性含义

Cycle(表单)
当用户离开结构或页面上的最后一个控件时要执行的操作(所有表单或当前表单)。
KeepScrollBarsVisible(表单)
在不需要时滚动条是否保持可见。
ScrollBars(表单)
控件是否具有垂直滚动条和/或水平滚动条。
ScrollHeight、ScrollWidth(表单)
Text(表单)
控件中的文本。
TextAlign(表单)
文本在控件中的对齐方式(左对齐、居中或右对齐)。
WordWrap(表单)
控件内容是否在行尾自动换行。
BorderStyle(表单)
边框的类型(无或单线)。
ForeColor(表单)
前景色。
Shadow (Excel)
控件是否有阴影。
SpecialEffect(表单)
边框的可视外观(平面、凸起、凹陷、蚀刻或凸块)。
键盘和鼠标
Accelerator(表单)
控件的快捷键。
MouseIcon(表单)
自定义鼠标图标。
Name(表单)
控件的名称。
Placement (Excel)
控件附加到其下方单元格的方式(自由浮动、移动但不调整大小,或者移动并调整大小)。
PrintObject (Excel)
控件是否可打印。
Visible(表单)控件源自可见还是隐藏。大小和位置AutoSize(表单)
控件的大小是否可以自动调整以显示所有内容。
通过移动滚动条可以查看的整个区域的高度或宽度(以磅为单位)。
ScrollLeft、ScrollTop(表单)
逻辑表单的左边缘或上边缘与结构的左边缘或上边缘之间的距离(以磅为单位)。
如何在Word文档中使用Active控件排版

如何在Word文档中使用Active控件排版
在用word输入文字中,有时需要使用Avtive控件来丰富word文档的排版效果。
这里可以用软件自带的Active控件。
以下是学习啦小编为您带来的关于Word文档使用Active控件排版,希望对您有所帮助。
Word文档使用Active控件排版
1、打开一个word的文件,选中一个单元格,然后鼠标左键单击菜单【开发工具】>>【Avtive控件】>>【控件列表】,如下图所示。
2、鼠标左键选择一个【Label控件】,在word中绘制出该控件,可拖动控件四周节点控制大小,也可移动位置,如下图所示。
3、鼠标左键选择一个【Image控件】,在word中绘制出该控件,可拖动控件四周节点控制大小,也可移动位置,如下图所示。
4、鼠标左键选择一个【Combo控件】,在word中绘制出该控件,可拖动控件四周节点控制大小,也可移动位置,如下图所示。
5、鼠标左键选择一个【Button控件】,在word中绘制出该控件,可拖动控件四周节点控制大小,也可移动位置,如下图所示。
6、鼠标左键选择一个【List控件】,在word中绘制出该控件,可拖动控件四周节点控制大小,也可移动位置,如下图所示。
猜你喜欢:
1.word怎么进行排版的两种方法
2.Word2007怎么使用书籍折页进行排版打印
3.word十大排版技巧
4.word必备的基本排版知识
5.Word中如何使用控件。
什么是Activex控件

什么是Activex控件什么是Activex控件?经常上网的伙伴们会发现在打开某些网页后,会出现Activex控件被阻止的提示,那么,Activex控件是什么?如何解决这一现象?对此,店铺就为大家介绍一下什么是Activex控件。
欢迎大家前来阅读!!Activex控件是什么ActiveX控件,简单的说,它就是IE浏览器的插件,例如IE的Flash播放器就是一个ActiveX控件。
ActiveX存在明显的安全问题,因为它其实也是一种程序,如果你安装了某个ActiveX控件,那这个控件就有权限在你电脑上做很多事情,例如偷偷的监控你的网页浏览记录,在后台安装恶意程序,时不时在你电脑上产生弹窗,甚至窃取你的帐号密码等,正因为这样,正因为这样,IE内核的浏览器有时候会提示你不要加载这些控件。
Activex控件被阻止怎么办第一步:打开浏览器,然后选择菜单栏上“工具”选项,选择“工具”选项之后,选择下拉菜单的“Internet选项”。
第二步:打开Internet选项之后,切换到安全选项卡,然后选择安全选项卡下的自定义级别。
第三步:单击自定义级别之后打开安全设置窗口,将重置为一栏的安全级别设置为安全级-中,然后勾选下载已签名的Activex控件一栏的启用,再勾选运行Activex控件和插件一栏的启用,把该控件和插件给启用上来,部分显示不安全的选项,可以勾选为提示,然后单击确定按钮。
第四步:设置完成之后单击确定按钮,关闭浏览器,然后重新启用浏览器,这样就不会再有提示了。
注意事项:如果把浏览器的安全级别设置为高,不管你是否勾选运行Activex控件,浏览器都会自动改其为禁用,所以需要将安全级设置为中。
以上就是Activex控件被阻止怎么办的解决办法。
总结以上就是店铺为大家带来的Activex控件被阻止现象的解决方法,希望可以帮助到大家。
什么是Activex控件将本文的Word文档下载到电脑,方便收藏和打印推荐度:点击下载文档文档为doc格式。
excel中activex 控件组合框控件的使用方法

excel中activex 控件组合框控件的使用方法在Excel 中,ActiveX 控件组合框(ComboBox)是一种常用的交互式工具,可用于创建下拉菜单或选择列表。
以下是ActiveX 控件组合框的基本使用方法:插入组合框:打开Excel 文档,切换到“开发者”选项卡(如果没有该选项卡,你需要启用它),然后选择“插入” -> “ActiveX 控件” -> “组合框”。
在工作表上绘制组合框。
设置属性:在设计模式下,右键单击组合框,选择“属性”以打开属性窗口。
在属性窗口中,你可以设置组合框的名称、字体、大小等属性。
添加选项:通过双击组合框,或者在设计模式下右键单击组合框选择“属性” -> “Items” 来添加选项。
在"Items" 属性框中,你可以输入组合框的各个选项,每个选项占一行。
编写VBA 代码:如果你想通过VBA 代码来动态控制组合框,可以在"开发者" 选项卡中选择"Visual Basic",然后编写相应的VBA 代码。
处理事件:组合框可以触发多个事件,比如Change、Click 等。
你可以通过VBA 代码处理这些事件。
在VBA 编辑器中,选择组合框,然后选择相应的事件,编写处理代码。
调整样式:你可以通过修改组合框的属性来调整其外观,比如设置背景颜色、字体颜色等。
运行模式:在设计模式下,你可以编辑和设置组合框的属性。
在运行模式下,你可以与组合框交互并查看效果。
删除组合框:如果不再需要组合框,可以在设计模式下右键单击组合框,选择“剪切”或“删除”来删除它。
通过这些步骤,你可以在Excel 中成功使用ActiveX 控件组合框,并实现相应的交互功能。
第八章 ActiveX控件简介

第八章 ActiveX控件简介 ActiveX控件简介
添加属性页” 图8-16 “添加属性页”对话框 添加属性页
介绍” 图8-17 “介绍”对话框 介绍
第八章 ActiveX控件简介 ActiveX控件简介
第八章 ActiveX控件简介 ActiveX控件简介
8.4 加载 加载ActiveX控件的方法 控件的方法
建立ActiveX控件的基本过程如下: 控件的基本过程如下: 建立 控件的基本过程如下 控件的功能。 (1)确定 )确定ActiveX控件的功能。 控件的功能 控件的外观。 (2)确定 )确定ActiveX控件的外观。 控件的外观 (3)确定控件应具有的属性、方法和事件。 )确定控件应具有的属性、方法和事件。 控件工程, (4)新建一个 )新建一个Visual Basic的ActiveX控件工程, 的 控件工程 设计出控件的外观。 设计出控件的外观。 • (5)编写代码。 )编写代码。 (6)建立一个测试工程,测试控件。 )建立一个测试工程,测试控件。 • (7)将控件编译成OCX文件。 )将控件编译成 文件。 文件 • • • • •
8.1 ActiveX控件的基本概述 控件的基本概述
ActiveX 控件是 控件是ActiveX新技术之一,是OLE的第 个 新技术之一, 的第3个 新技术之一 的第 版本,它充分利用OLE和ActiveX技术的自定义控件,是 技术的自定义控件, 版本,它充分利用 和 技术的自定义控件 基于与应用程序无关的思想而设计的。它对最初OLE控 基于与应用程序无关的思想而设计的。它对最初 控 件的最大扩展是增加了Internet功能,用户可以将 功能, 件的最大扩展是增加了 功能 用户可以将ActiveX 控件加入到Internet主页上 同时,由于引入了DCOM 主页上。 控件加入到Internet主页上。同时,由于引入了DCOM 分布式组件功能),使其成了分布式组件, ),使其成了分布式组件 (分布式组件功能),使其成了分布式组件,用户可以通 过网络在本机调用远程机器上的ActiveX控件。即ActiveX 控件。 过网络在本机调用远程机器上的 控件 控件合并了VBX(Visual Basic控件的一个初期版本,目 控件的一个初期版本, 控件合并了 ( 控件的一个初期版本 前已很少应用)技术和ActiveX标准。从本质上讲, 标准。 前已很少应用)技术和 标准 从本质上讲, ActiveX 控件是一个 控件是一个ActiveX服务器,它能提供所有的 服务器, 服务器 OLE功能和服务,可视化编辑、拖放和 功能和服务, 自动化。 功能和服务 可视化编辑、拖放和OLE自动化。 自动化 ActiveX 控件需要在系统注册表中进行注册。ActiveX 控 控件需要在系统注册表中进行注册。 件可以用许多语言来开发,包括Visual Basic、Visual C++、 件可以用许多语言来开发,包括 、 、 Delphi、Borland C ++ Builder等。 、 等
Excel中ActiveX控件的应用方法

Excel中ActiveX 控件的应用方法Excel在工作表或图表上可使用ActiveX控件,根据小编使用的体会,在工作上处理控件时,必须注意和了解如下事项:Excel中ActiveX 控件的应用方法(一)用Excel5.0/95工作簿文件格式保存Excel97工作簿时,将选择ActiveX控件信息。
当用户通过双击鼠标来编辑内嵌在其它应用程序文档中的Excel97工作簿时,该工作簿上的控件将不会正常工作。
如果用户是通过用右键单击工作簿,然后选中快捷菜单上的“打开”命令来编辑工作簿的话,工作簿上的控件就能正常工作了。
(二)当ActiveX控件处于激活状态时,将禁用某些MicrosoftExcelVisualBasic方法和属性。
例如,当某一控件激活时,就不能使用Sort方法,故下述按钮单击事件处理过程中的代码将失败(因为用户单击按钮后,该按钮就处于激活状态)。
PRivateSubCommandButton1 ClickRange(″a1:a10″) SortKey1:=Range(″a1″)EndSub解决办法是通过选激活工作表上其它元素的方法来绕过这种问题。
例如,可用下列代码对单元格区域排序:PrivateSubCommandButton1 ClickRange(″a1″) ActivateRange(″a1:a10″) SortKey1:=Range(″a1″)CommandButton1 ActivateEnd Sub(三)在MicrosoftExcel中,用OLEObjects集合中的OLEObject 对象代表ActiveX控件。
如果要用编程的方式向工作表添加ActiveX控件,可用OLEObjects集合的Add方法。
例如向第一张工作表添加命令按钮。
Worksheets(1) OLEObjects Add″Forms CommandButton 1″,_Left:=10,Top:=10,Height:=20,Width:=100因为ActiveX控件也可用OLEObjects集合中的OLEObject对象代表,所以也可用该集合中的对象来设置控件的属性。
excel表单控件和 ActiveX 控件概念

工作表中的表单、表单控件和ActiveX 控件概念是的,确实如此。
在Microsoft Excel 中,使用少量或者无需使用Microsoft Visual Basic for Applications (VBA) 代码即可创建出色的表单。
使用表单以及可以向其中添加的许多控件和对象,您可以显著地增强工作表中的数据项并改善工作表的显示方式。
∙什么是表单?∙Excel 表单的类型数据表单含有表单和ActiveX 控件的工作表表单控件ActiveX 控件绘图工具对象使用工作表表单中的控件和对象确定工作表中控件的类型VBA 用户表单什么是表单?无论是打印表单还是联机表单都是一种具有标准结构和格式的文档,这种文档可让用户更轻松地捕获、组织和编辑信息。
∙打印表单含有说明、格式、标签以及用于写入或键入数据的空格。
您可以使用Excel 和Excel 模板创建打印表单。
∙联机表单包含与打印表单相同的功能。
此外,联机表单还包含控件。
控件是用于显示数据或者更便于用户输入或编辑数据、执行操作或进行选择的对象。
通常,控件可使表单更便于使用。
例如,列表框、选项按钮和命令按钮都是常用控件。
通过运行Visual Basic for Applications (VBA) 代码,控件还可以运行指定的宏和响应事件,如鼠标点击。
您可以使用Excel 通过多种方式创建打印表单和联机表单。
Excel 表单的类型您可以在Excel 中创建多种类型的表单:数据表单、含有表单和ActiveX 控件的工作表以及VBA 用户表单。
可以单独使用每种类型的表单,也可以通过不同方式将它们结合在一起来创建适合您的解决方案。
数据表单数据表单为在无需水平滚动的情况下在单元格区域或表格中输入或显示一整行信息提供了一种便捷方式。
您可能会发现,当数据的列数超过可以在屏幕上查看的数据列数时,使用数据表单可以使数据输入变得更容易,而无需在列之间进行移动。
如果以标签的形式将列标题列出的文本框这一简单表单足以满足您的需求,而且您不需要使用复杂的或自定义的表单功能(例如列表框或调节钮),则可以使用数据表单。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单文档/视图模式是MFC编程里比较强大的一种编程模式,如果ActiveX控件能够用这种模式的话,将可以做出非常强大的Web在线应用。
下面我们就介绍一种把单文档/视图模式的程序改造成ActiveX控件的方法。
做起来很难,但是完成了会很有成就感,本方法来源于15Seconds。
在VC6.0和下都已证明可行。
我用这个方法做了一个Web上的在线服装设计软件,Client 端支持NT4.0,客户公司有上千台NT4.0。
据美国同事说在投标中击败了Altium公司(电路设计软件Protel的开发商)的方案,哈。
需要要两个文件:// ActivDoc.cpp : implementation file//#include "stdafx.h"#include "ActivDoc.h"CActiveXDocTemplate::CActiveXDocTemplate(CRuntimeClass* pDocClass, CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass): CSingleDocTemplate(IDR_NOTUSED, pDocClass, pFrameClass,pViewClass){ASSERT(pFrameClass);}CFrameWnd* CActiveXDocTemplate::CreateDocViewFrame(CWnd* pParen tWnd){CWaitCursor cursor;TRY{ASSERT(pParentWnd && IsWindow(*pParentWnd));ASSERT_KINDOF(CActiveXDocControl, pParentWnd);m_pParentWnd = pParentWnd;m_pFrameWnd = NULL;// OpenDocumentFile is a virtual method (implemented in// the CSingleDocTemplate base class) that creates// the document (either empty or loaded from the specified// file) and calls our CreateNewFrame function. Passing// NULL to the function creates a new document. Incidentally,// the view is created by the CFrameWnd's OnCreateClient()// method.if (!OpenDocumentFile(NULL))return NULL;// Since OpenDocumentFile sets m_pFrame, we can now use it.ASSERT(m_pFrameWnd);ASSERT_KINDOF(CFrameWnd, m_pFrameWnd);m_pFrameWnd->ShowWindow(SW_SHOWNORMAL);return m_pFrameWnd;}CATCH_ALL(e){AfxMessageBox("Read storyboard error.please retry!");//THROW_LAST();}END_CATCH_ALLreturn NULL;}CFrameWnd* CActiveXDocTemplate::CreateNewFrame(CDocument* pDoc, CFrameWnd* pOther){ASSERT(pOther == NULL);ASSERT(m_pFrameClass != NULL);if (pDoc != NULL)ASSERT_VALID(pDoc);// Create a frame wired to the specified documentCCreateContext context;context.m_pCurrentFrame = pOther;context.m_pCurrentDoc = pDoc;context.m_pNewViewClass = m_pViewClass;context.m_pNewDocTemplate = this;m_pFrameWnd = (CFrameWnd*)m_pFrameClass->CreateObject();if (m_pFrameWnd == NULL){TRACE1("Warning: Dynamic create of frame %hs failed. ",m_pFrameClass->m_lpszClassName);return NULL;}ASSERT_KINDOF(CFrameWnd, m_pFrameWnd);if (context.m_pNewViewClass == NULL)TRACE0("Warning: creating frame with no default view. ");// The frame is created as a menu-less child of the// CActiveXDocControl in which it will reside.ASSERT_KINDOF(CActiveXDocControl, m_pParentWnd);if (!m_pFrameWnd->Create(NULL, "", WS_CHILD|WS_VISIBLE, CFrameWnd::rectDefault, m_pParentWnd, NULL, 0, &context)) {TRACE0("Warning: CDocTemplate couldn't create a frame. ");return NULL;}return m_pFrameWnd;}CDocument* CActiveXDocTemplate::OpenDocumentFile(LPCTSTR lpszPathName, BOOL bVerifyExists){CWaitCursor cursor;SaveDocumentFile();m_docFile = lpszPathName;if (bVerifyExists){DWORD dwAttrib = GetFileAttributes(m_docFile);if (dwAttrib == 0xFFFFFFFF ||dwAttrib == FILE_ATTRIBUTE_DIRECTORY){lpszPathName = NULL;}}return CSingleDocTemplate::OpenDocumentFile(lpszPathName, TRUE);}void CActiveXDocTemplate::SaveDocumentFile(){if (m_pOnlyDoc != NULL){if (!m_docFile.IsEmpty())m_pOnlyDoc->OnSaveDocument(m_docFile);elsem_pOnlyDoc->SetModifiedFlag(FALSE);}}///////////////////////////////////////////////////////////////////////////// // CActiveXDocControlIMPLEMENT_DYNAMIC(CActiveXDocControl, COleControl)BEGIN_MESSAGE_MAP(CActiveXDocControl, COleControl) //{{AFX_MSG_MAP(CActiveXDocControl)ON_WM_CREATE()ON_WM_SIZE()ON_WM_TIMER()ON_WM_DESTROY()//}}AFX_MSG_MAPON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)END_MESSAGE_MAP()BEGIN_DISPATCH_MAP(CActiveXDocControl, COleControl) //{{AFX_DISPATCH_MAP(CActiveXDocControl)//}}AFX_DISPATCH_MAPEND_DISPATCH_MAP()BEGIN_EVENT_MAP(CActiveXDocControl, COleControl)//{{AFX_EVENT_MAP(COleFrameCtrl)//}}AFX_EVENT_MAPEND_EVENT_MAP()int CActiveXDocControl::m_bDocInitialized = FALSE; CActiveXDocControl::CActiveXDocControl(){CWaitCursor cursor;m_pDocTemplate = NULL;m_pFrameWnd = NULL;// Since we're in an OCX, CWinApp::InitApplication() is// not called by the framework. Unfortunately, that method// performs CDocManager initialization that is necessary// in order for our DocTemplate to clean up after itself.// We simulate the same initialization by calling the// following code the first time we create a control.if (!m_bDocInitialized){CDocManager docManager;docManager.AddDocTemplate(NULL);m_bDocInitialized = TRUE;}}CActiveXDocControl::~CActiveXDocControl(){// Note that the frame, the document, and the view are// all deleted automatically by the framework!KillTimer(m_Timer);delete m_pDocTemplate;m_bDocInitialized = FALSE;}void CActiveXDocControl::AddDocTemplate(CActiveXDocTemplate* pDocT emplate){// I've decided to call this function AddDocTemplate to// be consistent with naming of CWinApp::AddDocTemplate.// However, only one DocTemplate is allowed per control.CWaitCursor cursor;ASSERT(pDocTemplate);ASSERT(m_pDocTemplate == NULL);m_pDocTemplate = pDocTemplate;}int CActiveXDocControl::OnCreate(LPCREATESTRUCT lpCreateStruct) {CWaitCursor cursor;if (COleControl::OnCreate(lpCreateStruct) == -1)return -1;// The CActiveXDocTemplate object will create the// document, the view, and the frame inside the// control. The reason we need a handle to the frame// is so that we can resize it when the control is// resized.ASSERT(m_pDocTemplate); // Set in call to AddDocTemplate m_pFrameWnd = m_pDocTemplate->CreateDocViewFrame(this); ASSERT_KINDOF(CFrameWnd, m_pFrameWnd);// By default, we'll create the control with a border,// since it looks better for frames containing a toolbar.SetBorderStyle(TRUE);m_IsTimerEnd = "NO";m_Timer = SetTimer(WM_IDLEUPDATECMDUI, 300, NULL);return 0;}void CActiveXDocControl::OnSize(UINT nType, int cx, int cy){COleControl::OnSize(nType, cx, cy);// The CFrameWnd should always fill up the entire client// area of the control.if (m_pFrameWnd != NULL){ASSERT(IsWindow(*m_pFrameWnd));CRect area;GetClientRect(area);m_pFrameWnd->MoveWindow(area.left, area.top, area.right, area.bottom);}}void CActiveXDocControl::OnTimer(UINT nIDEvent){// Since we're in an OCX, we don't control the message loop,// so CWinThread::OnIdle is never called. That means we have // to periodically pump the ON_UPDATE_COMMAND_UI messages // by hand.SendMessageToDescendants(WM_IDLEUPDATECMDUI, TRUE);//COleControl::OnTimer(nIDEvent);/*if (m_IsTimerEnd=="NO") {m_IsTimerEnd = "YES";}*/}void CActiveXDocControl::OnDestroy(){AfxGetApp()->m_pMainWnd = NULL;m_pDocTemplate->SaveDocumentFile();COleControl::OnDestroy();}2. ActivDoc.hclass CActiveXDocTemplate : public CSingleDocTemplate{enum { IDR_NOTUSED = 0x7FFF };CWnd* m_pParentWnd;CFrameWnd* m_pFrameWnd;CString m_docFile;public:CActiveXDocTemplate(CRuntimeClass* pDocClass,CRuntimeClass* pFrameClass, CRuntimeClass* pViewClass);CFrameWnd* CreateDocViewFrame(CWnd* pParentWnd);void SaveDocumentFile();virtual CFrameWnd* CreateNewFrame(CDocument* pDoc,CFrameWnd* pOther);virtual CDocument* OpenDocumentFile(LPCTSTR lpszPathName, BOOL bVerifyExists = TRUE);};///////////////////////////////////////////////////////////////////////////// class CActiveXDocControl : public COleControl{enum { WM_IDLEUPDATECMDUI = 0x0363 };CActiveXDocTemplate* m_pDocTemplate;UINT m_Timer;DECLARE_DYNAMIC(CActiveXDocControl)protected:void AddDocTemplate(CActiveXDocTemplate* pDocTemplate);CDocTemplate* GetDocTemplate() { return m_pDocTemplate; } CString m_IsTimerEnd;//{{AFX_MSG(CActiveXDocControl)afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);afx_msg void OnSize(UINT nType, int cx, int cy);afx_msg void OnTimer(UINT nIDEvent);afx_msg void OnDestroy();//}}AFX_MSG//{{AFX_DISPATCH(CActiveXDocControl)//}}AFX_DISPATCH//{{AFX_EVENT(CActiveXDocControl)//}}AFX_EVENTDECLARE_MESSAGE_MAP()DECLARE_DISPATCH_MAP()DECLARE_EVENT_MAP()public:CActiveXDocControl();virtual ~CActiveXDocControl();CFrameWnd* m_pFrameWnd;static BOOL m_bDocInitialized;enum {//{{AFX_DISP_ID(CActiveXDocControl)//}}AFX_DISP_ID};};改造步骤:1.建立MFC ActiveX工程(例如:MyActiveX)2.用CActiveXDocControl替换COleControl3.把ActivDoc.h和ActivDoc.cpp加入工程中5.拷贝单文档视图的文件(框架文件(*frm.cpp,*frm.h),文档文件(*doc.cpp,*doc.h),视图文件(*view.cpp,*view.h),和其他.cpp和.h,注意,不包括App文件)到ActiveX工程。