单文档视图结构ActiveX控件
- 格式:doc
- 大小:417.00 KB
- 文档页数:11
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)。
如何在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控件,简单的说,它就是IE浏览器的插件,例如IE的Flash播放器就是一个ActiveX控件。
ActiveX存在明显的安全问题,因为它其实也是一种程序,如果你安装了某个ActiveX控件,那这个控件就有权限在你电脑上做很多事情,例如偷偷的监控你的网页浏览记录,在后台安装恶意程序,时不时在你电脑上产生弹窗,甚至窃取你的帐号密码等,正因为这样,正因为这样,IE内核的浏览器有时候会提示你不要加载这些控件。
Activex控件被阻止怎么办第一步:打开浏览器,然后选择菜单栏上“工具”选项,选择“工具”选项之后,选择下拉菜单的“Internet选项”。
第二步:打开Internet选项之后,切换到安全选项卡,然后选择安全选项卡下的自定义级别。
第三步:单击自定义级别之后打开安全设置窗口,将重置为一栏的安全级别设置为安全级-中,然后勾选下载已签名的Activex控件一栏的启用,再勾选运行Activex控件和插件一栏的启用,把该控件和插件给启用上来,部分显示不安全的选项,可以勾选为提示,然后单击确定按钮。
第四步:设置完成之后单击确定按钮,关闭浏览器,然后重新启用浏览器,这样就不会再有提示了。
注意事项:如果把浏览器的安全级别设置为高,不管你是否勾选运行Activex控件,浏览器都会自动改其为禁用,所以需要将安全级设置为中。
以上就是Activex控件被阻止怎么办的解决办法。
总结以上就是店铺为大家带来的Activex控件被阻止现象的解决方法,希望可以帮助到大家。
什么是Activex控件将本文的Word文档下载到电脑,方便收藏和打印推荐度:点击下载文档文档为doc格式。
excel中activex 控件组合框控件的使用方法在Excel 中,ActiveX 控件组合框(ComboBox)是一种常用的交互式工具,可用于创建下拉菜单或选择列表。
以下是ActiveX 控件组合框的基本使用方法:插入组合框:打开Excel 文档,切换到“开发者”选项卡(如果没有该选项卡,你需要启用它),然后选择“插入” -> “ActiveX 控件” -> “组合框”。
在工作表上绘制组合框。
设置属性:在设计模式下,右键单击组合框,选择“属性”以打开属性窗口。
在属性窗口中,你可以设置组合框的名称、字体、大小等属性。
添加选项:通过双击组合框,或者在设计模式下右键单击组合框选择“属性” -> “Items” 来添加选项。
在"Items" 属性框中,你可以输入组合框的各个选项,每个选项占一行。
编写VBA 代码:如果你想通过VBA 代码来动态控制组合框,可以在"开发者" 选项卡中选择"Visual Basic",然后编写相应的VBA 代码。
处理事件:组合框可以触发多个事件,比如Change、Click 等。
你可以通过VBA 代码处理这些事件。
在VBA 编辑器中,选择组合框,然后选择相应的事件,编写处理代码。
调整样式:你可以通过修改组合框的属性来调整其外观,比如设置背景颜色、字体颜色等。
运行模式:在设计模式下,你可以编辑和设置组合框的属性。
在运行模式下,你可以与组合框交互并查看效果。
删除组合框:如果不再需要组合框,可以在设计模式下右键单击组合框,选择“剪切”或“删除”来删除它。
通过这些步骤,你可以在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对象代表,所以也可用该集合中的对象来设置控件的属性。
工作表中的表单、表单控件和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 用户表单。
可以单独使用每种类型的表单,也可以通过不同方式将它们结合在一起来创建适合您的解决方案。
数据表单数据表单为在无需水平滚动的情况下在单元格区域或表格中输入或显示一整行信息提供了一种便捷方式。
您可能会发现,当数据的列数超过可以在屏幕上查看的数据列数时,使用数据表单可以使数据输入变得更容易,而无需在列之间进行移动。
如果以标签的形式将列标题列出的文本框这一简单表单足以满足您的需求,而且您不需要使用复杂的或自定义的表单功能(例如列表框或调节钮),则可以使用数据表单。
WordVBA---ActiveX控件在Word文档中的使用方法当您想要提供一种完善的方式让用户与宏直接进行交互、而不受对话框干扰的时候,可以向文档直接添加ActiveX控件,这如同可以向自定义对话框添加ActiveX控件一样。
使用以下过程可以将ActiveX控件添加到您的文档。
1、向文档中添加控件您可以向文档的图形层或文本图层添加ActiveX控件。
★向图形层添加控件:单击控件工具箱上的控件。
拖动控件的调整控点,直到控件的轮廓大小和形状符合要求。
★向文本层添加控件:请在按住SHIFT键的同时单击控件工具箱上的控件。
该控件将自动添加到文档中的插入点。
注释:将一个控件(或一组控件)从窗体拖回"控件工具箱",即可创建一个可重复使用的该控件的模板。
这是一个非常有用的功能,能为用户实现标准的应用程序界面。
2、设置控件属性在设计阶段(宏运行之前)可以设置一些ActiveX控件的属性。
在设计模式中,右键单击一个控件并单击右键菜单中的"属性"以显示"属性"窗口。
属性名称显示在窗口的左栏,而属性值显示在右栏。
可在属性名称的右边输入新值来设置该属性的值。
3、初始化控件属性您可以通过在宏中使用Visual Basic代码在运行时初始化ActiveX控件。
例如,您可在其中填充列表框中,设置文本值或设置选项按钮。
以下示例使用Visual Basic的AddItem方法将数据添至名为lstRegions的列表框,然后设置文本框的值并显示窗体。
Private Sub GetUserName()With UserForm1.lstRegions.AddItem"North".lstRegions.AddItem"South".lstRegions.AddItem"East".lstRegions.AddItem"West".txtSalesPersonID.Text="00000".Show'...End WithEnd Sub也可使用窗体的Visual Basic Initialize事件中的代码为窗体上的控件设置初始值。
Excel中的窗体控件和ActiveX控件2009年1月21日评论发表评论Excel中有两种不同的控件。
一种是窗体工具条控件(Forms toolbar controls),通过点击菜单“视图”->“工具栏”,在弹出菜单上选择“窗体”,将出现“窗体”工具条控件窗口。
另外一种是ActiveX控件,通过点击菜单“视图”->“工具栏”,在弹出菜单上选择“控件工具箱”(也可以选择“Visual Basic”,然后再在工具栏上选择“控件工具箱”),将出现“控件工具箱”窗口。
窗口工具条控件是Excel5和Excel95留下来的东西(在Excel 97后的版本中,添加一个Dialog Sheet后,将可以看到这个窗体工具条窗口),从Excel 97开始,Dialog Sheet被UserForm代替,并且开始使用ActiveX控件。
从某些角度来讲,窗体控件甚至比ActiveX控件更有优势。
1. 如果你需要在Chart工作表中添加控件,只能使用窗体工具条控件。
2. 更加方便使用VBA代码创建窗体控件以及定义事件过程。
3. 窗体控件的事件过程可以放在标准模块,可以使用任何有效的VBA过程名称,可以在控件创建之前就创建事件过程。
4. 可以给多个控件赋于一个相同的过程。
5. 可以使用Application.Caller来获取窗体控件的名称。
窗体控件比ActiveX控件简单,基本上只有一个Click事件。
而ActiveX控件可以响应丰富的事件,ActiveX控件的事件只能放在控件所在的类模块(工作表模块)或窗体模块。
过程名称由控件名和事件名称组成。
如果你在控件不存在的时候就创建这个控件的事件过程,然后再在代码中引用这个控件,将会出现编译错误,所以必须使用代码创建事件过程。
在VBA中控制窗体控件的方法有点不同,可以使用对象名称,但这些对象名称在对象浏览器中被隐藏,这样输入代码时没有方法和属性提示(你可以在“对象浏览器”的“类”一栏中单击右键,然后选择“显示隐含成员”查看这些窗体控件)。
单文档/视图结构的ActiveX控件单文档/视图模式是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 AddDocTemplatem_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工程。
ActiveX控件使用说明!小弟这几天心情很好,所以给大家添点儿料~~~(因为招生工作快完成了。
在教育行业也真是够累的了,一到1月和7月就忙的不可开交,招生…………真凡人!顺便问问,有没有北京的FOXER啊?来报个电大学习学习吧。
放心!我不讲课。
呵呵)闲话不说了!开始正题!大家是不是都需要知道ActiveX控件都有什么内容呢?他们都是用来干什么的呢?我也报着这样的疑问!现在开始顿悟了。
请看:ActiveX控件使用说明之一VFP附有的ActiveX控件 .ocx文件及其包含的ActiveX控件:)1。
COMCTRL32。
OCX包含如下控件:1。
ImageList控件2。
ListView控件3。
ProgressBar控件4。
Slider控件5。
StatusBar控件6。
TabStrip控件7。
Toolbar控件8。
TreeView控件2。
COMDLG32。
OCX包含如下控件:common Dialogs控件3。
DBLIST32。
OCX包含如下控件:1。
MSDataCombo控件2。
MSDataList控件4。
FOXHWND。
OCX包含如下控件:1。
Visual FoxPro HWND控件5。
FOXTLIB 。
OCX包含如下控件:Visual FoxPro Foxtlib控件6。
GRID32。
OCX包含如下控件:Grid控件7。
MCI32。
OCX包含如下控件:Microsoft Multimedia控件8。
MSACAL70。
OCX包含如下控件:Calendar控件9。
MSCOMM32。
OCX包含如下控件:Microsoft Comm控件10。
MSMAPI32。
OCX包含如下控件:1。
Microsoft MAPI Message控件2。
Microsoft MAPI Session控件11。
MSOUT32。
OCX包含如下控件:Outline控件12。
PICCLP32 。
OCX包含如下控件:PicClip控件13。
Excel中表单控件和ActiveX控件的区别!
在Excel中用过控件的同学都知道,控件分为表单控件和ActiveX 控件两种。
经常有同学会问,这两类控件有何不同之处呢?
下面,我们在Excel表中插入表单控件中的组合框,同时也插入ActiveX控件中的组合框,点击右键,看看弹出的菜单有何区别?
可以看出,不论是表单控件还是ActiveX控件都可以给其绑定一段程序,让其成为一段程序的触发开关。
再点击下各自的设置控件格式看下:
表单控件的格式设置里有控制选项,ActiveX控件的格式设置里没有此选项。
综上,我们可以看出表单控件和Active X控件的区别:
表单控件只能在Excel工作表中添加和使用,可以设置控件格式或者给其指定宏。
Active X控件不仅可以在工作表中使用,还可以在VBE编辑器用户窗体中使用,同时具备了很多的属性和事件,这些都是表单控件所不具备的,也是表单控件和Active X控件最核心的区别所在。
在VBA编程中Excel提供了两种控件,表单空控件和ActiveX控件,相信好多非开发的专业人员都搞不清楚两个的区别,本文就以Excel2016版本为例,和大家一起讨论下这两种控件的区别和用法,大家一起相互学习、交流沟通。
1两种控件获取的位置如果使用控件,需要将Excel VBA“开发工具”加载到菜单栏,具体操作如下:a)点击“文件菜单”b)在打开的界面中点击“选项”菜单c)在打开的Excel选项界面中点击“自定义功能区”,并按照下图勾选“开发工具”,点击“确定”按钮就可以,将开发工具显示在Excel的菜单栏d)在Excel主界面中点击“开发工具”,打开VBA开发相关菜单功能,OK,马上我们的正主就要到了。
e)OK,在VBA开发工具相关菜单中,点击“插入”按钮,就可以看到“表单控件”和“ActiveX控件”了,下面我们就来一探究竟,这两种差距的主要区别2两种控件的主要区别和优缺点MouseUp无属性可以修改可修改一系列相关属性,在VBA开发的过程中可以控制。
是,通过DrawingObjects或者通是,可以通过Name以对象Box 3").Value是,可以通过控件来控制图表通过以上比较,发现ActiveX控件更加适合熟悉VBA编程的专业人士使用,具有丰富的响应事件。
但是窗体控件也具有其先天的优势,可以在不编程的情况下和关联单元格,并可以在Chart图标中添加窗体控件。
所以,两种控件的使用,需要根据具体使用场景进行有效的选择。
3如何使用两种控件3.1使用ActiveX控件控制多条件组合动态筛选3.1.1准备样例数据3.1.1插入ActiveX控件3.1.2为checkbox添加单击事件,动态控制筛选Private Sub CheckBox1_Click()Dim criterial2 As StringDim myRange As RangeDim flag As Booleanflag = Sheet1.CheckBox1.ValueSet myRange = Range("D4:D11")'获取要筛选的值criterial2 = LTrim(RTrim(Range("D2").Value))If criterial2 <> "" And flag = True Then'myRange.AutoFilter field:=2, Criteria1:=criterial2, VisibleDropDown:=FalsemyRange.AutoFilter Field:=2, Criteria1:=criterial2ElsemyRange.AutoFilter Field:=2End IfEnd SubPrivate Sub CheckBox2_Click()Dim criterial3 As StringDim myRange As RangeDim flag As Booleanflag = Sheet1.CheckBox2.ValueSet myRange = Range("E4:E11")'获取要筛选的值criterial3 = LTrim(RTrim(Range("F2").Value))If criterial3 <> "" And flag = True Then' VisibleDropDown:=False 使用了这个参数,筛选就不出现下拉箭头'myRange.AutoFilter field:=3, Criteria1:=criterial3, VisibleDropDown:=FalsemyRange.AutoFilter Field:=3, Criteria1:=criterial3ElsemyRange.AutoFilter Field:=3End IfEnd Sub3.1.3AutoFilter函数使用说明AutoFilter:使用“自动筛选”筛选一个列表。
在文档中使用ActiveX控件
在文档中使用ActiveX 控件
就好像可向自定义对话框中增添ActiveX控件同样,也可向文档直接增添控件,进而能够为用户供给一种复杂的方法来直接与宏进行交互,而不用被对话框所扰乱。
可用以下过程向文档增添ActiveX控件。
相关更多的在MicrosoftExcel中使用ActiveX控件的特定信息,请参阅在工作表上使用ActiveX控件。
向文档中增添控件
显示“控件工具箱”,单击要增添的控件,再单击文档。
设置控件属性
在设计模式下,用鼠标右键单击控件,而后单击快捷菜单上的“属性”以显示“属性”窗口。
初始化控件
可在某一过程中初始化控件。
编写事件过程
全部的控件都有一组预约义事件。
比如,当用户单击命令按钮时,该命令按钮就引起一个Click事件。
能够编写事件发生时所运转的事件过程。
代码运转时使用控件值
有些属性可在运转时进行设置
1 / 11。
单文档/视图模式是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工程。