VC使用ActiveX控件常见问题

VC怎么调用ActiveX 对bartend进行二次开发,提供了activeX的开发方式。但是在VS2010的Insert ActiveX control里找不到bartend的模块,下面的文档是用C#,VB调用activeX的方法,请问VC有没有类似的方法? Getting Started with ActiveX Automation  BarTender's ActiveX Automation inter 阅读详情
一方面,它表示将你联系到Microsoft、Internet和业界的新技术的小型快速的可重用组件。它与开发语言无关,任何支持 ActiveX控件的软件开发平台(如VB、VC++、Access、VFP、 Delphi、 PowerBuilder等)上,都可以使用ActiveX控件,程序员可以像使用Windows标准控件一样使用不同厂商开发的ActiveX控件。这样就实现了软件开发的工业化,大大地提高了软件的生产效率。  

  另一方面,它代表Internet与应用程序的一种集成策略。用户可以从Internet上下载ActiveX控件,也可以通过网络在本地机上调用远程机上的ActiveX控件,还可以将ActiveX控件加入到Internet主页上。  

  既然ActiveX控件对程序员是如此地重要,那么如何用好ActiveX控件也就成为软件开发者所关心的问题。本文以VC++5.0为开发工具,以一个项目名为Test的应用程序为例,就笔者在控件使用中遇到的一些问题加以讨论。  

  要想在应用程序中使用ActiveX控件,必须使你的应用程序成为ActiveX控件包容器。ActiveX 控件包容器就是完全支持ActiveX控件,并能把控件组合进自己的窗口或对话框的父应用程序。利用MFC的AppWizard,你可以很方便地创建你的包容器程序。事实上,在用AppWizard创建新的应用程序时,你的应用程序就被缺省设置为控件包容器,即在第3步选中支持ActiveX Controls的复选框。如果你在创建过程中没有选择这项技术支持,以后也可以手动地加入这项支持。  

  步骤如下:  

  1. 在项目的应用类的.cpp文件(本例中为test.cpp)的Initinstance函数中加入对函数AfxEnableControlContainer()的调用,如下所示:  

   BOOL CTestApp::InitInstance()
   {   
   AfxEnableControlContainer();
   ...
   }  

  --   在使用一个已注册的 ActiveX控件之前,必须先用组件廊将该控件添加到应用程序中,步骤如下:
  1.从Project菜单选择Add To Project下的Components and Controls。  

  2.在弹出的对话框中双击Registered ActiveX Control子目录,打开此目录。  

  3.选择你需要的控件,点击Insert按钮,弹出Confirm Classes对话框。 

  4.在列出的类名中选择需要的类(缺省为全选中,最好接受缺省设置),点击OK,关闭Confirm Classes对话框。  

  5.点击Close关闭组件廊,该控件的图标即加入到对话框编辑器的控件面板上。  

  这样,我们就可以在对话框中像使用Windows标准控件那样使用该控件了。但在某些应用中,你可能需要在非对话框容器(如应用程序的窗口)中嵌入ActiveX控件。这时没有对话框编辑器,我们应怎样在非对话框容器中使用ActiveX控件呢?  

  当组件廊将ActiveX控件添加到你的应用程序后,组件廊会创建一些包裹类(即在Confirm Classes对话框中列出的那些类)。其中有一个类的基类是CWnd,该类是控件的包裹类,它被用作控件与控件包容器之间的 接口,有两个公有的Create成员函数: 

  virtual BOOL Create(LPCTSTR lpszClassName, 
  LPCTSTR lpszWindowName, DWORD dwStyle, 

   const RECT& rect, CWnd* pParentWnd, UINT nID, 
   CCreateContext* pContext = NULL)
  和BOOL Create(LPCTSTR lpszWindowName, DWORD dwStyle,
   const RECT& rect, CWnd* pParentWnd, UINT nID,
   CFile* pPersist = NULL, BOOL bStorage = FALSE,
   BSTR bstrLicKey = NULL) 

  我们就可以使用该控件的包裹类的Create函数在非对话框容器中动态地创建此控件的实例。

  步骤如下:(本例中欲加入的控件名为MSFlexGrid ,CMSFlexGrid是控件的包裹类,msflexgrid.h是包裹类的头文件) 

  1.在视类头文件(本例中为TestView.h)中的类定义前加上
  #include “msflexgrid.h”

 2. 在TestView.h中CTestView类定义的protected部分加上控件包裹类类型的成员变量声明:
   class CTestView : public CView
   {
   ...
   protected:
   CMSFlexGrid m_fgrid;
   ...
   }; 

  3. 用ClassWizard为类CTestView 添加消息WM_CREATE的处理函数CTestView::OnCreate,在此函数中,调用控件类CMSFlexGrid的Create函数: 

   int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
   {
   if (CView::OnCreate(lpCreateStruct) == -1)
   return -1;
   // ****** Add your code below this line ********** //
   m_fgrid.Create(NULL, WS_VISIBLE,
   CRect(50,50,100,100), this, 0); //用this指针作为指向父窗口的指针    m_fgrid.SetCols(2);
   m_fgrid.SetRows(10);
   m_fgrid.SetTextMatrix(0,0,"序号");
   m_fgrid.SetTextMatrix(0,1,"姓名");
   // ****** Add your code above this line ********** //
   return 0;
   }

  4.重新链接工程,运行。可以看到当应用程序的视窗生成时,控件也动态地生成了。
  

  5.如果你以后还想改变控件的位置和大小,可以继承CWnd::MoveWindow()函数。例如,若想使控件充满整个窗口,并在父窗口移动和缩放时也随之移动和缩放,可以添加消息WM_SIZE的处理函数OnSize,并加入如下代码:

  void CTestView::OnSize(UINT nType, int cx, int cy)
   {
   CView::OnSize(nType, cx, cy);
   // TODO: Add your message handler code here
   m_fgrid.MoveWindow(0,0,cx,cy);
   }  

  
