1 创建mfc ActiveX工程

使用vs2105新建一个mfc ActiveX工程,工程名称为ocx_test,如果要在ocx控件中使用对话框,那么就勾选“在插入对象对话框中可用”

更改工程的属性,mfc的使用改为在静态库中使用mfc,字符集未未设置。

2 在控件中使用嵌入对话框

在工程的资源视图中插入一个对话框

然后将对话框的属性修改,style改为child,visible改为true

右键该对话框-添加类

为该对话框创建一个类,名称为CDialog1
在ocx_testCtrl.h文件中添加对话框的头文件

#include"Dialog1.h"//引入对话框类的头文件

在public中添加对话框的变量定义

CDialog1 dlg1;//声明对话框类的对象


接下来在类向导中为Cocx_testCtrl类添加消息响应VM_CREATE

在OnCreate函数中添加:

dlg1.Create(IDD_DIALOG1, this);


接着在onDraw函数改为如下代码:

/*pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));pdc->Ellipse(rcBounds);*/dlg1.MoveWindow(rcBounds, true);


接下来生成工程,ocx会自动进行注册。

3 在网页中调用ocx

打开ocx_test.idl这个文件,从如下地方找到ocx的classID

新建一个html,html中的Classid就为上图中的值

<html>
<head><title>test</title><meta charset="utf-8" />
</head><body>
<object id=fp_atl border=0 classid=CLSID:16EEE8BE-67C3-4A6D-B892-DBE374724FA8 width="400" height="400";>
</object>
</body>
</html>

然后使用ie浏览器打开这个html,就可以看到网页中出现了含有对话框的ocx控件。

4 去掉浏览器弹出交互不安全提示


当使用上面创建的这种ocx,在浏览器中会有不安全提示
解决办法是在ocx_testCtrl.h文件中添加一个头文件
#include<ObjSafe.h>
在该类的protect的中添加消息声明:

//去掉安全警告 BEGINDECLARE_INTERFACE_MAP()BEGIN_INTERFACE_PART(ObjectSafety, IObjectSafety)STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid, DWORD __RPC_FAR *pdwSupportedOptions, DWORD __RPC_FAR *pdwEnabledOptions);STDMETHOD(SetInterfaceSafetyOptions)(REFIID riid, DWORD dwOptionSetMask, DWORD dwEnabledOptions);END_INTERFACE_PART(ObjectSafety)//去掉安全警告 END


接着在ocx_testCtrl.cpp文件中IMPLEMENT_OLECTLTYPE(Cocx_testCtrl, IDS_OCX_TEST, _dwocx_testOleMisc)后面添加:

