C++/Win32 应用程序Hex Control的使用

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

目录

介绍

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() };
BOOL CMyDialog::OnInitDialog()
{
    CDialogEx::OnInitDialog();
    
    m_myHex->CreateDialogCtrl(IDC_MY_HEX, m_hWnd);
}

设置数据

设置要在HexCtrl使用

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值