请添加描述
 

  --   通常情况下,我们可以用两种方法来存取对话框中的控件:1、将控件与对话框的成员变量相关联,通过对话框数据交换DDX来实现控件和对应的成员变量之间的数据交换(详情请参阅VC联机帮助 ActiveX Control Containers: Connecting an ActiveX Control to a Member Variable);2、调用函数CWnd::GetDlgItem来取得指向控件的指针。

  有些ActiveX控件没有用户界面,在运行时不可见。如果你在对话框中加入了运行时不可见的ActiveX控件,并想用CWnd::GetDlgItem来存取此控件,此控件将不能正常工作。要得到代表此控件的对象指针,可采取以下两种方法之一: 

  1. 在ClassWizard的成员变量标签中,选择此控件的ID,点击Add Variable,然后输入一个成员变量名,在Category中选择”Control”,在Variable type中选择控件类。 

  2. 声明一个此控件类型的局部变量,并将它作为一个对话框项。加入类似如下所列的代码(其中CmyCtrl是控件类,IDMYCTRL1是控件ID): 

   CMyCtrl myCtrl;
   myCtrl.SubclassDlgItem(IDC_MYCTRL1, this);
   // ... 使用控件myCtrl ...
   myCtrl.UnsubclassWindow(); 

  下面举一个例子加以说明。本例将在对话框中加入一个运行时不可见的计时控件Timer Object。该控件在一个的预定的时间间隔过去之后引发 Timer 事件,该时间间隔储存于该控件的 Interval 属性中,它以千分之一秒为单位指定时间的长度。本例用一个成员变量m_num来计数,每隔Interval时间递增1,当m_num计到10时,重置为0,并将时间间隔m_Interval增加200毫秒,并分别在两个静态框中显示当前的m_num和m_Interval。

  步骤如下: 

  1.用组件廊将Timer控件加入到项目Test中。 

  2.在项目中插入一个新的对话框,类名为CTestDlg。 

  3.在对话框模板中加入控件Timer Object(包裹类为CIeTimer),如图2的右下角。打开属性对话框,设置ID为IDC_TIMER1。再切换至All属性页,设置Interval为200。 

  4.在对话框模板中添加静态控件,Caption为“The current interval is:”。 

  5.添加一个不带Caption的静态控件,打开属性对话框,设置ID为IDC_STATIC1。再切换至Extended Styles属性页,选中Static edge复选框。 

  6.按下Ctrl键的同时双击静态控件IDC_STATIC1,弹出Add Member Variable对话框,第一项中填写变量名m_text1,Category项中选择Control,Variable type项中选择CStatic。 

  7.添加静态控件“The current number is:”。 

  8.重复步骤5到步骤6,添加一个不带Caption的静态控件(ID为IDC_STATIC2),变量名为m_text2。

  
