、首先,在ScintillaWnd.h頭文件中添加如下代碼
HMODULE m_hSciLexerDll;
如下圖:
2、在ScintillaWnd.cpp源文件的構造函數和析構函數中添加如下代碼
ScintillaWnd::ScintillaWnd() { m_hSciLexerDll=NULL; m_hSciLexerDll=LoadLibrary(_T("SciLexer.dll")); if (NULL==m_hSciLexerDll) { AfxMessageBox(_T("LoadLibrary SciLexer.dll failure...")); } }
這是構造函數
ScintillaWnd::~ScintillaWnd() { if (NULL !=m_hWnd) { DestroyWindow(); } if (m_hSciLexerDll !=NULL) { FreeLibrary(m_hSciLexerDll); } }
這是析構函數
3、為窗口類創建Create函數
打開類向導,選擇“ScintillaWnd”類,找到“虛函數”,找到“Create”函數,點擊“添加函數”。
Create函數
添加完“Create”函數,會自動生成一些代碼,這些代碼不需要改動,保持原樣就好。
4、為窗口類添加Init()函數,先在ScintillaWnd.h中添加下面的代碼
virtual void Init();
點擊圖中“小燈泡”,會提示你在ScintillaWnd.cpp文件中創建Init()函數,點擊創建。
在創建的Init()函數中添加如下代碼
void ScintillaWnd::Init() { // clear all text styles SendMessage(SCI_CLEARDOCUMENTSTYLE, 0, 0); // set the number of styling bits to 7 - the asp/html views need a lot of styling - default is 5 // If you leave the default you will see twiggle lines instead of ASP code SendMessage(SCI_SETSTYLEBITS, 7, 0); // set the display for indetation guides to on - this displays virtical dotted lines from the beginning of // a code block to the end of the block SendMessage(SCI_SETINDENTATIONGUIDES, TRUE, 0); // set tabwidth to 4 SendMessage(SCI_SETTABWIDTH, 4, 0); // set indention to 4 SendMessage(SCI_SETINDENT, 4, 0); // set the caret blinking time to 400 milliseconds SendMessage(SCI_SETCARETPERIOD, 400, 0); // display fold margins SetFold(); // hide SelectionMargin SendMessage(SCI_SETMARGINWIDTHN, 1, 0); // set markersymbol for marker type 0 - bookmark SendMessage(SCI_MARKERDEFINE, 0, SC_MARK_CIRCLE); // set the forground color for some styles SendMessage(SCI_STYLESETFORE, 0, RGB(0, 0, 0)); SendMessage(SCI_STYLESETFORE, 2, RGB(0, 64, 0)); SendMessage(SCI_STYLESETFORE, 5, RGB(0, 0, 255)); SendMessage(SCI_STYLESETFORE, 6, RGB(200, 20, 0)); SendMessage(SCI_STYLESETFORE, 9, RGB(0, 0, 255)); SendMessage(SCI_STYLESETFORE, 10, RGB(255, 0, 64)); SendMessage(SCI_STYLESETFORE, 11, RGB(0, 0, 0)); // set the backgroundcolor of brace highlights SendMessage(SCI_STYLESETBACK, STYLE_BRACELIGHT, RGB(0, 255, 0)); // set end of line mode to CRLF SendMessage(SCI_CONVERTEOLS, 2, 0); SendMessage(SCI_SETEOLMODE, 2, 0); // SendMessage(SCI_SETVIEWEOL, TRUE, 0); //顯示當前行的淡黃色背景 SendMessage(SCI_SETCARETLINEVISIBLE, TRUE, 0); SendMessage(SCI_SETCARETLINEBACK, RGB(255, 255, 0), 0); SendMessage(SCI_SETCARETLINEBACKALPHA, 100, 0); }
注意:要在ScintillaWnd.h頭文件中包含Scintilla.h和SciLexer.h頭文件
為窗口類添加InitScintillaEdit函數,在ScintillaWnd.h中添加下面的代碼
void InitScintillaEdit(int nSize, const TCHAR* face);
用同樣的方法,在ScintillaWnd.cpp文件中創建InitScintillaEdit函數
在創建的InitScintillaEdit函數添加如下代碼
void ScintillaWnd::InitScintillaEdit(int nSize, const TCHAR * face) { setCppSyntax(); Init(); SetDefaultColorFont(nSize, face); UpdateLineNumberWidth(); }
為窗口類添加SetDefaultColorFont函數
void SetDefaultColorFont(int nSize, const TCHAR* face);
在創建的SetDefaultColorFont函數添加如下代碼
void ScintillaWnd::SetDefaultColorFont(int nSize, const TCHAR * face) { SendMessage(SCI_SETSELFORE, TRUE, RGB(255, 255, 255)); //選中行的顏色 SendMessage(SCI_SETSELBACK, TRUE, RGB(10, 36, 106)); //默認文本顏色 SendMessage(SCI_STYLESETFORE, STYLE_DEFAULT, RGB(0x00, 0x00, 0x00)); SendMessage(SCI_STYLESETBACK, STYLE_DEFAULT, RGB(0xff, 0xff, 0xff)); SendMessage(SCI_STYLESETSIZE, STYLE_DEFAULT, nSize); SendMessage(SCI_STYLESETFONT, STYLE_DEFAULT, reinterpret_cast<LPARAM>(face)); }
為窗口類添加SetFold函數
void SetFold(BOOL bFold=TRUE);
在創建的SetFold函數添加如下代碼
void ScintillaWnd::SetFold(BOOL bFold) { if (bFold) { // source folding section // tell the lexer that we want folding information - the lexer supplies "folding levels" SendMessage(SCI_SETPROPERTY, (WPARAM) "fold", (LPARAM)"1"); SendMessage(SCI_SETPROPERTY, (WPARAM) "fold.html", (LPARAM)"1"); SendMessage(SCI_SETPROPERTY, (WPARAM) "fold.html.preprocessor", (LPARAM)"1"); SendMessage(SCI_SETPROPERTY, (WPARAM) "fold.comment", (LPARAM)"1"); SendMessage(SCI_SETPROPERTY, (WPARAM) "fold.at.else", (LPARAM)"1"); SendMessage(SCI_SETPROPERTY, (WPARAM) "fold.flags", (LPARAM)"1"); SendMessage(SCI_SETPROPERTY, (WPARAM) "fold.preprocessor", (LPARAM)"1"); SendMessage(SCI_SETPROPERTY, (WPARAM) "styling.within.preprocessor", (LPARAM)"1"); SetMarginWidthN(2, 16); //SendMessage( SCI_SETMARGINWIDTHN, 2, 16 ); // FoldMargin SendMessage(SCI_SETMARGINTYPEN, 2, SC_MARGIN_SYMBOL);//頁邊類型 SendMessage(SCI_SETMARGINMASKN, 2, SC_MASK_FOLDERS); //頁邊掩碼 SendMessage(SCI_SETMARGINWIDTHN, 2, 16); //頁邊寬度 SendMessage(SCI_SETMARGINSENSITIVEN, 2, TRUE); //響應鼠標消息 // 折疊標簽樣式 SendMessage(SCI_MARKERDEFINE, SC_MARKNUM_FOLDER, SC_MARK_CIRCLEPLUS); SendMessage(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEROPEN, SC_MARK_CIRCLEMINUS); SendMessage(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEREND, SC_MARK_CIRCLEPLUSCONNECTED); SendMessage(SCI_MARKERDEFINE, SC_MARKNUM_FOLDEROPENMID, SC_MARK_CIRCLEMINUSCONNECTED); SendMessage(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERMIDTAIL, SC_MARK_TCORNERCURVE); SendMessage(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERSUB, SC_MARK_VLINE); SendMessage(SCI_MARKERDEFINE, SC_MARKNUM_FOLDERTAIL, SC_MARK_LCORNERCURVE); // 折疊標簽線顏色 SendMessage(SCI_MARKERSETBACK, SC_MARKNUM_FOLDERSUB, 0xff0000); //藍色 SendMessage(SCI_MARKERSETBACK, SC_MARKNUM_FOLDERMIDTAIL, 0xff0000); SendMessage(SCI_MARKERSETBACK, SC_MARKNUM_FOLDERTAIL, 0xff0000); SendMessage(SCI_SETFOLDFLAGS, 16 | 4, 0); //如果折疊就在折疊行的上下各畫一條橫線 } else { SetMarginWidthN(2, 0); //SendMessage( SCI_SETMARGINWIDTHN, 2, 0 ); // FoldMargin } }
為窗口類添加ToggleFold函數
void ToggleFold(long line);
在創建的SetFold函數添加如下代碼
void ScintillaWnd::ToggleFold(long line) { SendMessage(SCI_TOGGLEFOLD, static_cast<WPARAM>(line), 0); }
為窗口類添加GetMarginWidthN函數
int GetMarginWidthN(int margin);
在創建的GetMarginWidthN函數添加如下代碼
int ScintillaWnd::GetMarginWidthN(int margin) { return SendMessage(SCI_GETMARGINWIDTHN, static_cast<WPARAM>(margin), 0); }
為窗口類添加SetMarginWidthN函數
void SetMarginWidthN(int margin, int mask);
在創建的SetMarginWidthN函數添加如下代碼
void ScintillaWnd::SetMarginWidthN(int margin, int mask) { SendMessage(SCI_SETMARGINWIDTHN, static_cast<WPARAM>(margin), static_cast<LPARAM>(mask)); }
為窗口類添加UpdateLineNumberWidth函數
void UpdateLineNumberWidth(void);
在創建的UpdateLineNumberWidth函數添加如下代碼
void ScintillaWnd::UpdateLineNumberWidth(void) { //start 顯示行號 long iLineMarginWidthNow; long iLineMarginWidthFit; long iLineNum=SendMessage(SCI_GETLINECOUNT, 0, 0); long iLineNumCount=1; while (iLineNum !=0) { ++iLineNumCount; iLineNum /=10; } iLineMarginWidthNow=SendMessage(SCI_GETMARGINWIDTHN, 0, 0); long charWidth=SendMessage(SCI_TEXTWIDTH, STYLE_LINENUMBER, (LPARAM)("9")); iLineMarginWidthFit=charWidth * iLineNumCount; if (iLineMarginWidthNow !=iLineMarginWidthFit) { SendMessage(SCI_SETMARGINWIDTHN, 0, iLineMarginWidthFit); } //end of 顯示行號 }
為窗口類添加LineFromPosition函數
long LineFromPosition(long pos);
在創建的LineFromPosition函數添加如下代碼
long ScintillaWnd::LineFromPosition(long pos) { return SendMessage(SCI_LINEFROMPOSITION, static_cast<WPARAM>(pos), 0); }
ScintillaWnd窗口類的大部分代碼已經添加完成,后續還要添加一些代碼,下一章會講在CCppEditorDlg類中添加代碼,給CCppEditorDlg類添加完代碼后,項目就可以編譯運行了,但這只是一個簡單的版本,我還會添加功能,到時候再為大家講解。
(未完待續)
源:https://www.oschina.net/news/117827/jboot-3-3-4-released
Jboot 是一個基于 JFinal、JFinal-Undertow、Dubbo、Seata、Sentinel、ShardingSphere、Nacos 等開發的微服務框架,幫助開發者降低微服務開發門檻。同時完美支持在 idea、eclipse 下多 maven 模塊,對 java 代碼、html、css、js 等資源文件進行熱加載。爽爽開發,快樂生活。
Jboot 3.3.4 主要新增了一個新的特性,Jboot 新增了 JbootActionReporter 用于代替 JFinal 的 ActionReporter ,這樣更加方便的對 Controller (包括攔截器)方法進行定位,如下圖:
當有這個功能以后,我們點擊此 控制臺 鏈接,可以直接跳轉到對應的方法,這樣我們在開發的時候,更加方便我們對請求信息進行快速定位,更加急速的開發。
目前已經開源超過了 3 年的時間,迭代了 100+ 個版本,已經被超過 1000+ 公司在使用。
Jboot 主要有以下特征:
Jboot v3.3.4 更新內容如下:
maven 依賴:
<dependency>
<groupId>io.jboot</groupId>
<artifactId>jboot</artifactId>
<version>3.3.4</version>
</dependency>
Hello World:
關注本頭條號,每天堅持更新原創干貨技術文章。
如需學習視頻,請在微信搜索公眾號“智傳網優”直接開始自助視頻學習
在編寫shell腳本或c程序時,如何顯示vi / vim文本編輯器行號?如何在Linux、Apple OS X/macOS或類unix操作系統上打開或關閉此功能?如何讓vi文本編輯器顯示或隱藏行號?如何通過編輯~/.vimrc配置文件使得vim啟動時啟用行號。
在vi / vim下顯示行號對于調試程序錯誤和提高程序或腳本的整體可讀性非常有用。Vim在軟件開發人員、系統管理員和Linux/Unix/macOS用戶中非常流行,但是默認情況下不顯示行。在本教程中,您將了解如何在基于Linux/Unix的系統上運行的Vim / Vi文本編輯器中顯示或隱藏行號。
如何使vi編輯器顯示或隱藏行號
要使vi顯示行號,需要設置數字標志。這樣做:
set?number
或者
set?nu
vim怎么顯示行號
vi編輯器正在顯示行號,設置成功
要關閉行號,請再次按照前面的說明進行操作,但這次要在:提示符處輸入以下行:
set?nonumber
通常,一旦離開編輯器,vi將忘記所選擇的設置。但是,您可以在特定帳戶上使用vi時使其中任何一個設置自動生效。為此,將適當的set語句作為行放在名為.exrc的主目錄的文件中。
對于所有當前設置的列表,在:提示符處,輸入:
set?all
對于您已經設置的所有內容的列表,在:提示符處,輸入:
set
vi行號顯示設置方法
通過本文,您應該可以知道如何在vi編輯器中設置行號了嗎?
本文已同步至博客站,尊重原創,轉載時請在正文中附帶以下鏈接:
https://www.linuxrumen.com/rmxx/1564.html
點擊了解更多,快速查看更多的技術文章列表。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。