xref: /MusicPlayer2/MusicPlayer2/ScintillaEditView.h (revision 8af74909132ed5e696cb05b6689ae4baf14c1c96)
1*8af74909SZhong Yang #pragma once
2*8af74909SZhong Yang 
3*8af74909SZhong Yang #include "../scintilla/include/SciLexer.h"
4*8af74909SZhong Yang #include "../scintilla/include/Scintilla.h"
5*8af74909SZhong Yang 
6*8af74909SZhong Yang // CScintillaEditView 视图
7*8af74909SZhong Yang 
8*8af74909SZhong Yang #define SCINTILLA_MARGIN_LINENUMBER 0
9*8af74909SZhong Yang #define MARGIN_FOLD_INDEX 1
10*8af74909SZhong Yang 
11*8af74909SZhong Yang class CScintillaEditView : public CView
12*8af74909SZhong Yang {
13*8af74909SZhong Yang 	DECLARE_DYNCREATE(CScintillaEditView)
14*8af74909SZhong Yang 
15*8af74909SZhong Yang protected:
16*8af74909SZhong Yang 	CScintillaEditView();           // 动态创建所使用的受保护的构造函数
17*8af74909SZhong Yang 	virtual ~CScintillaEditView();
18*8af74909SZhong Yang 
19*8af74909SZhong Yang public:
20*8af74909SZhong Yang     struct KeepCurrentLine
21*8af74909SZhong Yang     {
22*8af74909SZhong Yang         KeepCurrentLine(CScintillaEditView* view)
23*8af74909SZhong Yang             : m_view(view)
24*8af74909SZhong Yang         {
25*8af74909SZhong Yang             //保存当前行
26*8af74909SZhong Yang             current_line = m_view->GetFirstVisibleLine();
27*8af74909SZhong Yang         }
28*8af74909SZhong Yang         ~KeepCurrentLine()
29*8af74909SZhong Yang         {
30*8af74909SZhong Yang             //恢复当前行
31*8af74909SZhong Yang             m_view->SetFirstVisibleLine(current_line);
32*8af74909SZhong Yang         }
33*8af74909SZhong Yang 
34*8af74909SZhong Yang         CScintillaEditView* m_view{};
35*8af74909SZhong Yang         int current_line{};
36*8af74909SZhong Yang     };
37*8af74909SZhong Yang 
38*8af74909SZhong Yang 	virtual void OnDraw(CDC* pDC);      // 重写以绘制该视图
39*8af74909SZhong Yang #ifdef _DEBUG
40*8af74909SZhong Yang 	virtual void AssertValid() const;
41*8af74909SZhong Yang #ifndef _WIN32_WCE
42*8af74909SZhong Yang 	virtual void Dump(CDumpContext& dc) const;
43*8af74909SZhong Yang #endif
44*8af74909SZhong Yang #endif
45*8af74909SZhong Yang 
46*8af74909SZhong Yang     void SetText(const wstring& text);
47*8af74909SZhong Yang     void GetText(wstring& text);
48*8af74909SZhong Yang     const wchar_t* GetText(int& size);      //获取文本(返回字符串指针,需要自行释放内存)
49*8af74909SZhong Yang     const char* GetTextUtf8(int& size);      //获取UTF8格式文本(返回字符串指针,需要自行释放内存)
50*8af74909SZhong Yang     void SetFontFace(const wchar_t* font_face);
51*8af74909SZhong Yang     void SetFontSize(int font_size);
52*8af74909SZhong Yang     void SetTabSize(int tab_size);
53*8af74909SZhong Yang     void SetSel(int start, int end, const wstring& edit_str);        //设置选中范围(位置以字符为单位)
54*8af74909SZhong Yang     void GetSel(int& start, int& end);      //获取选中范围(位置以字符为单位)
55*8af74909SZhong Yang     void SetBackgroundColor(COLORREF color);
56*8af74909SZhong Yang     void SetReadOnly(bool read_only);
57*8af74909SZhong Yang     bool IsReadOnly();
58*8af74909SZhong Yang 
59*8af74909SZhong Yang     void Undo();
60*8af74909SZhong Yang     void Redo();
61*8af74909SZhong Yang     void Cut();
62*8af74909SZhong Yang     void Copy();
63*8af74909SZhong Yang     void Paste();
64*8af74909SZhong Yang     void SelectAll();
65*8af74909SZhong Yang     void EmptyUndoBuffer();     //清空撤销缓存
66*8af74909SZhong Yang 
67*8af74909SZhong Yang     void SetWordWrap(bool word_wrap);
68*8af74909SZhong Yang 
69*8af74909SZhong Yang     bool IsEditChangeNotificationEnable();
70*8af74909SZhong Yang 
71*8af74909SZhong Yang     bool CanUndo();
72*8af74909SZhong Yang     bool CanRedo();
73*8af74909SZhong Yang     bool CanPaste();
74*8af74909SZhong Yang     bool IsSelectionEmpty();
75*8af74909SZhong Yang     bool IsModified();
76*8af74909SZhong Yang     void SetSavePoint();
77*8af74909SZhong Yang 
78*8af74909SZhong Yang     void SetLineNumberWidth(int width);
79*8af74909SZhong Yang     void ShowLineNumber(bool show);
80*8af74909SZhong Yang     void SetLineNumberColor(COLORREF color);
81*8af74909SZhong Yang 
82*8af74909SZhong Yang     int GetZoom();
83*8af74909SZhong Yang     void SetZoom(int zoom);
84*8af74909SZhong Yang 
85*8af74909SZhong Yang     enum eEolMode
86*8af74909SZhong Yang     {
87*8af74909SZhong Yang         EOL_CRLF,
88*8af74909SZhong Yang         EOL_CR,
89*8af74909SZhong Yang         EOL_LF
90*8af74909SZhong Yang     };
91*8af74909SZhong Yang     void SetEolMode(eEolMode eolMode);
92*8af74909SZhong Yang     eEolMode GetEolMode();
93*8af74909SZhong Yang 
94*8af74909SZhong Yang     void ConvertEolMode(eEolMode eolMode);
95*8af74909SZhong Yang 
96*8af74909SZhong Yang     void SetViewEol(bool show);
97*8af74909SZhong Yang 
98*8af74909SZhong Yang     int GetFirstVisibleLine();
99*8af74909SZhong Yang     void SetFirstVisibleLine(int line);
100*8af74909SZhong Yang 
101*8af74909SZhong Yang     //语法解析
102*8af74909SZhong Yang     void SetLexer(int lexer);
103*8af74909SZhong Yang     void SetKeywords(int id, const char* keywords);
104*8af74909SZhong Yang     void SetSyntaxColor(int id, COLORREF color);
105*8af74909SZhong Yang     void SetSyntaxFontStyle(int id, bool bold, bool italic);
106*8af74909SZhong Yang     void SetLexerNormalText();
107*8af74909SZhong Yang 
108*8af74909SZhong Yang     static eEolMode JudgeEolMode(const wstring& str);
109*8af74909SZhong Yang     static int CharactorPosToBytePos(int pos, const wchar_t* str, size_t size);     //将字符的位置转换成字节的位置(使用UTF8编码)
110*8af74909SZhong Yang     static int BytePosToCharactorPos(int pos, const char* str, size_t size);     //将字节的位置转换成字符的位置(使用UTF8编码)
111*8af74909SZhong Yang 
112*8af74909SZhong Yang     void SetContextMenu(CMenu* pMenu, CWnd* pMenuOwner);
113*8af74909SZhong Yang 
114*8af74909SZhong Yang private:
115*8af74909SZhong Yang 
116*8af74909SZhong Yang private:
117*8af74909SZhong Yang     bool m_change_notification_enable = true;      //如果为false,则不响应文本改变消息
118*8af74909SZhong Yang     int m_line_number_width = 36;
119*8af74909SZhong Yang     COLORREF m_line_number_color{};
120*8af74909SZhong Yang     COLORREF m_background_color{ RGB(255,255,255) };
121*8af74909SZhong Yang 
122*8af74909SZhong Yang     CMenu* m_pMenu{};
123*8af74909SZhong Yang     CWnd* m_pContextMenuOwner{};
124*8af74909SZhong Yang 
125*8af74909SZhong Yang protected:
126*8af74909SZhong Yang 	DECLARE_MESSAGE_MAP()
127*8af74909SZhong Yang     virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
128*8af74909SZhong Yang public:
129*8af74909SZhong Yang     afx_msg void OnPaint();
130*8af74909SZhong Yang     virtual void PreSubclassWindow();
131*8af74909SZhong Yang     virtual void OnInitialUpdate();
132*8af74909SZhong Yang     afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
133*8af74909SZhong Yang };
134*8af74909SZhong Yang 
135*8af74909SZhong Yang 
136