目录
介绍
HexCtrl是一个非常有特色的十六进制查看器/编辑器控件,用C++/MFC库编写。
它被实现为一个纯抽象接口,因此即使您不直接使用MFC,也可以在您的应用程序中使用。它是在Windows 10下的Visual Studio 2019 中使用/std:c++17标准编写的。
HexCtrl的主要特点:
- 查看和编辑高达16EB(艾字节)的数据
- 在三种不同的数据模式下工作:Memory、Message、Virtual
- 功能齐全的书签管理器
- 功能齐全的搜索和替换
- 文本区域的可变编码
- 复制/粘贴到/从剪贴板的许多选项
- 撤销重做
- 使用填充和许多预定义的操作选项修改数据
- 能够在视觉上将数据分成页面
- 打印整个文档/页面范围/选择
- 使用
IHexVirtColors
界面为数据块设置单独的颜色 - 可定制的颜色、外观和外观
- 通过外部配置文件可分配的键盘快捷键
- 写成/std:c++17标准一致性
安装
该HexCtrl可以用两种不同的方式使用:
- 作为项目的一部分从源代码构建
- 用作.dll。
从源头构建
构建过程非常简单:
- 将HexCtrl文件夹复制到您的项目目录中。
- 将HexCtrl文件夹中的所有文件添加到您的项目中,除了
HexCtrl/dep/rapidjson/rapidjson-amalgam.h(仅标头库)。 - 添加
#include "HexCtrl/HexCtrl.h"
您想使用HexCtrl 的位置。 - 声明HexCtrl的命名空间:
using namespace HEXCTRL;
- 声明
IHexCtrlPtr
成员变量:IHexCtrlPtr myHex { CreateHexCtrl() };
- 创建控件实例。
如果您想从非MFC应用程序的源代码构建HexCtrl,您必须:
- 在项目设置中添加对在共享 DLL中使用 MFC 的支持。
- 注释该行
//#define HEXCTRL_MANUAL_MFC_INIT
的HexCtrl.h
头文件。
动态链接库
要将HexCtrl用作.dll,请执行以下操作:
- 将HexCtrl.h文件复制到您的项目文件夹中。
- 将HexCtrl.lib文件复制到您的项目文件夹中,以便链接器可以看到它。
- 把HexCtrl.dll文件旁边的.EXE文件。
- 在您假设要使用控件的位置添加以下行:
#define HEXCTRL_SHARED_DLL //您也可以在 HexCtrl.h 中取消注释此行。
#include " HexCtrl.h"
5、声明IHexCtrlPtr
成员变量:IHexCtrlPtr myHex { CreateHexCtrl() };
6、创建控件实例。
要构建HexCtrl.dll和HexCtrl.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_UNIQUEPTR
在HexCtrl.h 中定义或取消定义/注释掉宏来选择最适合您需要的内容。
默认情况下HEXCTRL_IHEXCTRLPTR_UNIQUEPTR
已定义,因此IHexCtrlPtr
是 的别名std::unique_ptr<IHexCtrl>
。
这个包装器主要是为了方便,所以你不必担心对象的生命周期,它会自动销毁。这就是为什么要调用工厂函数CreateHexCtrl()
- 正确初始化指针。
如果由于某种原因需要原始接口指针,则可以直接调用CreateRawHexCtrl
返回IHexCtrl
接口指针的函数,但在这种情况下,您将需要Destroy
随后手动调用方法来销毁IHexCtrl
对象。
命名空间
HexCtrl使用自己的命名空间HEXCTRL
。
所以这取决于你,是否在声明前使用命名空间前缀:
HEXCTRL::
或者在源文件的开头全局定义命名空间:
using namespace HEXCTRL;
创造
经典方法
Create
是您调用以创建HexCtrl实例的第一个方法。它以HEXCREATESTRUCT
引用作为参数。
您可以通过将此结构的成员设置为或来选择控件是作为子窗口还是独立弹出窗口运行。enCreateMode
EHexCreateMode::CREATE_CHILD
EHexCreateMode::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使用