在写一个项目中需要对二进制数据进行操作,结果在http://www.codeguru.com/Cpp/controls/editctrl/article.php/c539#more网站上下到了Hex Edit Control, 集成到程序中发现了一些问题,我把我使用的步骤及解决方法写出来供大家参考,以免再走弯路.
1.从http://www.codeguru.com/Cpp/controls/editctrl/article.php/c539#more上下载hexeditctrl_src.zip
解压后把两个文件hexeditctrl.cpp hexeditctrl.h复制到你的应用程序目录下,并加入到你的工程;
2 新建一个右键菜单,ID为CG_IDR_POPUP_HEX_EDIT,包含剪切(ID_EDIT_CUT),复制(ID_EDIT_COPY),粘贴(ID_EDIT_PASTE),全选(ID_EDIT_SELECT_ALL).此菜单会被hexeditctrl调用.
3 打开hexeditctrl.cpp文件,找到AfxOleInit();语句后删除.如不删除,将会出现oleinit.cpp 54行错误;
是因为AfxOleInit重复造成的.删除可用 ::OleInitialize(NULL);语句初始化,以免复制等操作时出问题.
AfxOleInit()主要是封装了OleInitialize(),而OleInitialize内部调用了ConInitialize, OleInitialize比ConInitialize多了以下支持: Clipboard, Drag and drop, Object linking and embedding (OLE) ,In-place activation .
打开hexeditctrl.h文件,在文件头中添加:
#if !defined(AFX_HEXEDITCTRL__INCLUDED_)
#define AFX_HEXEDITCTRL__INCLUDED_
在文件尾添加:#endif
4 在对话框中放上编辑框,通过类向导定义一个编辑控控件变量m_edit, 在对放框的声明文件中找到
CEdit m_edit; 修改CEdit 为 CHexEdit 即可.
5 在对话框中的InitDialog事件中初始化编辑框:
UCHAR a[16]={0};
m_edit.SetData(a,16);
m_edit.SetFocus(); //此句必需加上,不信你不加看看什么效果.
6 从编辑框中取值:
UCHAR a[16]={0};
m_edit.GetData(a,16);