请添加描述


  9.运行ClassWizard并选择Message Map属性页,在Class name 中选择CTestDlg,Object IDs中选择IDC_TIMER1,在Messages中选择Timer,点击Add Function…按钮,加入OnTimerTimer1()处理函数。

  若采用第一种方法,则按前面所述方法用ClassWizard给此控件类添加一个成员变量m_timer,并在OnTimerTimer1函数中添加如下代码: 

  void CTestDlg::OnTimerTimer1()
  {
   // TODO: Add your control notification handler code here
   char buf[10];
   m_num++;
   if(m_num>=10)
   {
   m_num=0;
   m_interval+=200;
   m_timer.SetInterval(m_interval);
   }
   _itoa(m_interval,buf,10);
   m_text1.SetWindowText (buf);
   _itoa(m_num,buf,10);
   m_text2.SetWindowText (buf);
  } 

   若采用第二种方法,不需要添加此控件类的成员变量,只需将加灰显示的语句用下列语句代替即可: 

   CIeTimer m_timer;
   m_timer.SubclassDlgItem(IDC_TIMER1,this);
   m_timer.SetInterval(m_interval);
   m_timer.UnsubclassWindow();  

  
请添加描述


  运行之后可以看到计数的步调越来越慢了(时间间隔越来越大了)

  ActiveX控件大大地简化了开发者的工作,灵活地使用控件能使开发者高效地开发出各种软件。以上是笔者在使用控件的过程中总结出的一些实践经验,希望对大家有所帮助。
VC++编写ActiveX控件 前言:ocx是ocx控件的扩展名,OCX 是对象类别扩充组件。如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如EditBox,Grid,ImageBox,Timer等等。每个控件都有自己的事件、方法和属性。使用了控件的编程非常容易。首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(caption)等等;在 阅读详情

相关推荐

怎样用VC在容器端取得ActiveX控件的属性

