在寫一個項目中需要對位元據進行操作,結果在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);