123
This commit is contained in:
427
Editor/XT/Include/XTHexEdit.h
Normal file
427
Editor/XT/Include/XTHexEdit.h
Normal file
@@ -0,0 +1,427 @@
|
||||
// XTHexEdit.h interface for the CXTHexEdit class.
|
||||
//
|
||||
// This file is a part of the Xtreme Toolkit for MFC.
|
||||
// <20>1998-2003 Codejock Software, All Rights Reserved.
|
||||
//
|
||||
// This source code can only be used under the terms and conditions
|
||||
// outlined in the accompanying license agreement.
|
||||
//
|
||||
// support@codejock.com
|
||||
// http://www.codejock.com
|
||||
//--------------------------------------------------------------------
|
||||
// Based on the code created by Andreas Saurwein
|
||||
// mailto:saurwein@uniwares.de
|
||||
//--------------------------------------------------------------------
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
#if !defined(__XTHEXEDIT_H__)
|
||||
#define __XTHEXEDIT_H__
|
||||
|
||||
#if _MSC_VER >= 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER >= 1000
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// Summary: CXTHexEdit is a CEdit derived class. It is used to create an edit control
|
||||
// which will allow editing in hex display format.
|
||||
class _XT_EXT_CLASS CXTHexEdit : public CEdit
|
||||
{
|
||||
DECLARE_DYNAMIC(CXTHexEdit)
|
||||
|
||||
public:
|
||||
|
||||
// Summary: Constructs a CXTHexEdit object.
|
||||
CXTHexEdit();
|
||||
|
||||
// Summary: Destroys a CXTHexEdit object, handles cleanup and de-allocation.
|
||||
virtual ~CXTHexEdit();
|
||||
|
||||
public:
|
||||
|
||||
// Summary: Enumerated value that represents the current editing mode.
|
||||
enum EDITMODE
|
||||
{
|
||||
EDIT_NONE, // No editing mode specified.
|
||||
EDIT_ASCII, // ASCII editing mode.
|
||||
EDIT_HIGH, // High editing mode.
|
||||
EDIT_LOW // Low editing mode.
|
||||
};
|
||||
|
||||
int m_nLength; // Length of data.
|
||||
int m_nTopIndex; // Offset of first visible byte on the screen.
|
||||
int m_nCurrentAddress; // Address under the cursor.
|
||||
int m_nSelStart; // Start address of the selection.
|
||||
int m_nSelEnd; // End address of the selection.
|
||||
int m_nBytePerRow; // Bytes per row.
|
||||
int m_nLinesPerPage; // Lines per page.
|
||||
int m_nLineHeight; // Height, in pixels, of a single line displayed in the control.
|
||||
int m_nNullWidth; // Width, in pixels, of a single character displayed in the control (uniform width).
|
||||
int m_nOffHex; // Internally used value - X position where hex part starts.
|
||||
int m_nOffAscii; // Internally used value - X position where ASCII part starts.
|
||||
int m_nOffAddress; // Internally used value - X position where address part starts.
|
||||
bool m_bAllowDeletes; // A boolean value indicating whether or not deletions are allowed.
|
||||
BOOL m_bDynamicBPR; // Calculate bytes-per-row dynamically.
|
||||
BOOL m_bShowAddress; // TRUE when showing the address part.
|
||||
BOOL m_bShowAscii; // TRUE when showing the ASCII part.
|
||||
BOOL m_bShowHex; // TRUE when showing the hex part.
|
||||
BOOL m_bAddressIsWide; // 4/8 byte address.
|
||||
BOOL m_bUpdate; // Value used internally to indicate that the font and size info need to be updated on the next paint cycle.
|
||||
UINT m_nMaxLength; // Maximum size of data.
|
||||
DWORD m_dwBaseAddress; // Base address for data.
|
||||
CPoint m_ptEditPos; // Current caret position.
|
||||
LPBYTE m_pData; // Pointer to data.
|
||||
EDITMODE m_eEditMode; // Current editing mode: address/hex/ASCII.
|
||||
|
||||
protected:
|
||||
|
||||
BOOL m_bShowCaret; // TRUE to display a flashing caret at the current caret position.
|
||||
CSize m_szCaret; // Current size of caret.
|
||||
CFont m_fontHex; // Represents the default font used by the hex edit control.
|
||||
COLORREF m_crBack; // RGB value that represents the background color of the hex edit control.
|
||||
COLORREF m_crText; // RGB value that represents the text color of the hex edit control.
|
||||
COLORREF m_crDisabledBack; // RGB value that represents the disabled background color for the hex edit control.
|
||||
COLORREF m_crDisabledText; // RGB value that represents the disabled text color of the hex edit control.
|
||||
COLORREF m_crHighlightText; // RGB value that represents the highlighted text color of the hex edit control.
|
||||
COLORREF m_crHighlightBack; // RGB value that represents the highlighted background color of the hex edit control.
|
||||
COLORREF m_crDisabledHighlightText; // RGB value that represents the disabled highlighted text color of the hex edit control.
|
||||
COLORREF m_crDisabledHighlightBack; // RGB value that represents the disabled highlighted background color of the hex edit control.
|
||||
|
||||
public:
|
||||
|
||||
// Ignore:
|
||||
//{{AFX_VIRTUAL(CXTHexEdit)
|
||||
public:
|
||||
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
|
||||
protected:
|
||||
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
|
||||
//}}AFX_VIRTUAL
|
||||
|
||||
public:
|
||||
|
||||
// Returns: An RGB value that represents the current background color for the control.
|
||||
// Summary: Call this member function to return the current background color for
|
||||
// the hex edit control. The current background color depends on the
|
||||
// enabled, disabled, or read-only state of the control.
|
||||
COLORREF GetActualBackColor();
|
||||
|
||||
// Returns: An RGB value that represents the current text color for the control.
|
||||
// Summary: Call this member function to return the current text color for the hex
|
||||
// edit control. The current text color depends on the enabled, disabled,
|
||||
// or read-only state of the control.
|
||||
COLORREF GetActualTextColor();
|
||||
|
||||
// Returns: An RGB value that represents the current highlight background
|
||||
// color for the control.
|
||||
// Summary: Call this member function to return the current highlight background
|
||||
// color for the hex edit control. The current highlight background color
|
||||
// depends on the enabled, disabled, or read-only state of the control.
|
||||
COLORREF GetActualHighlightBackColor();
|
||||
|
||||
// Returns: An RGB value that represents the current highlight text color for the
|
||||
// control.
|
||||
// Summary: Call this member function to return the current highlight text color
|
||||
// for the hex edit control. The current highlight text color depends
|
||||
// on the enabled, disabled, or read-only state of the control.
|
||||
COLORREF GetActualHighlightTextColor();
|
||||
|
||||
// Input: crBack - An RGB value that represents the background color of the hex edit
|
||||
// control.
|
||||
// Summary: Call this member function to set the background color for the hex edit
|
||||
// control.
|
||||
void SetBackColor(COLORREF crBack);
|
||||
|
||||
// Returns: An RGB value that represents the current background color for the hex edit
|
||||
// control.
|
||||
// Summary: Call this member function to retrieve the current background color
|
||||
// for the hex edit control.
|
||||
COLORREF GetBackColor();
|
||||
|
||||
// Input: crText - An RGB value that represents the text color of the hex edit control.
|
||||
// Summary: Call this member function to set the text color for the hex edit control.
|
||||
void SetTextColor(COLORREF crText);
|
||||
|
||||
// Returns: An RGB value that represents the current text color for the hex edit control.
|
||||
// Summary: Call this member function to retrieve the current text color for the
|
||||
// hex edit control.
|
||||
COLORREF GetTextColor();
|
||||
|
||||
// Input: crDisabledBack - An RGB value that represents the disabled background color of the
|
||||
// hex edit control.
|
||||
// Summary: Call this member function to set the disabled background color for
|
||||
// the hex edit control.
|
||||
void SetDisabledBackColor(COLORREF crDisabledBack);
|
||||
|
||||
// Returns: An RGB value that represents the current disabled background color for the hex
|
||||
// edit control.
|
||||
// Summary: Call this member function to retrieve the current disabled background
|
||||
// color for the hex edit control.
|
||||
COLORREF GetDisabledBackColor();
|
||||
|
||||
// Input: crDisabledText - An RGB value that represents the disabled text color of the hex edit
|
||||
// control.
|
||||
// Summary: Call this member function to set the disabled text color for the hex
|
||||
// edit control.
|
||||
void SetDisabledTextColor(COLORREF crDisabledText);
|
||||
|
||||
// Returns: An RGB value that represents the current disabled text color for the hex
|
||||
// edit control.
|
||||
// Summary: Call this member function to retrieve the current disabled text color
|
||||
// for the hex edit control.
|
||||
COLORREF GetDisabledTextColor();
|
||||
|
||||
// Input: crHighlightText - An RGB value that represents the highlighted text color of the hex
|
||||
// edit control.
|
||||
// Summary: Call this member function to set the highlighted text color for the
|
||||
// hex edit control.
|
||||
void SetHighlightTextColor(COLORREF crHighlightText);
|
||||
|
||||
// Returns: An RGB value that represents the current highlighted text color for the
|
||||
// hex edit control.
|
||||
// Summary: Call this member function to retrieve the current highlighted text
|
||||
// color for the hex edit control.
|
||||
COLORREF GetHighlightTextColor();
|
||||
|
||||
// Input: crHighlight - An RGB value that represents the highlight background color of the
|
||||
// hex edit control.
|
||||
// Summary: Call this member function to set the highlight background color for
|
||||
// the hex edit control.
|
||||
void SetHighlightBackColor(COLORREF crHighlight);
|
||||
|
||||
// Returns: An RGB value that represents the current highlight background color for the
|
||||
// hex edit control.
|
||||
// Summary: Call this member function to retrieve the current highlight background
|
||||
// color for the hex edit control.
|
||||
COLORREF GetHighlightBackColor();
|
||||
|
||||
// Input: crDisabledHighlightText - An RGB value that represents the disabled highlight
|
||||
// text color of the hex edit control.
|
||||
// Summary: Call this member function to set the disabled highlight text color for
|
||||
// the hex edit control.
|
||||
void SetDisabledHighlightTextColor(COLORREF crDisabledHighlightText);
|
||||
|
||||
// Returns: An RGB value that represents the current disabled highlight text color
|
||||
// for the hex edit control.
|
||||
// Summary: Call this member function to retrieve the current disabled highlight
|
||||
// text color for the hex edit control.
|
||||
COLORREF GetDisabledHighlightTextColor();
|
||||
|
||||
// Input: crDisabledHighlight - An RGB value that represents the disabled highlight background color
|
||||
// of the hex edit control.
|
||||
// Summary: Call this member function to set the disabled highlight background
|
||||
// color for the hex edit control.
|
||||
void SetDisabledHighlightBackColor(COLORREF crDisabledHighlight);
|
||||
|
||||
// Returns: An RGB value that represents the current disabled highlight background color
|
||||
// for the hex edit control.
|
||||
// Summary: Call this member function to retrieve the current disabled highlight
|
||||
// background color for the hex edit control.
|
||||
COLORREF GetDisabledHighlightBackColor();
|
||||
|
||||
// Summary: This member function sets the font for the hex edit control to the
|
||||
// default "Courier New" font.
|
||||
void RestoreDefaultFont();
|
||||
|
||||
// Input: pFont - Points to a valid CFont object.
|
||||
// Summary: This member function sets the font used by the hex edit control.
|
||||
void SetHexFont(CFont* pFont);
|
||||
|
||||
// Input: pLogFont - Points to a valid LOGFONT structure.
|
||||
// Summary: This member function sets the font used by the hex edit control.
|
||||
void SetHexFont(LOGFONT* pLogFont);
|
||||
|
||||
// Input: bEnable - true to enable caret, false to disable.
|
||||
// Summary: This member function enables or disables a flashing screen caret.
|
||||
void EnableCaret(bool bEnable);
|
||||
|
||||
// Input: bVertical - true to display vertical scroll bar.
|
||||
// bHorizontal - true to display horizontal scroll bar.
|
||||
// Summary: This member function enables or disables a vertical and horizontal scroll
|
||||
// bar display.
|
||||
void EnableScrollBars(bool bVertical,bool bHorizontal);
|
||||
|
||||
// Input: dwBase - DWORD value that represents the base address.
|
||||
// Returns: A DWORD value.
|
||||
// Summary: Call this member function to set the base address for the hex edit
|
||||
// control.
|
||||
DWORD SetAddressBase(DWORD dwBase);
|
||||
|
||||
// Input: pData - Pointer to the buffer that will be receiving the data.
|
||||
// nBufferLength - Length of the target data buffer.
|
||||
// Returns: The length of the data.
|
||||
// Summary: Call this method to extract the data in the hex edit control.
|
||||
int GetData(LPBYTE pData,int nBufferLength);
|
||||
|
||||
// Input: pData - Pointer to a buffer that contains the initial data for the control.
|
||||
// nLength - Length of the data buffer.
|
||||
// nMaxLength - Optional maximum length that the buffer can grow, or -1 if you
|
||||
// want to allow the buffer to grow indefinitely.
|
||||
// Summary: Call this member function to initialize the hex edit control with data
|
||||
// specified by 'pData'.
|
||||
void SetData(LPBYTE pData,int nLength,int nMaxLength = 0);
|
||||
|
||||
// Input: bVal - The new value for this setting.
|
||||
// Returns: The previous value.
|
||||
// Summary: Call this method to allow or disallow the deletion of characters
|
||||
// within the control. For instance, calling SetAllowDeletes(false) will
|
||||
// disable the delete, backspace, and other such keys.
|
||||
bool SetAllowDeletes(bool bVal = true);
|
||||
|
||||
// Returns: true if the Allow Deletes setting is enabled, or false if it is disabled.
|
||||
// Summary: This member function retrieves the current value of the Allow Deletes
|
||||
// setting.
|
||||
// See Also: SetAllowDeletes
|
||||
bool GetAllowDeletes() const;
|
||||
|
||||
// Returns: A CSize object.
|
||||
// Summary: Call this member function to get the size of the current selection.
|
||||
CSize GetSel();
|
||||
|
||||
// Input: nSelStart - Represents the position of the first character in the selection.
|
||||
// nSelEnd - Represents the position of the last character in the selection.
|
||||
// Summary: Call this member function to set the current selection.
|
||||
void SetSel(int nSelStart,int nSelEnd);
|
||||
|
||||
// Input: nBytePerRow - Represents the number of bytes to display.
|
||||
// Summary: Call this member function to set the number of bytes per row.
|
||||
void SetBPR(int nBytePerRow);
|
||||
|
||||
// Input: bShowAddress - TRUE to display the address value.
|
||||
// bShowHex - TRUE to display the hex value.
|
||||
// bShowAscii - TRUE to display the ASCII value.
|
||||
// bAddressIsWide - TRUE if the display is 8 byte, FALSE for 4 byte display.
|
||||
// Summary: Call this member function to set the display options for the hex edit
|
||||
// control.
|
||||
void SetOptions(BOOL bShowAddress,BOOL bShowHex,BOOL bShowAscii,BOOL bAddressIsWide);
|
||||
|
||||
protected:
|
||||
|
||||
void ScrollIntoView(int pData);
|
||||
void RepositionCaret(int pData);
|
||||
void Move(int x, int y);
|
||||
BOOL IsSelected();
|
||||
void UpdateScrollbars();
|
||||
void CreateEditCaret();
|
||||
void CreateAddressCaret();
|
||||
CPoint CalcPos(int x, int y);
|
||||
void SelInsert(int nSelStart, int nLength);
|
||||
void SelDelete(int nSelStart, int nSelEnd);
|
||||
void NormalizeSel();
|
||||
void RecalcBPR();
|
||||
void DoVScroll(UINT nSBCode, bool bMoveCaret);
|
||||
|
||||
// Ignore:
|
||||
//{{AFX_MSG(CXTHexEdit)
|
||||
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||||
afx_msg void OnKillFocus(CWnd* pNewWnd);
|
||||
afx_msg void OnPaint();
|
||||
afx_msg void OnSetFocus(CWnd* pOldWnd);
|
||||
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||
afx_msg UINT OnGetDlgCode();
|
||||
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
||||
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||||
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
|
||||
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
||||
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
||||
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||||
afx_msg void OnContextMenu(CWnd*, CPoint point);
|
||||
afx_msg void OnEditClear();
|
||||
afx_msg void OnEditCopy();
|
||||
afx_msg void OnEditCut();
|
||||
afx_msg void OnEditPaste();
|
||||
afx_msg void OnEditSelectAll();
|
||||
afx_msg void OnEditUndo();
|
||||
afx_msg void OnNcPaint();
|
||||
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
|
||||
//}}AFX_MSG
|
||||
|
||||
DECLARE_MESSAGE_MAP()
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
AFX_INLINE UINT CXTHexEdit::OnGetDlgCode() {
|
||||
return DLGC_WANTALLKEYS;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetOptions(BOOL bShowAddress, BOOL bShowHex, BOOL bShowAscii, BOOL bAddressIsWide) {
|
||||
m_bShowHex = bShowHex; m_bShowAscii = bShowAscii; m_bShowAddress = bShowAddress; m_bAddressIsWide = bAddressIsWide; m_bUpdate = TRUE; RepositionCaret(m_nCurrentAddress);
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetBPR(int nBytePerRow) {
|
||||
m_nBytePerRow = nBytePerRow; m_bUpdate = TRUE; RepositionCaret(m_nCurrentAddress);
|
||||
}
|
||||
AFX_INLINE BOOL CXTHexEdit::IsSelected() {
|
||||
return m_nSelStart != 0xffffffff;
|
||||
}
|
||||
AFX_INLINE CSize CXTHexEdit::GetSel() {
|
||||
return CSize(m_nSelStart, m_nSelEnd);
|
||||
}
|
||||
AFX_INLINE int CXTHexEdit::GetData(LPBYTE pData, int nLength) {
|
||||
memcpy(pData, m_pData, __min(nLength, m_nLength)); return m_nLength;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetBackColor(COLORREF crBack) {
|
||||
m_crBack = crBack;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetTextColor(COLORREF crText) {
|
||||
m_crText = crText;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetDisabledBackColor(COLORREF crDisabledBack) {
|
||||
m_crDisabledBack = crDisabledBack;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetDisabledTextColor(COLORREF crDisabledText) {
|
||||
m_crDisabledText = crDisabledText;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetHighlightTextColor(COLORREF crHighlightText) {
|
||||
m_crHighlightText = crHighlightText;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetHighlightBackColor(COLORREF crHighlightBack) {
|
||||
m_crHighlightBack = crHighlightBack;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetDisabledHighlightTextColor(COLORREF crDisabledHighlightText) {
|
||||
m_crDisabledHighlightText = crDisabledHighlightText;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::SetDisabledHighlightBackColor(COLORREF crDisabledHighlightBack) {
|
||||
m_crDisabledHighlightBack = crDisabledHighlightBack;
|
||||
}
|
||||
AFX_INLINE COLORREF CXTHexEdit::GetBackColor() {
|
||||
return m_crBack;
|
||||
}
|
||||
AFX_INLINE COLORREF CXTHexEdit::GetTextColor() {
|
||||
return m_crText;
|
||||
}
|
||||
AFX_INLINE COLORREF CXTHexEdit::GetDisabledBackColor() {
|
||||
return m_crDisabledBack;
|
||||
}
|
||||
AFX_INLINE COLORREF CXTHexEdit::GetDisabledTextColor() {
|
||||
return m_crDisabledText;
|
||||
}
|
||||
AFX_INLINE COLORREF CXTHexEdit::GetHighlightTextColor() {
|
||||
return m_crHighlightText;
|
||||
}
|
||||
AFX_INLINE COLORREF CXTHexEdit::GetHighlightBackColor() {
|
||||
return m_crHighlightBack;
|
||||
}
|
||||
AFX_INLINE COLORREF CXTHexEdit::GetDisabledHighlightTextColor() {
|
||||
return m_crDisabledHighlightText;
|
||||
}
|
||||
AFX_INLINE COLORREF CXTHexEdit::GetDisabledHighlightBackColor() {
|
||||
return m_crDisabledHighlightBack;
|
||||
}
|
||||
AFX_INLINE void CXTHexEdit::EnableCaret(bool bEnable) {
|
||||
m_bShowCaret = bEnable;
|
||||
}
|
||||
|
||||
AFX_INLINE bool CXTHexEdit::SetAllowDeletes(bool bVal) {
|
||||
const bool bOldVal = m_bAllowDeletes; m_bAllowDeletes = bVal; return bOldVal;
|
||||
}
|
||||
|
||||
AFX_INLINE bool CXTHexEdit::GetAllowDeletes() const {
|
||||
return m_bAllowDeletes;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
//{{AFX_INSERT_LOCATION}}
|
||||
// Microsoft Developer Studio will insert additional declarations immediately before the previous line.
|
||||
|
||||
#endif // #if !defined(__XTHEXEDIT_H__)
|
||||
Reference in New Issue
Block a user