HexCtrl 是一个非常有特色的十六进制查看器/编辑器控件,用 C++/MFC 库编写。
在本文中,我们将讨论:安装、创建 HexControl 实例、设置要在 HexControl 中显示的数据、书签区域以及如何为它们分配单独的背景、文本颜色和描述,以及 HexControl 中方法的概述。
 
 
更多相关学习资料参见 http://www.pdfdownload.cn/a/aa_index.php
 
十六进制控制,C++/MFC

目录

  • 介绍
  • 安装
    • 从源头构建
    • 动态链接库
    • IHexCtrlPtr
    • 命名空间
  • 创造
    • 经典方法
    • 在对话框中
  • 设置数据
  • 数据模式
    • 内存数据
    • 消息窗口
    • 虚拟处理器
  • 虚拟书签
  • IHexVirtColors
  • 方法

    扩张

  • 结构

    扩张

  • 通知消息

    扩张

  • 导出的函数

    扩张

  • 定位和尺寸
  • 外貌
  • 许可

介绍

HexCtrl是一个非常有特色的十六进制查看器/编辑器控件,用C++/MFC库编写。

它被实现为一个纯抽象接口,因此即使您不直接使用MFC,也可以在您的应用程序中使用。它是在Windows 10下的Visual Studio 2019 中使用/std:c++17标准编写的。

HexCtrl的主要特点:

  • 查看和编辑高达16EB字节)的数据
  • 在三种不同的数据模式下工作:MemoryMessageVirtual
  • 功能齐全的书签管理器
  • 功能齐全的搜索和替换
  • 文本区域的可变编码
  • 复制/粘贴到/从剪贴板的许多选项
  • 撤销重做
  • 使用填充和许多预定义的操作选项修改数据
  • 能够在视觉上将数据分成页面
  • 打印整个文档/页面范围/选择
  • 使用IHexVirtColors界面为数据块设置单独的颜色
  • 可定制的颜色、外观和外观
  • 通过外部配置文件可分配的键盘快捷键
  • 写成/std:c++17标准一致性

安装

HexCtrl可以用两种不同的方式使用:

  • 作为项目的一部分从源代码构建
  • 用作.dll

从源头构建

构建过程非常简单:

  1. HexCtrl文件夹复制到您的项目目录中。
  2. HexCtrl文件夹中的所有文件添加到您的项目中,除了
    HexCtrl/dep/rapidjson/rapidjson-amalgam.h(仅标头库)。
  3. 添加#include "HexCtrl/HexCtrl.h"您想使用HexCtrl 的位置
  4. 声明HexCtrl的命名空间:using namespace HEXCTRL;
  5. 声明IHexCtrlPtr成员变量:IHexCtrlPtr myHex { CreateHexCtrl() };
  6. 创建控件实例。

如果您想从非MFC应用程序的源代码构建HexCtrl,您必须:

  1. 在项目设置中添加对在共享 DLL使用 MFC 的支持。
  2. 注释该行//#define HEXCTRL_MANUAL_MFC_INITHexCtrl.h头文件。

动态链接库

要将HexCtrl用作.dll,请执行以下操作:

  1. HexCtrl.h文件复制到您的项目文件夹中。
  2. HexCtrl.lib文件复制到您的项目文件夹中,以便链接器可以看到它。
  3. HexCtrl.dll文件旁边的.EXE文件。
  4. 在您假设要使用控件的位置添加以下行:
#define HEXCTRL_SHARED_DLL //您也可以在 HexCtrl.h 中取消注释此行。
#include " HexCtrl.h"

5、声明IHexCtrlPtr成员变量:IHexCtrlPtr myHex { CreateHexCtrl() };

6、创建控件实例。

要构建HexCtrl.dllHexCtrl.lib,请使用DLL Project/DLL Project.vcxproj Visual Studio项目文件。

评论:

HexCtrl.dll是用MFC 静态链接构建的。所以即使你是在自己的MFC项目中使用,即使是不同的MFC版本,也不应该有任何干扰

