摘要:本文阅读基础:有一定的C++基础知识(了解继承、回调函数),对MFC的消息机制有一定了解,对COM的基础知识有一定了解,对ActiveX控件有一定了解。一. 前言 ActiveX控件和它的容器程序如何通讯是一个值得研究的问题,因为这涉及到ActiveX控件和它的容器程序如何交互的问题。VC知识库的杨老师写了一系列博客介绍了一些通讯方式。链接如下:COM 组件设计与应用(十三)--事件和通知(VC6.0)COM 组件设计与应用(十四)--事件和通知(vc.net)COM 组件设计与应用(十五)--事件和通知(VC6.0)COM 组件设计与应用(十六)--事件和通知(vc.net) 这些文章写得真
阅读全文
随笔分类 - com/ATL/Activex
摘要:使用VS 2008新建一个MFC ActiveX工程,因为在工程里要用到GDI+。我习惯把初始化GDI+库的代码放在应用程序类的InitInstance函数,对应的销毁代码放在ExitInstance函数。具体如下:先在应用程序类里定义一个数据成员:[cpp]view plaincopy ULONG_PTRm_gdiplusToken;然后添加初始化GDI+库的代码和对应的销毁代码:[cpp]view plaincopy BOOLCImagePreviewXApp::InitInstance(){BOOLbInit=COleControlModule::InitInstance();if(bI
阅读全文
摘要:一.引言上一篇我们讲了如何使用VC 2005来开发MFC ActiveX控件,我们开发ActiveX控件最终目的是将ActiveX控件发布出来并嵌入在Web网页中,随着控件的版本更新自动在客户端浏览器自动更新。这一篇我们就来讲讲这方面的实现。使用工具:PackageForTheWeb二.编译ActiveX控件在发布之前我们最好用VS2005将控件编译成“Release”版本,还有一个值得注意的地方是我们在使用MFC类库来开发ActiveX控件时要考虑客户端是否有MFC类库,解决方法有两种:1.在下面打包的时候将MFC的类库DLL附带上。2.通过“项目”—》“属性”打开项目属性对话框,将“MFC
阅读全文
摘要:第一种方式多进程模式下,在IE8打开web页面, 然后在调试菜单选择附加到进程, 这时看到2个IE进程, 选择没有带标题的, 也就是主进程, 就可以正常调试了.此方式比较麻烦, 不能F5直接启动IE调试.第二种方式设置IE8为单进程模式, 可以F5直接调试.首先,定位到注册表键:HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main然后在该键值下添加一个键值如下:名称:TabProcGrowth类型:REG_DWORD值: 0
阅读全文
摘要:IE8的一个重要特性就是每个Tab(选项卡)在独立的进程中运行,我们称之为LCIE(Loosely-Coupled IE)。 所以大家在升级到IE8之后会发现资源管理器里面有两个或者多个iexplore.exe进程。LCIE 的好处在:1)某个Tab 崩溃(crash)之后不会影响其他Tab 和IE主窗口2)Tab 进程在Vista 和Windows 7 下面以 Low Integrity Level 运行,这种进程基本上无法对系统进行任何读写操作,可以严格把病毒木马拒之门外。 这也就是大家所谓的"沙盘"技术。 插一句题外话:) 很多人认为"沙盘"技术是
阅读全文
摘要:演示截图:代码简介或代码解析:如何用ATL创建ActiveX控件实现了一个ActiveX控件,它在一个圆内部有个正多边形,当用户在多变形内部单击将会使多边形的边数在当前的基础上+1,在多变形外部单击将会使多边形的边数在当前的基础上-1,并能改变多边形的颜色.最后举了两个例子说明了如何使用这个刚刚生产得控件.一个是把该控件应用到网页中,一个则是用于一个基于对话框的程序中.详细代码请下载压缩包.(一) 创建工程(1) 打开VC6集成开发环境,按新建按钮,选择PROJECT标签。(2) 选择ATL COM AppWizard。(3) 在右侧Project Name下面的空白处输入"Poly
阅读全文
摘要:摘要:目前MFC和ATL代表了两种框架,分别面向不同类型的基于Windows的开发。MFC代表了创建独立的Windows应用的一种简单、一致的方法;ATL提供了一种框架来实现创建COM客户机和服务器所必须的样板文件代码。这两种框架在它们对于开发ActiveX的用途上会合了。我们将看看这两种框架是如何适用于创建ActiveX控件的——突出其优缺点,亲自经历创建一个控件的过程——以便你能够决定何时使用一种框架,何时使用另一种。 如果你希望用C++来写ActiveX®控件,有两个流行的框架,一个是Microsoft® Foundation Classes (MFC),另一个是AT
阅读全文
摘要:一、CString GetCurPath() { TCHAR exeFullPath[MAX_PATH]; CString strPath; GetModuleFileName(AfxGetInstanceHandle(),exeFullPath,MAX_PATH); strPath.Format("%s", exeFullPath); if(strPath.Right(1)!="//") strPath += "//"; return strPath; }二、 HINSTANCE hOcx = ::GetModuleHandle(&
阅读全文
摘要:ActiveX异步回调JavaScript开发环境:VC6.0。背景知识:COM/ActiveX/JavaScript/MFC/Thread想必用过Ajax的童鞋们都知道xmlhttp这个东西吧,通过设定onreadystatechange属性,我们就可以指定他状态改变的回调函数,当状态改变时,ActiveX控件就会调用我们通过onreadystatechange属性制定的回调函数。从而就出现了Ajax给我们带来的精彩。关于Ajax的技术我们这里不做讨论,我们的目的就是实现像xmlhttp这样具有异步回调JavaScript功能的ocx控件来。Let’s go!1.建立MFC ActiveX
阅读全文
摘要:第一种:通过execScript调用。这种方法,虽然操作方便,但不能获取返回值。m_spHtmlDoc->get_parentWindow(&m_pHtmlWindow);VARIANT ret;ret.vt = VT_EMPTY;BSTR bstr = sScript.AllocSysString();bRet = m_pHtmlWindow->execScript(bstr, L"javascript", &ret);::SysFreeString(bstr);sRet = CString(ret);第二种:先用GetIDsOfNames找到
阅读全文
摘要:源代码下载:MyActiveX20081229.rar声明:本文代码基于CodeProject的文章《A Complete ActiveX Web Control Tutorial》修改而来,因此同样遵循Code Project Open License (CPOL)。在上一篇文章《COM组件开发实践(七)---多线程ActiveX控件和自动调整ActiveX控件大小(上)》中介绍了ActiveX控件中使用多线程的基本需求,并提出了一个简单的线程模型,但却出现了意想不到的问题,本文将尝试给出问题的一个可行的解法,并同时解决上文中提出的第二个问题。其实解决的思路也很简单,一开始我也早就想到了的,
阅读全文
摘要:声明:本文代码基于CodeProject的文章《A Complete ActiveX Web Control Tutorial》修改而来,因此同样遵循Code Project Open License (CPOL)。最近遇到两个需求:1)在ActiveX控件中使用工作线程来完成底层的硬件设备扫描任务,并在工作线程中根据操作结果回调外部web页面的JavaScript函数;2)能根据控件任务的不同自动调整控件大小。但在查阅了大量资料后,发现网上讨论ActiveX中多线程开发的文章基本没有,最后在csdn论坛里遇到一个高手帮忙后,摸索了几天才解决这两个问题,本文的目的就在于记录下我解决这两个问题的
阅读全文
摘要:转载自:http://dhailin.blog.163.com/blog/static/230738322011128102043880/首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法:[cpp]view plaincopy STDMETHODIMPCtest::test(void)//无输入输出参数{//TODO:在此添加实现代码MessageBox(NULL,L"test",L"test",MB_OK);returnS_OK;}STDMETHODIMPCtest::test1(BSTRa1)//有一个字符串输入参数{//
阅读全文
摘要:转载自:http://blog.csdn.net/cheungmine/article/details/1451489要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS)调用A的方法longCalc(),该方法是一个耗时的操作,要求通知IE当前的进度。这就要求使用回调函数,设其名称为scriptCallbackFunc。实现这个技术很简单:1 、组件方(C++)组件A 的方法在IDL中定义:[cpp]view plaincopy [id(2)]HRESULTlongCalc([in]DOUBLEv1,[in]DOUBLEv2,[in,optional]VARIANTs
阅读全文
摘要:本文源码与文档下载本章目标:完成本章学习后,您将能够:Ø 了解什么是ActiveX控件 Ø 掌握如何编写基于MFC的ActiveX控件 Ø 掌握如何测试ActiveX控件 Ø 掌握如何测试ActiveX控件 Ø 了解ActiveX控件如何注册 重点:ActiveX控件的实现、测试及注册。本章将介绍ActiveX控件的应用与工作原理。我们可以把ActiveX控件看做是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。那么,该容器就相当于客户程序,它使用ActiveX提供的服务。注:本文改编自孙鑫教程,在此基础上
阅读全文
摘要:基础知识 C标准函数集锦 标准C I/O函数 sizeof 用法 正确使用内存 有关c++ string类 堆和栈的区别[再转] C++中的异常(exception) API总结和断点函数 字符集和编码知识 高位优先与低位优先 do...while(0)的妙用 理解虚基类、虚函数与纯虚函数的概念 C之修炼 C代码优化方案 C++代码优化方法总结 VC:CString用法整理(转载) VC的若干实用小技巧 (如何干净的删除一个类) 指针 C++部分操作符 C++中const用法总结 VC定时器SetTimer函数 Shell中关于文件路径操作的API函数 调用DLL VC小...
阅读全文
摘要:症状描述:Accelerator keys, such as ARROW keys, are first received by the message pump of the ActiveX control's container. Even if the control has the focus, it does not receive messages for keystrokes that have special meaning to control containers, such as ARROW and TAB keys. MFC ActiveX controls h
阅读全文
摘要:在ocx控件中如果含有无模式对话框,那么当ocx在ie中显示时,往往接收不到诸如tab,方向键和退格键。所有这些消息都被IE容器给截取了,对于这个问题,ms给出了解决方法:首先:int CMyActiveXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct){if (COleControl::OnCreate(lpCreateStruct) == -1)return -1;OnActivateInPlace (TRUE, NULL); // == UI-Activate the controlreturn 0;}激活控件,以便能接收键盘消息。其次 跟踪转发
阅读全文
摘要:1.要加一个头文件: #include <objsafe.h>2.在控件头文件中加入:1 DECLARE_INTERFACE_MAP()2 BEGIN_INTERFACE_PART(ObjectSafety, IObjectSafety)3 STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid, DWORD __RPC_FAR *pdwSupportedOptions, DWORD __RPC_FAR *pdwEnabledOptions);4 STDMETHOD(SetInterfaceSafetyOptio...
阅读全文
摘要:下面将分别介绍在MFC ActiveX和ATL中如何标记一个控件为安全的控件。要标记一个MFC ActiveX控件为安全,可以仿照下面代码修改而得://CardScan.cpp:CCardScanApp和DLL注册的实现。#include"stdafx.h"#include"CardScan.h"#include"comcat.h"#include"strsafe.h"#include"objsafe.h"CCardScanApptheApp;constGUIDCDECLBASED_CODE_t
阅读全文