// XTPHexEdit.h interface for the CXTPHexEdit class. // // This file is a part of the XTREME CONTROLS MFC class library. // (c)1998-2012 Codejock Software, All Rights Reserved. // // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN // CONSENT OF CODEJOCK SOFTWARE. // // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A // SINGLE COMPUTER. // // CONTACT INFORMATION: // support@codejock.com // http://www.codejock.com // ///////////////////////////////////////////////////////////////////////////// //{{AFX_CODEJOCK_PRIVATE #if !defined(__XTPHEXEDIT_H__) #define __XTPHEXEDIT_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000j #ifdef _XTP_ACTIVEX #define CXTPHexEditBase CXTPOleControl #else #define CXTPHexEditBase CEdit #endif //=========================================================================== // Summary: // CXTPHexEdit is a CEdit derived class. It is used to create an edit control // which will allow editing in hex display format. //=========================================================================== class _XTP_EXT_CLASS CXTPHexEdit : public CXTPHexEditBase { DECLARE_DYNAMIC(CXTPHexEdit) protected: // -------------------------------------------------------------------- // Summary: // Enumeration used to determine current editing mode. // Remarks: // EditMode type defines the constants used by the CXTPHexEdit // class to determine the current editing mode. // See Also: // CXTPHexEdit // // // -------------------------------------------------------------------- enum EditMode { editNone, // No editing mode specified. editAscii, // ASCII editing mode. editHigh, // High editing mode. editLow // Low editing mode. }; public: //----------------------------------------------------------------------- // Summary: // Constructs a CXTPHexEdit object //----------------------------------------------------------------------- CXTPHexEdit(); //----------------------------------------------------------------------- // Summary: // Destroys a CXTPHexEdit object, handles cleanup and deallocation //----------------------------------------------------------------------- virtual ~CXTPHexEdit(); public: //----------------------------------------------------------------------- // Summary: // This method creates the HexEdit control. // Parameters: // dwStyle - Style for the HexEdit. // rect - Specifies the size and position of the HexEdit control. // pParentWnd - Specifies the parent window of the HexEdit control. // nID - Specifies the HexEdit control ID. // Returns: // TRUE if successful, otherwise returns FALSE. //----------------------------------------------------------------------- virtual BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID); //----------------------------------------------------------------------- // Summary: // This method creates the HexEdit control. // Parameters: // dwStyle - Style for the HexEdit. // rect - Specifies the size and position of the HexEdit control. // pParentWnd - Specifies the parent window of the HexEdit control. // nID - Specifies the HexEdit control ID. // lpszClassName - Class Name ("EDIT" by default) // lpszWindowName - Window Name // pContext - Pointer to the CCreateContext // Returns: // TRUE if successful, otherwise returns FALSE. //----------------------------------------------------------------------- virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL); //----------------------------------------------------------------------- // 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. // Returns: // An RGB value that represents the current background color for the control. //----------------------------------------------------------------------- COLORREF GetActualBackColor(); //----------------------------------------------------------------------- // 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. // Returns: // An RGB value that represents the current text color for the control. //----------------------------------------------------------------------- COLORREF GetActualTextColor(); //----------------------------------------------------------------------- // 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. // Returns: // An RGB value that represents the current highlight background // color for the control. //----------------------------------------------------------------------- COLORREF GetActualHighlightBackColor(); //----------------------------------------------------------------------- // 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. // Returns: // An RGB value that represents the current highlight text color for the // control. //----------------------------------------------------------------------- COLORREF GetActualHighlightTextColor(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the background color for the hex edit // control. // Parameters: // crBack - An RGB value that represents the background color of the hex edit // control. //----------------------------------------------------------------------- void SetBackColor(COLORREF crBack); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current background color // for the hex edit control. // Returns: // An RGB value that represents the current background color for // the hex edit control. //----------------------------------------------------------------------- COLORREF GetBackColor(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the text color for the hex // edit control. // Parameters: // crText - An RGB value that represents the text color of the // hex edit control. //----------------------------------------------------------------------- void SetTextColor(COLORREF crText); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current text color for the // hex edit control. // Returns: // An RGB value that represents the current text color for the hex // edit control. //----------------------------------------------------------------------- COLORREF GetTextColor(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the disabled background color for // the hex edit control. // Parameters: // crDisabledBack - An RGB value that represents the disabled background // color of the hex edit control. //----------------------------------------------------------------------- void SetDisabledBackColor(COLORREF crDisabledBack); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current disabled background // color for the hex edit control. // Returns: // An RGB value that represents the current disabled background // color for the hex edit control. //----------------------------------------------------------------------- COLORREF GetDisabledBackColor(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the disabled text color for the hex // edit control. // Parameters: // crDisabledText - An RGB value that represents the disabled text // color of the hex edit control. //----------------------------------------------------------------------- void SetDisabledTextColor(COLORREF crDisabledText); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current disabled text color // for the hex edit control. // Returns: // An RGB value that represents the current disabled text color // for the hex edit control. //----------------------------------------------------------------------- COLORREF GetDisabledTextColor(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the highlighted text color for the // hex edit control. // Parameters: // crHighlightText - An RGB value that represents the highlighted // text color of the hex edit control. //----------------------------------------------------------------------- void SetHighlightTextColor(COLORREF crHighlightText); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current highlighted text // color for the hex edit control. // Returns: // An RGB value that represents the current highlighted text color // for the hex edit control. //----------------------------------------------------------------------- COLORREF GetHighlightTextColor(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the highlight background color for // the hex edit control. // Parameters: // crHighlight - An RGB value that represents the highlight background // color of the hex edit control. //----------------------------------------------------------------------- void SetHighlightBackColor(COLORREF crHighlight); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current highlight background // color for the hex edit control. // Returns: // An RGB value that represents the current highlight background // color for the hex edit control. //----------------------------------------------------------------------- COLORREF GetHighlightBackColor(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the disabled highlight text color for // the hex edit control. // Parameters: // crDisabledHighlightText - An RGB value that represents the disabled // highlight text color of the hex edit control. //----------------------------------------------------------------------- void SetDisabledHighlightTextColor(COLORREF crDisabledHighlightText); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current disabled highlight // text color for the hex edit control. // Returns: // An RGB value that represents the current disabled highlight text color // for the hex edit control. //----------------------------------------------------------------------- COLORREF GetDisabledHighlightTextColor(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the disabled highlight background // color for the hex edit control. // Parameters: // crDisabledHighlight - An RGB value that represents the disabled // highlight background color of the hex edit // control. //----------------------------------------------------------------------- void SetDisabledHighlightBackColor(COLORREF crDisabledHighlight); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the current disabled highlight // background color for the hex edit control. // Returns: // An RGB value that represents 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(); //----------------------------------------------------------------------- // Summary: // This member function sets the font used by the hex edit control. // Parameters: // pFont - Points to a valid CFont object. // pLogFont - Points to a valid LOGFONT structure. //----------------------------------------------------------------------- void SetHexFont(CFont* pFont); void SetHexFont(LOGFONT* pLogFont); // //----------------------------------------------------------------------- // Summary: // This member function enables or disables a flashing screen caret. // Parameters: // bEnable - true to enable caret, false to disable. //----------------------------------------------------------------------- void EnableCaret(bool bEnable); //----------------------------------------------------------------------- // Summary: // This member function enables or disables a vertical and horizontal scroll // bar display. // Parameters: // bVertical - true to display vertical scroll bar. // bHorizontal - true to display horizontal scroll bar. //----------------------------------------------------------------------- void EnableScrollBars(bool bVertical, bool bHorizontal); //----------------------------------------------------------------------- // Summary: // Call this member function to set the base address for the hex edit // control. // Parameters: // dwBase - DWORD value that represents the base address. // Returns: // A DWORD value. //----------------------------------------------------------------------- DWORD SetAddressBase(DWORD dwBase); //----------------------------------------------------------------------- // Summary: // Call this method to extract the data in the hex edit control. // Parameters: // pData - Pointer to the buffer that will be receiving the data. // nBufferLength - Length of the target data buffer. // Returns: // The length of the data. //----------------------------------------------------------------------- int GetData(LPBYTE pData, int nBufferLength); //----------------------------------------------------------------------- // Summary: // Call this member function to initialize the hex edit control with data // specified by 'pData'. // Parameters: // 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. //----------------------------------------------------------------------- void SetData(LPBYTE pData, int nLength, int nMaxLength = 0); //----------------------------------------------------------------------- // 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. // Parameters: // bVal - The new value for this setting. // Returns: // The previous value. //----------------------------------------------------------------------- bool SetAllowDeletes(bool bVal = true); //----------------------------------------------------------------------- // Summary: // This member function retrieves the current value of the Allow Deletes // setting. // See Also: SetAllowDeletes // Returns: // true if the Allow Deletes setting is enabled, or false if it is disabled. //----------------------------------------------------------------------- bool GetAllowDeletes() const; //----------------------------------------------------------------------- // Summary: // Call this member function to get the size of the current selection. // Input: // nSelStart - Reference to an integer that will receive the position of the first character in the current selection. // nSelEnd - Reference to an integer that will receive the position of the first nonselected character past the end of the current selection // Returns: // A CSize object. //----------------------------------------------------------------------- CSize GetSel(); void GetSel(int& nSelStart, int& nSelEnd); // //----------------------------------------------------------------------- // Summary: // Call this member function to set the current selection. // Parameters: // nSelStart - Represents the position of the first character in the selection. // nSelEnd - Represents the position of the last character in the selection. //----------------------------------------------------------------------- void SetSel(int nSelStart, int nSelEnd); //----------------------------------------------------------------------- // Summary: // Call this member function to set the number of bytes per row. // Parameters: // nBytePerRow - Represents the number of bytes to display. //----------------------------------------------------------------------- void SetBPR(int nBytePerRow); //----------------------------------------------------------------------- // Summary: // Call this member function to set the display options for the hex edit // control. // Parameters: // 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. //----------------------------------------------------------------------- void SetOptions(BOOL bShowAddress, BOOL bShowHex, BOOL bShowAscii, BOOL bAddressIsWide); //----------------------------------------------------------------------- // Summary: // Call this member function to determine if the control in readonly state. // Returns: // TRUE if the control is in a ReadOnly state, FALSE otherwise. //----------------------------------------------------------------------- BOOL IsReadOnly() const; //----------------------------------------------------------------------- // Summary: // This method is called when user change text. //----------------------------------------------------------------------- virtual void OnChange(); protected: //{{AFX_CODEJOCK_PRIVATE DECLARE_MESSAGE_MAP() //{{AFX_VIRTUAL(CXTPHexEdit) virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //}}AFX_VIRTUAL //{{AFX_MSG(CXTPHexEdit) afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnPaint(); afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/); afx_msg void OnDraw(CDC* pDC); 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 //}}AFX_CODEJOCK_PRIVATE private: 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); public: 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. }; ////////////////////////////////////////////////////////////////////// AFX_INLINE UINT CXTPHexEdit::OnGetDlgCode() { return DLGC_WANTALLKEYS; } AFX_INLINE void CXTPHexEdit::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 CXTPHexEdit::SetBPR(int nBytePerRow) { m_nBytePerRow = nBytePerRow; m_bUpdate = TRUE; RepositionCaret(m_nCurrentAddress); } AFX_INLINE BOOL CXTPHexEdit::IsSelected() { return m_nSelStart != 0xffffffff; } AFX_INLINE CSize CXTPHexEdit::GetSel() { return CSize(m_nSelStart, m_nSelEnd); } AFX_INLINE void CXTPHexEdit::SetBackColor(COLORREF crBack) { m_crBack = crBack; } AFX_INLINE void CXTPHexEdit::SetTextColor(COLORREF crText) { m_crText = crText; } AFX_INLINE void CXTPHexEdit::SetDisabledBackColor(COLORREF crDisabledBack) { m_crDisabledBack = crDisabledBack; } AFX_INLINE void CXTPHexEdit::SetDisabledTextColor(COLORREF crDisabledText) { m_crDisabledText = crDisabledText; } AFX_INLINE void CXTPHexEdit::SetHighlightTextColor(COLORREF crHighlightText) { m_crHighlightText = crHighlightText; } AFX_INLINE void CXTPHexEdit::SetHighlightBackColor(COLORREF crHighlightBack) { m_crHighlightBack = crHighlightBack; } AFX_INLINE void CXTPHexEdit::SetDisabledHighlightTextColor(COLORREF crDisabledHighlightText) { m_crDisabledHighlightText = crDisabledHighlightText; } AFX_INLINE void CXTPHexEdit::SetDisabledHighlightBackColor(COLORREF crDisabledHighlightBack) { m_crDisabledHighlightBack = crDisabledHighlightBack; } AFX_INLINE COLORREF CXTPHexEdit::GetBackColor() { return m_crBack; } AFX_INLINE COLORREF CXTPHexEdit::GetTextColor() { return m_crText; } AFX_INLINE COLORREF CXTPHexEdit::GetDisabledBackColor() { return m_crDisabledBack; } AFX_INLINE COLORREF CXTPHexEdit::GetDisabledTextColor() { return m_crDisabledText; } AFX_INLINE COLORREF CXTPHexEdit::GetHighlightTextColor() { return m_crHighlightText; } AFX_INLINE COLORREF CXTPHexEdit::GetHighlightBackColor() { return m_crHighlightBack; } AFX_INLINE COLORREF CXTPHexEdit::GetDisabledHighlightTextColor() { return m_crDisabledHighlightText; } AFX_INLINE COLORREF CXTPHexEdit::GetDisabledHighlightBackColor() { return m_crDisabledHighlightBack; } AFX_INLINE void CXTPHexEdit::EnableCaret(bool bEnable) { m_bShowCaret = bEnable; } AFX_INLINE bool CXTPHexEdit::SetAllowDeletes(bool bVal) { const bool bOldVal = m_bAllowDeletes; m_bAllowDeletes = bVal; return bOldVal; } AFX_INLINE bool CXTPHexEdit::GetAllowDeletes() const { return m_bAllowDeletes; } #endif // #if !defined(__XTPHEXEDIT_H__)