//注意要将这个里面的类名替换为自己工程的那个类名
//去掉安全警告 BEGIN
BEGIN_INTERFACE_MAP(Cocx_testCtrl, COleControl)INTERFACE_PART(Cocx_testCtrl, IID_IObjectSafety, ObjectSafety)
END_INTERFACE_MAP()
// Implementation of IObjectSafety
STDMETHODIMP Cocx_testCtrl::XObjectSafety::GetInterfaceSafetyOptions(REFIID riid,DWORD __RPC_FAR *pdwSupportedOptions,DWORD __RPC_FAR *pdwEnabledOptions)
{METHOD_PROLOGUE_EX(Cocx_testCtrl, ObjectSafety)if (!pdwSupportedOptions || !pdwEnabledOptions){return E_POINTER;}*pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER| INTERFACESAFE_FOR_UNTRUSTED_DATA;*pdwEnabledOptions = 0;if (NULL == pThis->GetInterface(&riid)){TRACE("Requested interface is not supported.\n");return E_NOINTERFACE;}// What interface is being checked out anyhow?OLECHAR szGUID[39];int i = StringFromGUID2(riid, szGUID, 39);if (riid == IID_IDispatch){// Client wants to know if object is safe for scripting*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;return S_OK;}else if (riid == IID_IPersistPropertyBag|| riid == IID_IPersistStreamInit|| riid == IID_IPersistStorage|| riid == IID_IPersistMemory){// Those are the persistence interfaces COleControl derived controls support// as indicated in AFXCTL.H// Client wants to know if object is safe for initializing from persistent data*pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;return S_OK;}else{// Find out what interface this is, and decide what options to enableTRACE("");return E_NOINTERFACE;}
}
STDMETHODIMP Cocx_testCtrl::XObjectSafety::SetInterfaceSafetyOptions(REFIID riid,DWORD dwOptionSetMask,DWORD dwEnabledOptions)
{METHOD_PROLOGUE_EX(Cocx_testCtrl, ObjectSafety)OLECHAR szGUID[39];// What is this interface anyway?// We can do a quick lookup in the registry under HKEY_CLASSES_ROOT\Interfaceint i = StringFromGUID2(riid, szGUID, 39);if (0 == dwOptionSetMask && 0 == dwEnabledOptions){// the control certainly supports NO requests through the specified interface// so it"s safe to return S_OK even if the interface isn"t supported.return S_OK;}// Do we support the specified interface?if (NULL == pThis->GetInterface(&riid)){TRACE1("%s is not support.\n", szGUID);return E_FAIL;}if (riid == IID_IDispatch){TRACE("");TRACE("In other words, is the control safe for scripting?\n");if (INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwOptionSetMask&& INTERFACESAFE_FOR_UNTRUSTED_CALLER == dwEnabledOptions){return S_OK;}else{return E_FAIL;}}else if (riid == IID_IPersistPropertyBag|| riid == IID_IPersistStreamInit|| riid == IID_IPersistStorage|| riid == IID_IPersistMemory){TRACE("");TRACE("In other words, is the control safe for initializing from persistent data?\n");if (INTERFACESAFE_FOR_UNTRUSTED_DATA == dwOptionSetMask&& INTERFACESAFE_FOR_UNTRUSTED_DATA == dwEnabledOptions){return NOERROR;}else{return E_FAIL;}}else{TRACE1("", szGUID);return E_FAIL;}
}
STDMETHODIMP_(ULONG) Cocx_testCtrl::XObjectSafety::AddRef()
{METHOD_PROLOGUE_EX_(Cocx_testCtrl, ObjectSafety)return (ULONG)pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG) Cocx_testCtrl::XObjectSafety::Release()
{METHOD_PROLOGUE_EX_(Cocx_testCtrl, ObjectSafety)return (ULONG)pThis->ExternalRelease();
}
STDMETHODIMP Cocx_testCtrl::XObjectSafety::QueryInterface(REFIID iid, LPVOID* ppvObj)
{METHOD_PROLOGUE_EX_(Cocx_testCtrl, ObjectSafety)return (HRESULT)pThis->ExternalQueryInterface(&iid, ppvObj);
}
//去掉安全警告 END


然后重新生成项目,再次在网页中调用,就可以看到没有出现不安全警告了。

vs2015开发在网页中调用的ocx控件详解(一)相关推荐

  1. vs2015开发在网页中调用的ocx控件详解(二)

    在上一篇博客中介绍了ocx控件的基本创建,这里主要讲解如何在网页中与ocx控件进行信息传递. 1 ocx添加成员变量 在类视图中右键ocx_testLib下的_Docx_test,选择添加属性 变量类 ...

  2. 【QT】Qt调用OCX控件详解

    OCX控件的注册 首先,调用ocx控件需要保证ocx本身是已经注册了的.如果没有注册请先按"Win+R"输入"cmd"打开命令窗口.然后输入regsvr32 + ...

  3. C#调用第三方ocx控件 (winform /aspx)

    C#调用第三方ocx控件 1..net环境在工具箱上点右键,选择自定义工具箱,然后选择你需要的COM或者OCX控件就可以了. 2.在自定义工具箱中加入相应的控件,设置id,在客户端脚本中直接引用它的I ...

  4. OCX控件开发及WEB Javascript如何使用OCX控件

    一.OCX控件开发 1.使用IDE版本: VS2010 2..基于MFC技术 开发OCX控件. 3..基本OCX开发过程 3.1.打开VS 2010 新建项目,选择MFC模板,"MFC    ...

  5. 如何在多线程中调用winform窗体控件2——实例篇

    如何在多线程中调用winform窗体控件2--实例篇 针对之前文章<如何在多线程中调用winform窗体控件>,下面举个我项目中的实际案例,这是一个我自定义控件在异步设置焦点时的代码.在新 ...

  6. 在VC中如何使用OCX控件 【来源:http://blog.csdn.net/wulang1114/article/details/4806089】

    首先感谢网络中的各位高手,我的文章只是对你们文章的Copy和学习. 工作中客户提供了一个ocx控件,学习了如何使用它.发现网上没用针对像我一样菜鸟的文章,所以我总结一下我的学习成果供菜鸟学习使用. 1 ...

  7. C#中引用第三方ocx控件引发的问题以及解决办法

    C#中引用第三方ocx控件引发的问题以及解决办法 参考文章: (1)C#中引用第三方ocx控件引发的问题以及解决办法 (2)https://www.cnblogs.com/XuPengLB/p/759 ...

  8. android什么控件能够输入多行文字,Android开发:文本控件详解——EditText(一)基本属性...

    一.简单实例: EditText输入的文字样式部分的属性,基本都是和TextView中的属性一样. 除此之外,EditText还有自己独有的属性. 二.基本属性: hint 输入框显示的提示文本 te ...

  9. pythongui日历控件_“五一”快到了,用Python中PyQt5做一个日历,QCalendar控件详解...

    前面内容,我们详细了解了PyQt5中的一些常用控件 精彩内容回顾 Python用PyQt5设计界面,如何正确显示一幅图片,QPixmap控件详解 拥有漂亮的笔刷才能绘制多彩界面,PythonPyQt5 ...

  10. dsscocx控件出错怎么办_MFC中如何在Ocx控件中来驱动ocx事件

    我在写一个ocx控件.在控件内有一个自定义的类,处理逻辑相关的事件,比如MyClass.h和MyClass.cpp,当有人call我时,我就能在MyClass的线程内得到信息,现在我要通知给使用我这个 ...

最新文章

  1. JavaScript知识精简
  2. 毕业设计《MMORPG DEMO》——1
  3. 测试Mybatis时事务自动回滚,无法完成增删改
  4. mysql数据库复制基本原理_MySQL的复制原理以及流程
  5. mysql 必知必会 笔记
  6. android studio adb 命令行,Android Studio如何配置adb以及经常使用命令
  7. C语言 const 修饰变量 - C语言零基础入门教程
  8. GoogLeNet的心路历程(一)
  9. 1215课后练习----判断字符串位置
  10. CSS设置背景透明字体不透明
  11. 光流(五)--HS光流及稠密光流
  12. 运行100万秒无错误!
  13. iphone 开发第四天 - 字符串
  14. The program ‘roscore‘ is currently not installed 解决办法
  15. python正版软件多少钱_多款正版软件 + 付费教程迎来史低价,少数派「双十一」活动全面开始...
  16. 中望3d快捷键命令大全_cad快捷键大全下载
  17. matlab车牌自动定位,超级实用的车牌定位matlab程序
  18. ios-获取相册相机图片
  19. 日置HIOKI PW3198电能质量分析仪
  20. 在ARM芯片中使用打印函数总结

热门文章

  1. IE主页简单篡改修复
  2. PyTest 生成多种格式的 测试报告 report
  3. 三维可视化JavaScript组件接口
  4. linux用户配额管理,—linux 磁盘配额按用户管理(quota)
  5. DDD-领域驱动设计
  6. c语言实验报告模板电子版,C语言实验报告模板.doc
  7. 职场必备的Excel函数技巧!
  8. linux制作flash软件,Linux 下的三款 Flash 独立播放器
  9. windows和linux环境下java调用C++代码-JNI技术
  10. C#界面控件DotNetBar使用