怎样获得ActiveX控件的各项属性值我们需要在容器中获得ActiveX控件的各项属性值,这需要利用一些COM库提供的接口,这篇文章主要是对这一过程作一介绍,从而使大家对这些接口有所了解并学会使用.首先我们需要在容器方的COleClientItem类中添加一个函数,如InitControlInfo().需要注意的事,这个函数要在创建了控件(即CoCreateInstance())之后,在激活控件(

flower的专栏 1546

VC++使用ActiveX控件连接和操作数据库

VC++使用ActiveX控件连接和操作数据库——转载 2011-10-24 19:51 VS2008运用ActiveX控件连接和操作数据库关闭时一直有个内存释放的错误,好像使用VC6.0会多生成2个文件,就不会有问题。 VC++使用ActiveX控件连接和操作数据库的方法分两种: 1.通过属性窗口连接数据库 2.通过代码连接数据库 1.通过属性窗口

autumn20080101的专栏 1629

可编辑的表格CEditMSFlexGrid(派生自CMSFlexGrid) V1.1

可编辑的表格CEditMSFlexGrid(派生自CMSFlexGrid) V1.1 v1.1在v1.0基础上: 增加: 1.可设置按回车键的行为:确认编辑、确认编辑并移动到下一个单元、或确认编辑并移动到下一行单元 完善: 1.按向上箭头或向下箭头超出显示范围时自动滚动列表,使当前单元始终可见 2.函数增加说明 补充说明: 必须调用SetParent,传入父窗口指针,通常为对话框指针,可参考代码示例 ------------------------------------------------------------------------------------ V1.0 在CMSFlexGrid基础上增加如下功能: 1.可编辑; 2.可设置为只输入数字; 3.每一列可单独设置最大输入长度; 4.编辑时,支持键盘上下左右移动到下一个单元,支持回车确认编辑和ESC取消编辑

C++类型和C#类型的Activex控件编写并测试详细说明

C++和C#开发Activex控件总结 开发环境:VS2010 IE11 1. C++篇 1.1创建工程 如下图示,创建”MFC Activex控件”类型的工程 1.2查看OCX GUID 按照如下步骤即可得到OCX的GUID 1.3添加ocx外部调用方法 1.3.1 如下图显示步骤进行方法添加 ...

hsy12342611的专栏 684

VC++在ActiveX控件中动态调用外部DLL函数

内容索引:VC/C++源码,系统相关,ActiveX  一个VC++系统相关的编程实例,程序演示如何在ActiveX控件中动态调用来自外部的DLL函数,虽然不常用,但很修复研究一下,以帮助您更好的学习VC++技术。

Aitoearn内容营销的最佳开源 AI 代理,创建 · 发布 · 互动 · 副业一站式平台,支持渠道:抖音、小红书(红点)、微信通道、快手、哔哩哔哩、微信公众号、抖音等等

Aitoearn内容营销的最佳开源 AI 代理,创建 · 发布 · 互动 · 副业一站式平台,支持渠道:抖音、小红书(红点)、微信通道、快手、哔哩哔哩、微信公众号、抖音等等

struggle2025的博客 1749

vc6开发activex并发布全攻略(二)(初级篇)(转载)

vc6开发activex并发布全攻略(二)(初级篇) http://flashaway.blog.163.com/blog/static/95624576200942202812353/ 上一篇中我们做好了一个activeX。现在我们就来发布。 下面转载一篇发布activeX的博文,在后面我会对出现的问题做补充,原文地址 http://bl...

afdd28617的博客 154

Android 16(API 36)状态栏颜色适配全攻略:从沉浸式到自定义背景

本文全面解析Android 16(API 36)强制沉浸式状态栏带来的适配挑战,提供了从FrameLayout包裹法到动态修改Window背景色的核心解决方案。针对传统状态栏颜色设置失效问题,详细阐述了如何利用WindowInsets API实现自定义背景,并涵盖全屏模式、Fragment切换及第三方ROM兼容性等实战场景,为开发者提供一站式适配指南。

weixin_29227425的博客 594

VC 制作ActiveX 控件(OCX)

1、vc6下建立一下activeX工程 详见【[url=http://hi.baidu.com/mailrabbit/blog/item/0624a608bde798346b60fbb6.html]http://hi.baidu.com/mailrabbit/blog/item/0624a608bde798346b60fbb6.html[/url]】 2、在页面中调用 2.1:注...

My Blog 497

用Multisim和74192芯片复刻经典:手把手教你搭建篮球24秒违例计时器(附仿真文件)

本文详细介绍了如何使用Multisim仿真平台和74192芯片构建篮球24秒违例计时器,涵盖时序逻辑电路设计、核心器件选型、仿真环境搭建及调试技巧。通过分步指导,帮助读者掌握数字电路设计的关键技术,并附赠仿真文件供实践参考。

weixin_27014595的博客 278

CloudCompare里那个CSF地面滤波插件,到底怎么用?手把手教你分离点云里的地面

本文详细介绍了如何在CloudCompare中使用CSF地面滤波插件分离点云中的地面数据。通过解析布料模拟滤波算法的核心参数,如布料刚度和网格分辨率,并提供不同地形(城市、丘陵、山地)的适配策略,帮助用户高效处理复杂点云数据。文章还包含实战案例和优化技巧,确保滤波结果的精度和可靠性。

weixin_42548708的博客 221

开发调试基于WinCE下的ActiveX控件的基本步骤

在WinCE下开发ActiveX控件会遇到很多障碍,如,可能编译成功,并且成功download到目标机上,但无法注册;想写一个应用程序来调试该控件,可是打开EVC创建完工程,想插入ActiveX控件的时候,控件列表里根本就是空的。前提是EVC能够连接到目标机上。一,用EVC4.0开发一个ActiveX控件1,打开EVC4.0,新建项目,选择WCE ATL COM AppWizard。项目名假设为D

chn5239的专栏 312

自旋玻璃(spin glass)、自旋冰(spin ice)和量子自旋液体(quantum spin liquid)(之二)

具有相同电荷的电子相互排斥。结果,为了在极其拥挤的环境中相互超越,他们不得不改变自己的行为。剑桥大学和英国伯明翰大学于 2009 年 7 月发表的研究表明,电子可以通过量子隧穿从金属表面跳到相近位置的量子线上,这样做后,将分离成两个准粒子,命名为的自旋子和全子。Van den Brink、Khomskii 和 Sawatzky 在 1997-1998 年对轨道子进行了理论上的预测。在 2011 年 9 月发给出版商的论文中报告了它作为一个单独的准粒子的实验观察结果。

qq_32515081的博客 1万+

网页应用activex控件编程小节

1.VC编译activex控件 2.VB编译cab包 3.修改inf文件(添加上uuid) 4.开发电脑上注册activex控件 5.网页项目添加上activex控件的引用 6.反注册activex控件(注册只是为了添加引用;反注册后才能发现cab包在网页中是否可以下载和注册成功,所以添加引用后必须反注册) 7.网页中加上object标签,这样就能在网页中应用activex控件了 8

执着于我的执着 792

AT91SAM9260搭建LINUX操作系统

一、 编写目的 2 二、 系统搭建 2 1. 下载相关软件包 2 2. Bootstrap编译 3 3. U-BOOT编译 5 4. LINUX编译 7 5. 通过U-BOOT的TFTP命令从TFTP服务器下载系统镜像 9 6. 文件系统制作 10 7. 挂载NFS作为根文件系统 10 三、 总结 14 一、编写目的 本文档用于记录AT91SAM9260 LINUX学

lshiceman的专栏 7412

针对小缺陷目标:在YOLOv11中引入小目标检测层

摘要: 针对YOLOv11在工业检测中漏检微小目标(如焊点气泡)的问题,研究发现深层特征下采样导致小目标信息丢失。通过在YOLOv11中增加P2检测层(4倍下采样)并融合浅层高分辨率特征,可显著提升小目标召回率。关键优化包括:调整模型结构、谨慎设计数据增强策略(减少MixUp、增加小目标粘贴)、重新分配损失权重(提升P2层权重)、优化推理速度(动态分辨率、通道裁剪)。同时强调数据质量的重要性,建议根据具体场景特性(目标尺寸、分布)定制方案,而非盲目调整模型。

as1225120794的博客 366

VS2008 ACtivex 制作CAB带 Vcredist_x86.exe 方案

自己写的 OCX或 ACTIVEX需要注册,如果是VS05或VS08开发的,还需要安装相应 的发行包才行 比如;08就需要安装 vcredist08.exe(08); 这个在微软上找或自己的VS安装包中也可以找到 来说说关键的要点;用CAB 需要把我们的开发的OCX和相关DLL打到CAB,同时还要确保客户机上安装 vcredist.exe否则,即使控件安装上了也使用不了的 CAB工

痞子龙3D编程 2940

工业质检封神!YOLOv8实战金属表面缺陷检测,自建数据集mAP突破95%

本文详细介绍了基于YOLOv8的金属表面缺陷检测实战方案。针对工业质检中的光照不均、纹理复杂、小样本等挑战,作者构建了12000张图像的数据集,提出针对性数据增强策略和两阶段训练方法。通过优化损失函数、调整超参数等技术手段,最终在测试集上达到95.1%的mAP@0.5,检测速度32FPS。相比传统方法,该方案在精度和鲁棒性上均有显著提升,为工业视觉质检提供了可复现的落地解决方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 428

VC/MFC Q&A 200407

优快云 讨论总结系列:Jiangsheng的优快云 Digest (Dec 2005)(http://blog.youkuaiyun.com/jiangsheng/archive/2005/12/24/561501.aspx) Jiangsheng的优快云 Digest (Oct 2005)(http://blog.youkuaiyun.com/jiangsheng/archive/2005/12/27/56327

蒋晟的专栏 2万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

实用!超强VC/MFC 常见问答收集

问 自编浏览器进入一个网页后,点一个链接后系统自动调用用IE打开网页而不是用自身浏览器打开网页。如何让窗口用我自己的浏览器打开? 答: 控制新的窗口 默认情况下,浏览器收到创建新窗口请求时,会在IE中打开新的窗口。你可以处理NewWindow2事件来在自己指定的窗口中打开请求的页面。 问: 如何枚举系统中视频捕获设备(摄像头)的设备名称 答: 以下代码来 自DirectX9 SDK中的AMCA...

编程资料大全 325

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

VC随笔——ActiveX控件

<br /> VC   2006-10-10 19:39 <br />ActiveX、OLE和COM:<br />COM(Component Object Model)即组件对象模型是用来解决Windows程序模块之间相互通信的标准方法,是Windows统一的、可扩充的、面向对象的通信协议。COM是一种协议,建立了一个软件模块同另一个软件模块之间的连接,然后将其描述出来。当这种连接建立起来后,两个软件模块之间就可以通过一个称为“接口”的机制来进行通信。<br />OLE(Object Linking & E

weizhijiang的专栏 1081

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

VC6 Activex控件开发

建立项目,选择VC6下面的MFC Activex ControlWizard工程 按照默认的选项直接finish就可以了 2,在Resource View选定Dialog,new一个dialog,设置一下此dialog属性:Style:Child,Border:None,Visible,control,Static edge三个都选中。 双击new一个与此dialog对应的类:Pla

899

[activeX]VC2005开发MFC ActiveX ocx控件全过程[转]

ActiveX控件用于Web的过程是将控件嵌入主页中,用户通过浏览器访问该主页时,将主页中的控件下载,并在用户机器上注册,以后就可在用户的浏览器上运行。控件下载一次后就驻留在用户本地机器上,下次再访问相同的主页时,可不再下载该控件,而是直接运行用户本地的控件。这里控件容器就是浏览器,用户不需要通过浏览器调用控件的属性或方法。因此,开发面向Web的ActiveX控件比开发桌面的控件还要简单些,所复杂

柠檬加冰 4044
上一篇: 用WinInet开发Internet客户端应用指南
下一篇: Win32 库函数学习(一)
ccfboy
博客等级 码龄18年 45粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值