当前位置: 首页 > news >正文

【小沐学C++】C++ MFC中嵌入64位ActiveX控件(VS2017)

文章目录

  • 1、简介
    • 1.1 MFC
    • 1.2 ActiveX
  • 2、VS2017添加ActiveX控件
  • 结语

1、简介

1.1 MFC

Microsoft 基础类 (MFC) 库针对大部分 Win32 和 COM API 提供面向对象的包装器。 虽然此包装器可用于创建极为简单的桌面应用程序,但当你需要开发具有多个控件的更复杂的用户界面时,此包装器将最为有用。 可以使用 MFC 创建带有 Office 样式用户界面的应用程序。

https://learn.microsoft.com/zh-cn/cpp/mfc/mfc-desktop-applications?view=msvc-170

用于多字节字符编码 (MBCS) 的 MFC 库 (DLL) 不再包含于 Visual Studio 中,但可用作 Visual Studio 加载项。

  • 下图表示派生自 CObject 的 MFC 类:
    在这里插入图片描述
  • 下图表示派生自 CWnd 和 CCmdTarget 的 MFC 类:
    在这里插入图片描述
  • 下图表示不是从 CObject 派生的 MFC 类:
    在这里插入图片描述

1.2 ActiveX

ActiveX 控件是一种特定的自动化服务器类型;它是可重用组件。 托管 ActiveX 控件的应用程序是该控件的自动化客户端。在 Visual C++ 中,您可以使用 MFC 或 ATL 创建 ActiveX 控件。

  • ActiveX 控件容器与有窗口的 ActiveX 控件之间的交互
    在这里插入图片描述

  • ActiveX 控件容器与 ActiveX 控件之间的通信
    在这里插入图片描述

  • 有窗口的 ActiveX 控件中的 Windows 消息处理(活动时)
    在这里插入图片描述

ActiveX 是旧技术,不应用于新开发。 可以使用 HTML5 和 JavaScript、新式浏览器扩展或 WebAssembly 模块等现代技术,以更简单、更安全的方式执行 ActiveX 控件的许多功能。有关详细信息,请参阅告别过去(第 2 部分):告别 ActiveX、VBScript、attachEvent 和本机消息以及 Microsoft Edge 扩展和 WebAssembly。

https://blogs.windows.com/msedgedev/2015/05/06/a-break-from-the-past-part-2-saying-goodbye-to-activex-vbscript-attachevent/

2、VS2017添加ActiveX控件

QA: MFC dialog web browser activeX Control will not generate class correctly.
https://developercommunity.visualstudio.com/t/mfc-dialog-web-browser-activex-control-will-not-ge/499195

为解决32位IDE中无法找到x64 ActiveX控件的问题,仍采用事先创建并注册好的FxActiveX_MfcListCtrl(ActiveX控件)做测试,不同的是其配置为x64。

Regsvr32命令用于注册COM组件,是Windows系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行。
regsvr32 [/u] [/s] [/n] [/i[:cmdline]] dllname 其中dllname为activex控件文件名,建议在安装前拷贝到system文件夹下。

Regsvr32 [/u] [/n] [/i[:cmdline]] <dllname>
%systemroot%\SysWoW64\regsvr32 <full path of the DLL>参数解释如下:
/u 				#反注册控件,取消注册服务器
/s 				#指定 regsvr32 安静运行,在成功注册/反注册DLL文件的前提下不显示结果提示框。
/n 				#不调用 DllRegisterServer;此选项必须与 /i 一起使用
/i:cmdline 		#调用 DllInstall,为其传递一个可选 [cmdline];当与 /u 一起使用时,可调用 dll uninstall
dllname 		#指定要注册的 dll 文件名。

添加方法与32位控件不同(当然也可以先注册对应的32位控件,添加控件代码之后,再注册64位控件,再编译代码工程),这里采用动态创建控件的方式,成功解决无法添加的问题。

  • (1)新建基于对话框的工程。
    在这里插入图片描述
  • (2)鼠标右键弹出菜单“类向导”
    在这里插入图片描述
  • (3)在窗口“类向导”,点击下拉框“添加类”,选择菜单“ActiveX控件中的MFC类”。

在这里插入图片描述

  • (4)在可用的ActiveX控件里没有找到相关控件FxActiveX_MfcListCtrl(ActiveX控件)的信息。
    如果是32位控件注册的话,是可以看见的。
    在这里插入图片描述
  • (5)选择从文件直接加载。
    在这里插入图片描述
  • (6)导出文件里的控件类。
    在这里插入图片描述
  • (7)自动生成对应的控件类代码文件。
    在这里插入图片描述
  • (8)添加控件对象定义代码。
    在这里插入图片描述
#include "CDXlist0.h"
CDXlist0 m_ctl;
  • (9)添加控件对象实现代码。
    在这里插入图片描述
#define IDC_OCX_CTL 1000CRect rect;GetClientRect(&rect);m_ctl.Create(NULL, WS_CHILD | WS_VISIBLE, rect, this, IDC_OCX_CTL);m_ctl.ShowWindow(SW_SHOW);for (int i = 0; i < 100; i++) {CString strText;strText.Format(L"hello: %d", i);m_ctl.AddTextItem(0, strText);}
  • (10)编译和运行工程。
    在这里插入图片描述
    成功加载ActiveX控件!

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位大佬童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

http://www.lryc.cn/news/173351.html

相关文章:

  • Linux常用命令—find命令大全
  • form组件的封装(element ui ) 简单版本
  • 树形DP杂题
  • Webpack使用plugin插件自动在打包目录生成html文件
  • 图像处理与计算机视觉--第一章-计算机视觉简介-10问
  • LeetCode 80. 删除有序数组中的重复项 II
  • 【前端面试题】浏览器面试题
  • PHP 生成 PDF文件
  • 讲讲项目里的仪表盘编辑器(一)
  • 解决方案 | 如何构建市政综合管廊安全运行监测系统?
  • JCEF中js与java交互、js与java相互调用
  • 9.20 校招 实习 内推 面经
  • 基于JAVA+SpringBoot+Vue+协同过滤算法+爬虫的前后端分离的租房系统
  • 【Android Framework系列】第16章 存储访问框架 (SAF)
  • Antdesign 4中让分页组件居中显示的方法
  • 【笔记】ubuntu 20.04 + mongodb 4.4.14定时增量备份脚本
  • c++实现的一个定时器实例
  • Python线程和进程
  • 算法 寻找峰值-(二分查找+反向双指针)
  • 【数据结构】—交换排序之快速排序究极详解,手把手带你从简单的冒泡排序升级到排序的难点{快速排序}(含C语言实现)
  • 【c#-Nuget 包“在此源中不可用”】 Nuget package “Not available in this source“
  • 【数据结构】二叉树之堆的实现
  • 电工-三极管输入输出特性曲线讲解
  • 深入解析容器与虚拟化:技术、对比与生态
  • 制作游戏demo的心得
  • Web Tour Server窗口闪现
  • Linux下的基本指令
  • 随机数生成器代码HTML5
  • 正确理解redux Toolkits中createSlice的action.payload
  • YOLOv8快速复现 官网版本 ultralytics