⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bcgpeditctrl.h

📁 关于远程网络监视程序的源码
💻 H
📖 第 1 页 / 共 4 页
字号:
};

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 + -