📄 bcgpeditctrl.h
字号:
};
class BCGCBPRODLLEXPORT CBCGPEditCtrl : public CWnd
{
friend class CBCGPIntelliSenseWnd;
friend class CBCGPIntelliSenseLB;
DECLARE_DYNAMIC(CBCGPEditCtrl)
// Construction
public:
CBCGPEditCtrl();
// Attributes
public:
CToolTipCtrl m_wndToolTip;
CString m_strWordDelimeters;
CString m_strSpecialDelimiters;
CString m_strNonSelectableChars;
CString m_strIntelliSenseChars;
CString m_strIndentChars;
CString m_strContinueStringSymbols;
// Options
COLORREF m_clrBack;
COLORREF m_clrText;
COLORREF m_clrBackSelActive;
COLORREF m_clrBackSelInActive;
COLORREF m_clrTextSelActive;
COLORREF m_clrTextSelInActive;
BOOL m_bReplaceTabsAndEOLOnCopy;
int m_nLineVertSpacing;
int m_nLeftMarginWidth;
int m_nLineNumbersMarginWidth;
int m_nOutlineMarginWidth;
int m_nIndentSize;
int m_nTabSize;
int m_nScrollRightOffset; // for how many symbols to scroll the text when scrolling
// right - in percents from the window width
int m_nScrollLeftOffset; // for how many symbols to scroll the text when scrolling
// left
UINT m_nScrollTimeOut;
BOOL m_bEnableWholeTextCopy; // Allow to copy the whole buffer to clipboard
UINT m_nDlgCode;
BOOL m_bDefaultIndent;
// graphical symbols support
CList<BCGP_EDIT_SYM_DEF, BCGP_EDIT_SYM_DEF&> m_lstSymDefs;
BOOL m_bEnableSymSupport;
protected:
CString m_strBuffer;
BOOL m_bIsModified;
int m_nMaxScrollWidth;
BOOL m_bReadOnly;
int m_nLastKey;
int m_nPrevKey;
HFONT m_hFont;
int m_nLineHeight;
int m_nMaxCharWidth;
int m_nAveCharWidth;
CRect m_rectText;
int m_nCurrOffset;
CPoint m_ptCaret;
int m_iStartSel;
int m_iEndSel;
CPoint m_ptStartBlockSel;
CPoint m_ptEndBlockSel;
BOOL m_bAltPressedForBlockSel;
BOOL m_bBlockSelectionMode;
BOOL m_bEnableLineNumbersMargin;
BOOL m_bEnableOutlineMargin;
int m_nScrollOffsetHorz;
int m_nScrollOffsetVert;
int m_nScrollHiddenVert;
int m_nTopVisibleOffset;
int m_nTotalLines;
int m_nHiddenLines;
CSize m_szTotalScroll;
int m_nCurRow;
int m_nCurColumn;
int m_nSavedOffset;
int m_nDropOffset;
CPoint m_ptSavedBlockCaretOffset;
int m_nLastSelOffset; // to prevent flashing on MouseMove + sel
int m_nLastMaxColumn;
BOOL m_bDragTextMode;
int m_nScrollTimer;
int m_nTabLogicalSize; // size of the tab in logical units
BOOL m_bKeepTabs;
CMap<TCHAR, TCHAR&, int, int> m_mapCharWidth;
CBCGPEditCtrlDropTarget m_DropTarget;
// tooltips
BOOL m_bEnableToolTips;
CString m_strLastDisplayedToolTip;
BOOL m_bToolTipCleared;
// intellisense
CBCGPIntelliSenseWnd* m_pIntelliSenseWnd;
CImageList* m_pIntelliSenseImgList;
CFont* m_pIntelliSenseLBFont;
BOOL m_bIntelliSenseMode;
// undo
CList <BCGP_EDIT_UNDO_ACTION*, BCGP_EDIT_UNDO_ACTION*> m_lstUndoActions;
int m_nUndoBufferSize;
POSITION m_posUndoBuffer;
POSITION m_posDocSavedUndoPos;
DWORD m_dwLastUndoReason;
BOOL m_bUndoCharMode; // TRUE - save single chars in each node, FALSE - save words
BOOL m_bEOL;
BOOL m_bBOL;
BOOL m_bIsLastActionUndo;
// syntax coloring
CMap <CString, LPCTSTR, BCGP_EDIT_SYNTAX_COLOR, BCGP_EDIT_SYNTAX_COLOR&> m_mapWordColors;
CList <BCGP_EDIT_COLOR_BLOCK, BCGP_EDIT_COLOR_BLOCK&> m_lstColorBlocks;
COLORREF m_clrOpenBlockFore;
COLORREF m_clrOpenBlockBk;
int m_nOpenBlockOffset;
// markers
CObList m_lstMarkers;
// graphical symbols support
CImageList* m_pSymbolsImgList;
// outlining
CBCGPOutlineNode m_OutlineNodes;
CBCGPOutlineNode* m_pOutlineNodeCurr;
CBCGPOutlineParser* m_pOutlineParser;
BOOL m_bEnableOutlining;
BOOL m_bAutoOutlining;
int m_nMaxHintCharsNum;
// print
HFONT m_hPrinterFont; // if NULL, mirror display font
HFONT m_hMirrorFont; // font object used when mirroring
private:
BOOL m_bIntelliSenseSupport;
static BOOL m_bOvrMode; // overwrite mode
// Operations
public:
int GetCurRow () const
{
return RowFromOffset (m_nCurrOffset); //m_nCurRow;
}
int GetCurColumn () const
{
return m_nCurColumn;
}
int GetCurOffset () const
{
return m_nCurrOffset;
}
int GetLineCount () const
{
return m_nTotalLines;
}
// -------
// Options
// -------
int GetLineHeight () const
{
return m_nLineHeight;
}
void SetReadOnly (BOOL bReadOnly = TRUE)
{
m_bReadOnly = bReadOnly;
}
BOOL IsReadOnly () const
{
return m_bReadOnly;
}
// ----------------
// File operations:
// ----------------
BOOL OpenFile (const CString& strFileName);
BOOL OpenFile (CFile& file);
BOOL SaveFile (const CString& strFileName);
BOOL SaveFile (CFile& file);
virtual BOOL IsModified () const
{
return m_bIsModified &&
(m_posUndoBuffer != NULL &&
m_posUndoBuffer != m_posDocSavedUndoPos ||
m_posUndoBuffer == NULL && m_bEOL);
}
// Export buffer
HGLOBAL ExportBuffer (LPCTSTR lpszText, int nTextLen, BOOL bReplaceTabs = TRUE,
BOOL bReplaceEOL = TRUE);
// ------------------
// Scrolling methods:
// ------------------
BOOL ScrollText (BOOL bDirection);
BOOL ScrollDown (int fnBar, BOOL bRedrawOnScroll);
BOOL ScrollUp (int fnBar, BOOL bRedrawOnScroll);
BOOL ScrollPageDown (int fnBar, BOOL bRedrawOnScroll);
BOOL ScrollPageUp (int fnBar, BOOL bRedrawOnScroll);
BOOL ScrollHome (int fnBar, BOOL bRedrawOnScroll);
BOOL ScrollEnd (int fnBar, BOOL bRedrawOnScroll);
void UpdateScrollBars ();
// ------------------
// Searching methods:
// ------------------
void FindWordStartFinish (int nCaretOffset, const CString& strBuffer,
int& nStartOffset, int& nEndOffset, BOOL bSkipSpaces = TRUE) const;
BOOL GetWordFromPoint (CPoint pt, CString& strWord);
BOOL GetWordFromOffset (int nOffset, CString& strWord);
int HitTest (CPoint& pt, BOOL bNormalize = FALSE, BOOL bIgnoreTextBounds = FALSE);
BOOL OffsetToPoint (int nOffset, CPoint& pt, LPPOINT ptRowColumn = NULL,
LPINT pnScrollOffset = NULL);
int GetNumOfCharsInText (const CString& strText, TCHAR ch);
int GetNumOfCharsInText (int nStart, int nEnd, TCHAR ch, BOOL bSkipHidden = FALSE) const;
//-----------------
// Syntax coloring:
//-----------------
void SetWordColor (CString strWord,
COLORREF clrFrgnd = -1,
COLORREF clrBkgnd = -1,
BOOL bCaseSensitive = TRUE);
BOOL RemoveWordFromColorTable (CString strWord);
void RemoveAllWordsFromColorTable ();
POSITION SetBlockColor (CString strBlockOpen, CString strBlockClose,
BOOL bWholeText = FALSE,
COLORREF clrFrgnd = (COLORREF) -1,
COLORREF clrBkgnd = (COLORREF) -1);
BOOL RemoveBlockColor (POSITION posBlock);
void RemoveAllBlocks ();
BOOL IsInBlock (int nPos, TCHAR chOpen, TCHAR chClose, int& nBlockStart, int& nBlockEnd);
// -------------
// Intellisense:
// -------------
inline BOOL IsIntelliSenseEnabled() const
{
return m_bIntelliSenseSupport;
}
void SetIntelliSenseImgList (CImageList* pImageList, BOOL bAutoDestroy = FALSE)
{
m_pIntelliSenseImgList = pImageList;
}
CImageList* GetIntelliSenseImgList () const
{
return m_pIntelliSenseImgList;
}
void SetIntelliSenseLBFont (CFont* pFont)
{
m_pIntelliSenseLBFont = pFont;
}
BOOL EnableIntelliSense(BOOL bFl = TRUE);
CFont* GetIntelliSenseLBFont () const
{
return m_pIntelliSenseLBFont;
}
void SetIntelliSenseWnd (CBCGPIntelliSenseWnd* pWnd)
{
m_pIntelliSenseWnd = pWnd;
}
// ------------------
// Selection methods:
// ------------------
void GetSel (int& nStartChar, int& nEndChar) const;
BOOL IsPointInSelectionRect (CPoint pt);
BOOL SetCaret (int nOffset, BOOL bScrollToCaret = TRUE, BOOL bRedrawOnScroll = TRUE);
void SelectLine(int nLine, BOOL bNoScroll = FALSE, BOOL bRedraw = TRUE);
void SelectLineRange(int nFromLine, int nToLine, BOOL bNoScroll = FALSE, BOOL bRedraw = TRUE);
// --------------
// Insert/delete:
// --------------
BOOL DeleteSelectedText (BOOL bRedraw = TRUE, BOOL bCopyToClipboard = FALSE,
BOOL bForceNextUndo = FALSE);
BOOL DeleteText (int nStartOffset, int nEndOffset, BOOL bRedraw = FALSE);
BOOL IndentText (int nStartOffset, int nEndOffset, BOOL bForward,
BOOL bBlockSelectionMode, BOOL bSelectText,
CStringArray& arInsDelText, BOOL bUndoMode);
const CString& GetText () const {return m_strBuffer;}
TCHAR GetCharAt (int nPos, BOOL bCheckForErros = TRUE) const
{
if (bCheckForErros && (nPos < 0 || nPos >= m_strBuffer.GetLength ()))
{
return 0;
}
return m_strBuffer.GetAt (nPos);
}
// ----------
// Conversion
// ----------
void VirtToClient (CPoint& pt);
void ClientToVirt (CPoint& pt);
void VirtToClient (CRect& rect);
void ClientToVirt (CRect& rect);
// ---------
// Undo/Redo
// ---------
void EnableUndoCharMode (BOOL bEnable = TRUE) {m_bUndoCharMode = bEnable;}
void GetUndoActions(CDWordArray& dwaUAT) const;
void GetRedoActions(CDWordArray& dwaUAT) const;
// -----
// Print
// -----
void SetPrinterFont(CFont* pFont);
//----------------
// Tooltip Support
//----------------
void ShowContextTip();
void EnableToolTips (BOOL bEnable = TRUE);
void ToolTipPop ();
// -------------------------
// Graphical symbols support
// -------------------------
CImageList* GetSymImgList () const {return m_pSymbolsImgList;}
void SetSymImgList (CImageList* pImgList, BOOL bAutoDestroy = FALSE)
{
m_mapCharWidth.RemoveAll ();
m_pSymbolsImgList = pImgList;
if (m_pSymbolsImgList != NULL)
{
OnChangeFont (NULL);
}
}
//---------------
// Marker Support
//---------------
BOOL ToggleMarker (int nRow, DWORD dwMarkerType, LPVOID lpData = NULL,
BOOL bRedraw = TRUE, UINT unPriority = 0);
POSITION SetMarker (CBCGPEditMarker* pMarker, int nRow = -1, BOOL bRedraw = TRUE);
POSITION GetMarker (int nRow, CBCGPEditMarker** ppMarker, DWORD dwMarkerType);
BOOL SetMarkerData (int nRow, LPVOID lpData, DWORD dwMarkerType, BOOL bRedraw = TRUE);
void SetMarkerData (POSITION pos, DWORD dwData);
POSITION InsertMarker (CBCGPEditMarker* pMarker, BOOL bRedraw = TRUE);
void DeleteMarker (POSITION posMarker);
BOOL DeleteMarker (int nRow, DWORD dwMarkerType, BOOL bRedraw = TRUE);
void DeleteAllMarkers (DWORD dwMarkerType = (DWORD) -1, BOOL bRedraw = TRUE);
int DeleteMarkersInRangeByOffset (int nStart, int nEnd, DWORD dwMarkerType = (DWORD) -1, BOOL bRedraw = TRUE);
BOOL GoToNextMarker (DWORD dwMarkerType, BOOL bDirection = TRUE);
void GetMarkerListByType (CObList& lstMarkers, DWORD dwMarkerType) const;
void GetMarkersInRange (int nRowStart, CObList& lstMarkers,
DWORD dwMarkerType = (DWORD) -1, int nRowEnd = -1) const;
void GetMarkersInRangeByOffset (int nStart, int nEnd, CObList& lstMarkers,
DWORD dwMarkerType = (DWORD) -1) const;
CBCGPEditMarker* GetMarker (POSITION pos)
{
ASSERT_VALID (this);
return DYNAMIC_DOWNCAST (CBCGPEditMarker, m_lstMarkers.GetAt (pos));
}
const CObList& GetMarkerList () const
{
return m_lstMarkers;
}
void CleanUpMarkers ();
void RedrawMarkerArea (int nRow = -1, BOOL bFullLine = FALSE);
POSITION SetLineColorMarker (int nRow = -1, COLORREF clrFore = (DWORD)-1,
COLORREF clrBk = (DWORD) -1, BOOL bFullLine = TRUE,
int nLineCount = 0, DWORD dwMarkerType = g_dwBCGPEdit_LineColorMarker,
UINT unPriority = 0);
POSITION SetOffsetMarker (int nStart, int nEnd,
DWORD dwMarkerType = g_dwBCGPEdit_LineColorMarker,
UINT unPriority = 0) { return NULL; }
POSITION SetHiliteMarker (int nStart, int nEnd,
COLORREF clrFore = (DWORD)-1, COLORREF clrBk = (DWORD) -1,
DWORD dwMarkerType = g_dwBCGPEdit_HiliteMarker,
UINT unPriority = 2);
// ------------------
// Outlining Support:
// ------------------
void EnableOutlining (BOOL bEnable = TRUE)
{
m_bEnableOutlining = bEnable;
}
BOOL IsOutliningEnabled () const
{
return m_bEnableOutlining;
}
void EnableAutoOutlining (BOOL bEnable = TRUE)
{
m_bAutoOutlining = bEnable;
}
BOOL IsAutoOutliningEnabled () const
{
return m_bAutoOutlining;
}
void SetOutlineMargin (BOOL bShow = TRUE, int nMarginWidth = 20)
{
ASSERT (nMarginWidth >= 0);
m_bEnableOutlineMargin = bShow;
m_nOutlineMarginWidth = nMarginWidth;
RecalcLayout ();
SetCaret (m_nCurrOffset, TRUE, FALSE);
RedrawWindow ();
}
BOOL IsOutlineMarginVisible () const
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -