xref: /MusicPlayer2/MusicPlayer2/ScintillaEditView.h (revision 61ef93ee18b51a83cdb07217a9fbaf099a57c9d2)
18af74909SZhong Yang #pragma once
28af74909SZhong Yang 
38af74909SZhong Yang #include "../scintilla/include/SciLexer.h"
48af74909SZhong Yang #include "../scintilla/include/Scintilla.h"
58af74909SZhong Yang 
68af74909SZhong Yang // CScintillaEditView 视图
78af74909SZhong Yang 
88af74909SZhong Yang #define SCINTILLA_MARGIN_LINENUMBER 0
98af74909SZhong Yang #define MARGIN_FOLD_INDEX 1
108af74909SZhong Yang 
118af74909SZhong Yang class CScintillaEditView : public CView
128af74909SZhong Yang {
138af74909SZhong Yang 	DECLARE_DYNCREATE(CScintillaEditView)
148af74909SZhong Yang 
158af74909SZhong Yang protected:
168af74909SZhong Yang 	CScintillaEditView();           // 动态创建所使用的受保护的构造函数
178af74909SZhong Yang 	virtual ~CScintillaEditView();
188af74909SZhong Yang 
198af74909SZhong Yang public:
208af74909SZhong Yang     struct KeepCurrentLine
218af74909SZhong Yang     {
228af74909SZhong Yang         KeepCurrentLine(CScintillaEditView* view)
238af74909SZhong Yang             : m_view(view)
248af74909SZhong Yang         {
258af74909SZhong Yang             //保存当前行
268af74909SZhong Yang             current_line = m_view->GetFirstVisibleLine();
278af74909SZhong Yang         }
288af74909SZhong Yang         ~KeepCurrentLine()
298af74909SZhong Yang         {
308af74909SZhong Yang             //恢复当前行
318af74909SZhong Yang             m_view->SetFirstVisibleLine(current_line);
328af74909SZhong Yang         }
338af74909SZhong Yang 
348af74909SZhong Yang         CScintillaEditView* m_view{};
358af74909SZhong Yang         int current_line{};
368af74909SZhong Yang     };
378af74909SZhong Yang 
388af74909SZhong Yang 	virtual void OnDraw(CDC* pDC);      // 重写以绘制该视图
398af74909SZhong Yang #ifdef _DEBUG
408af74909SZhong Yang 	virtual void AssertValid() const;
418af74909SZhong Yang #ifndef _WIN32_WCE
428af74909SZhong Yang 	virtual void Dump(CDumpContext& dc) const;
438af74909SZhong Yang #endif
448af74909SZhong Yang #endif
458af74909SZhong Yang 
468af74909SZhong Yang     void SetText(const wstring& text);
478af74909SZhong Yang     void GetText(wstring& text);
488af74909SZhong Yang     const wchar_t* GetText(int& size);      //获取文本(返回字符串指针,需要自行释放内存)
498af74909SZhong Yang     const char* GetTextUtf8(int& size);      //获取UTF8格式文本(返回字符串指针,需要自行释放内存)
508af74909SZhong Yang     void SetFontFace(const wchar_t* font_face);
518af74909SZhong Yang     void SetFontSize(int font_size);
528af74909SZhong Yang     void SetTabSize(int tab_size);
538af74909SZhong Yang     void SetSel(int start, int end, const wstring& edit_str);        //设置选中范围(位置以字符为单位)
548af74909SZhong Yang     void GetSel(int& start, int& end);      //获取选中范围(位置以字符为单位)
558af74909SZhong Yang     void SetBackgroundColor(COLORREF color);
568af74909SZhong Yang     void SetReadOnly(bool read_only);
578af74909SZhong Yang     bool IsReadOnly();
588af74909SZhong Yang 
598af74909SZhong Yang     void Undo();
608af74909SZhong Yang     void Redo();
618af74909SZhong Yang     void Cut();
628af74909SZhong Yang     void Copy();
638af74909SZhong Yang     void Paste();
648af74909SZhong Yang     void SelectAll();
658af74909SZhong Yang     void EmptyUndoBuffer();     //清空撤销缓存
668af74909SZhong Yang 
678af74909SZhong Yang     void SetWordWrap(bool word_wrap);
688af74909SZhong Yang 
698af74909SZhong Yang     bool IsEditChangeNotificationEnable();
708af74909SZhong Yang 
718af74909SZhong Yang     bool CanUndo();
728af74909SZhong Yang     bool CanRedo();
738af74909SZhong Yang     bool CanPaste();
748af74909SZhong Yang     bool IsSelectionEmpty();
758af74909SZhong Yang     bool IsModified();
768af74909SZhong Yang     void SetSavePoint();
778af74909SZhong Yang 
788af74909SZhong Yang     void SetLineNumberWidth(int width);
798af74909SZhong Yang     void ShowLineNumber(bool show);
808af74909SZhong Yang     void SetLineNumberColor(COLORREF color);
818af74909SZhong Yang 
828af74909SZhong Yang     int GetZoom();
838af74909SZhong Yang     void SetZoom(int zoom);
848af74909SZhong Yang 
858af74909SZhong Yang     enum eEolMode
868af74909SZhong Yang     {
878af74909SZhong Yang         EOL_CRLF,
888af74909SZhong Yang         EOL_CR,
898af74909SZhong Yang         EOL_LF
908af74909SZhong Yang     };
918af74909SZhong Yang     void SetEolMode(eEolMode eolMode);
928af74909SZhong Yang     eEolMode GetEolMode();
938af74909SZhong Yang 
948af74909SZhong Yang     void ConvertEolMode(eEolMode eolMode);
958af74909SZhong Yang 
968af74909SZhong Yang     void SetViewEol(bool show);
978af74909SZhong Yang 
988af74909SZhong Yang     int GetFirstVisibleLine();
998af74909SZhong Yang     void SetFirstVisibleLine(int line);
1008af74909SZhong Yang 
1018af74909SZhong Yang     //语法解析
1028af74909SZhong Yang     void SetLexer(int lexer);
1038af74909SZhong Yang     void SetKeywords(int id, const char* keywords);
1048af74909SZhong Yang     void SetSyntaxColor(int id, COLORREF color);
1058af74909SZhong Yang     void SetSyntaxFontStyle(int id, bool bold, bool italic);
1068af74909SZhong Yang     void SetLexerNormalText();
1078af74909SZhong Yang 
1088af74909SZhong Yang     static eEolMode JudgeEolMode(const wstring& str);
1098af74909SZhong Yang     static int CharactorPosToBytePos(int pos, const wchar_t* str, size_t size);     //将字符的位置转换成字节的位置(使用UTF8编码)
1108af74909SZhong Yang     static int BytePosToCharactorPos(int pos, const char* str, size_t size);     //将字节的位置转换成字符的位置(使用UTF8编码)
1118af74909SZhong Yang 
1128af74909SZhong Yang     void SetContextMenu(CMenu* pMenu, CWnd* pMenuOwner);
1138af74909SZhong Yang 
114*61ef93eeSZhong Yang     void SetLexerLyric();       //设置LRC语法解析
115*61ef93eeSZhong Yang 
1168af74909SZhong Yang private:
1178af74909SZhong Yang 
1188af74909SZhong Yang private:
1198af74909SZhong Yang     bool m_change_notification_enable = true;      //如果为false,则不响应文本改变消息
1208af74909SZhong Yang     int m_line_number_width = 36;
1218af74909SZhong Yang     COLORREF m_line_number_color{};
1228af74909SZhong Yang     COLORREF m_background_color{ RGB(255,255,255) };
1238af74909SZhong Yang 
1248af74909SZhong Yang     CMenu* m_pMenu{};
1258af74909SZhong Yang     CWnd* m_pContextMenuOwner{};
1268af74909SZhong Yang 
1278af74909SZhong Yang protected:
1288af74909SZhong Yang 	DECLARE_MESSAGE_MAP()
1298af74909SZhong Yang     virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
1308af74909SZhong Yang public:
1318af74909SZhong Yang     afx_msg void OnPaint();
1328af74909SZhong Yang     virtual void PreSubclassWindow();
1338af74909SZhong Yang     virtual void OnInitialUpdate();
1348af74909SZhong Yang     afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
1358af74909SZhong Yang };
1368af74909SZhong Yang 
1378af74909SZhong Yang 
138