使用MFC 共享 DLL构建HexCtrl结果有点棘手。即使在宏的帮助下,也总是有MFC调试断言,其起源很难理解。AFX_MANAGE_STATE(AfxGetStaticModuleState())

IHexCtrlPtr

IHexCtrlPtr事实上,它是一个指向IHexCtrl纯抽象基类的指针,包裹在std::unique_ptr或 中std::shared_ptr。您可以通过HEXCTRL_IHEXCTRLPTR_UNIQUEPTRHexCtrl.h 中定义或取消定义/注释掉宏来选择最适合您需要的内容
默认情况下HEXCTRL_IHEXCTRLPTR_UNIQUEPTR已定义,因此IHexCtrlPtr是 的别名std::unique_ptr<IHexCtrl>

这个包装器主要是为了方便,所以你不必担心对象的生命周期,它会自动销毁。这就是为什么要调用工厂函数CreateHexCtrl()- 正确初始化指针。

如果由于某种原因需要原始接口指针,则可以直接调用CreateRawHexCtrl返回IHexCtrl接口指针的函数,但在这种情况下,您将需要Destroy随后手动调用方法来销毁IHexCtrl对象。

命名空间

HexCtrl使用自己的命名空间HEXCTRL
所以这取决于你,是否在声明前使用命名空间前缀:

HEXCTRL::

或者在源文件的开头全局定义命名空间:

using namespace HEXCTRL;

创造

经典方法

Create是您调用以创建HexCtrl实例的第一个方法。它以HEXCREATESTRUCT引用作为参数。

您可以通过将此结构的成员设置为或来选择控件是作为窗口还是独立弹出窗口运行。enCreateModeEHexCreateMode::CREATE_CHILDEHexCreateMode::CREATE_POPUP

HEXCREATESTRUCT hcs;
hcs.enCreateMode = EHexCreateMode::CREATE_POPUP;
hcs.hwndParent = m_hWnd;
m_myHex->创建(hcs);

有关所有可用选项,请参阅HEXCREATESTRUCT说明。

在对话框中

要在Dialog 中使用HexCtrl,您当然可以使用Classic Approach创建它,调用方法并提供所有必要的信息。Create

但是您可以使用另一种选择:

  • 自定义控件工具箱的Visual Studio对话设计师到您的对话框模板,并使其所需的尺寸。
     
  • 转到该控件的属性,然后在字段中的其他部分中键入:HexCtrl。为您选择
    的控件提供适当的ID(IDC_MY_HEX在本例中)。
    此外,您可以在此处设置控件的动态布局属性,以便在调整对话框大小时控件的行为适当。
  • IHexCtrlPtr在对话框类中声明成员变量:
IHexCtrlPtr m_myHex { CreateHexCtrl() };
  • CreateDialogCtrl从对话框的OnInitDialog方法中调用方法。
BOOL CMyDialog::OnInitDialog()
{CDialogEx::OnInitDialog();m_myHex->CreateDialogCtrl(IDC_MY_HEX, m_hWnd);
}

设置数据

设置要在HexCtrl使用SetData方法中显示的数据。下面的代码显示了如何构造IHexCtrlPtr对象并显示0x1FF当前应用程序内存的第一个字节:

C++/Win32 应用程序Hex Control的使用相关推荐

  1. PHP程序员开发win32应用程序之梦

    相信做纯WEB开发的PHP程序员都会想过,要是PHP能开发windows本地应用程序多好,于是上网一查找出来的很多都是"PHP-GTK"的老文章,这东西好像已经没人维护了,随便看了 ...

  2. python使用ctype中”OSError: [WinError 193] %1 不是有效的 Win32 应用程序“的解决办法

    python使用ctype中"OSError: [WinError 193] %1 不是有效的 Win32 应用程序"的解决办法 解决办法: 下载32位的python,重新安装即可 ...

  3. 新的UWP和Win32应用程序分发模型

    自2005年引入ClickOnce技术以来,.NET就支持应用程序自动升级.在ClickOnce模型中,WinForms和WPF应用程序在启动时会从预先配置好的位置查找新版本.但是,由于微软试图模仿i ...

  4. 关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序。

    关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. 参考文章: (1)关于java调用Dll文件的异常 %1 不是有效的 Win32 应用程序. (2)https://www. ...

  5. qt dll 1% 不是有效的win32应用程序

    dll 找不到指定的模块,这个是说dll文件没有找到, 解决方法:把dll放到debug目录下. dll是32位的,用qt 64bit的开发环境编译,运行会报错:%1不是有效的win32应用程序 解决 ...

  6. win32应用程序_不是有效的win32应用程序怎么解决

    在日常办公中经常用到电脑,有许多使用技巧.本次给大家介绍不是有效的win32应用程序怎么办,快来看看吧. 方法一:不是有效的win32应用程序表示这个应用程序和系统不兼容,用户可以在计算机属性页面查看 ...

  7. 纯 Win32 SDK程序为什么每次要获取设备描述表句柄

    做过Win32 API程序的就会发现,要对窗口输出时,每次都要获取设备描述表句柄:都是对同一个窗口输出,设备描述表是一个:为什么每次都要获取设备描述表句柄呢?获取一次行吗? 做一个Win32 API程 ...

  8. jna 不是有效的 win32 应用程序_教你打开程序提示不是有效的win32程序怎么办

    在对电脑的使用过程中,我们经常都会遇到一些问题.比如说打开程序出现提示"不是有效win32位程序",遇到这个问题时该如何处理呢?下面小编就给大家介绍打开程序出现系统提示" ...

  9. Python配置OpenCV时报错:ImportError DLL load failed: %1 不是有效的 Win32 应用程序

    在Python配置OpenCV时报错以下错误: ImportError DLL load failed: %1 不是有效的 Win32 应用程序 解决办法:Python版本的32位.64位于OpenC ...

  10. 成功解决 OSError: [WinError 193] %1 不是有效的 Win32 应用程序

    成功解决 OSError: [WinError 193] %1 不是有效的 Win32 应用程序 目录 解决问题 解决思路 解决方法 解决问题 import tensorflow Traceback ...

最新文章

  1. C语言接收一个整数划分成5的倍数,整数划分为连续整数;整数划分
  2. dropdown.js
  3. cocos2d-js中listView的jumpToBottom()方法无效的解决方法
  4. ionic3学习之总结
  5. 成功创业者所需的能力
  6. magic_quotes_gpc合magic_quotes_runtime的区别!
  7. crt导出服务器文件,非1元证书怎么提取生成crt文件
  8. Java笔试面试题001
  9. 程序员经常遇见的9大困难你造么?
  10. 华为机试HJ46:截取字符串
  11. .NET实现在Word指定页码之间插入另一个Word
  12. 职称计算机 将计算机broad_1下的e盘映射为k盘网络驱动器,职称计算机考试网络基础)试题及答案操作.doc...
  13. JS入门到精通完整版
  14. 计算机函数公式 加法,excel怎样使用加法函数公式
  15. Python爬虫爬取个人主页信息(拖拽验证码验证)+Linux部署
  16. 利用backtrace和ucontex定位segment错误【转】
  17. 语义分析(Semantic Parsing)调研
  18. 电磁攻击方法与能量攻击方法的对比
  19. Idea开发springBoot 中使用 thymeleaf 模板$表达式报红波浪线解决方案
  20. 什么是IAP?如何实现IAP?

热门文章

  1. 【Flask基础】一,app对象的初始化与静态参数配置
  2. 每一天都想过得像周末?你需要一台更贴心的平板电脑
  3. 高防服务器线路的分类简单介绍
  4. 最新诈骗!!!专门针对IT公司
  5. cas登录成功什么意思_cas登录成功返回用户更多信息
  6. github拉取vue项目启动时出错问题npm ERR!
  7. 【云周刊】第160期:MWC2018-阿里云发布8款云计算AI产品,中国科技已领先世界一步...
  8. 关于springboot的优雅停机和健康检查配置(用于k8s服务重启)
  9. 【LOJ2327】「清华集训 2017」福若格斯
  10. WireShark抓包TCP三次握手和四次挥手