The CDataEdit
class is a standalone MFC edit control derived directly from CWnd
using a Unicode UTF-8 or UTF-16 text string that can be over a gigabyte. It provides editing of text in fixed or variable width fonts and supports undo/redo and printing. See CDataEdit
specific notes in the firstobject XML Editor release notes.
The source code for CDataEdit comes in the firstobject XML Editor with the Advanced CMarkup Developer License. |
To use CDataEdit
in your Visual Studio MFC project, just add DataEdit.cpp and DataEdit.h. Also you will likely need to add imm32.lib to your Project Settings -> Link -> General -> Object/Library modules due to Windows IME support.
Put a CDataEdit
member variable in a parent window class such as a dialog or view. Note that CDataEdit is not derived from MFC CEdit and does not necessarily support CEdit
methods. Here are some of the CDataEdit public methods:
BOOL Create( CWnd* pParentWnd, UINT nID, HFONT hFont = NULL ); BOOL CreateEditBox( CWnd* pParentWnd, UINT nID, HFONT hFont = NULL ); void SetSel( int nStartChar, int nEndChar, BOOL bNoScroll = FALSE ); void GetSel( int& nStartChar, int& nEndChar ) const; CString GetSelText(); int GetSelLength(); BOOL LocateWord( int& nStart, int& nEnd ); BOOL GoToLine( int nLine, int nCharPos = 0 ); BOOL FindOccurrence( CString csFindWhat, int& nStart, int& nEnd, int nFlags = 0 ); void ReplaceSel( CString csNewText, BOOL bRedraw = TRUE ); CString GetText() const; void SetText( CString& csText ); void ModifyText( CString& csText, BOOL bCanUndo = TRUE ); BOOL IsModified(); void SetUnmodified(); int Print( CDC* pDC, int nPage, CString csTitle = "" ); void GetLogFont( LOGFONT* pLF ); void SetLogFont( LOGFONT* pLF ); int GetTextHeight(); static void GetDefaultLogFont( LOGFONT* pLF ); BOOL CopyUTF8( CString csCopy ); void SetReadOnly( BOOL bReadOnly ); void SetMultiLine( BOOL bMultiLine ); BOOL IsReadOnly(); void SetGutter( BOOL nGutter ); void SetWordWrap( BOOL bWordWrap ); BOOL IsWordWrap(); void SetHorizontalTextOffset( int nOffset ); void SetVerticalTextOffset( int nOffset ); void SetBgColor( COLORREF clr ); void SetNormalTextColor( COLORREF clr ); void SetIndentStyle( int nIndentStyle ); BOOL CanCut(); BOOL CanCopy(); BOOL CanPaste(); BOOL CanUndo(); BOOL CanRedo();
When a document is loaded, the carriage return and linefeed characters are not modified to conform to any standard. CRLF (0x0d
0x0a
) pairs are considered to be a combined end of line code. This way, mixtures of UNIX and PC end of line styles do not cause concern.
The Print
method is used for printing a particular page and for paginating (nPage=0
). The following simple code can be used to support print and print preview in a CView
where the CDataEdit control is m_edit
.
void CMarkupEditorView::OnBeginPrinting( CDC* pDC, CPrintInfo* pInfo ) { // Paginate document CString csTitle = GetDocument()->GetPathName(); if ( csTitle.IsEmpty() ) csTitle = GetDocument()->GetTitle(); int nMaxPage = m_edit.Print( pDC, 0, csTitle ); pInfo->SetMinPage( 1 ); pInfo->SetMaxPage( nMaxPage ); } void CMarkupEditorView::OnPrint(CDC* pDC, CPrintInfo* pInfo) { m_edit.Print( pDC, pInfo->m_nCurPage ); }
At any given time, the text value is a simple string in the m_csText
member. Use SetText()
and GetText()
methods explicitly rather than GetWindowText
and SetWindowText
because Windows 95/98/ME place limits on text passing though WM_SETTEXT
. Use ModifyText
to change the value of the control such that Undo will undo the change (SetText
resets the Undo history).
The CDataEdit
source code comes with the Advanced CMarkup Developer product.
Ask for the full code of CDataEdit
Li Xiuhua 24-Sep-2006
I am very interested in your CMarkup, and I want to see your source code of CDataEdit Class. May I get it?