用VC 設計語法編輯器

2021-03-31 08:56:29 字數 1092 閱讀 4787

設計語法編輯器有多種方法,筆者準備用最簡單的方法實現這一功能。我們知道windows提供了rich edit控制,這是乙個強大的編輯器,windows的寫字板用的就是這一控制。從它著手,我們不僅可以設計出語法編輯器,還可同時獲得它強大的編輯能力。rich edit的支援檔案是riched20.dll這個動態鏈結庫,它的mfc介面是cricheditctrl,其對應的視類是cricheditview。cricheditview提供了乙個setcharformat方法,可能在設計時首先考慮的就是如何利用它進行設計,但是根據筆者的試驗,用這個方法效率很差,特別是對c++這種有多行注釋的語言。我們將換乙個思路,為了更好的理解本文計述的設計思路,我們先來做乙個試驗:

先用vc++生成乙個單文件工程,假設其名為myproject,在工程嚮導的最後一步即第六步,將視類的基類從cview改為cricheditview。生成工程後,我們用工程嚮導新增工程視類cmyprojectview的wm_paint訊息處理函式,但是在該函式中不新增任何**,也就是什麼也不做。現在編譯執行,我們看到的是乙個感覺設計拙劣的編輯器,它的內容視窗顯示的內容完全不對,當然這很自然,因為我們在onpaint中什麼也沒有做,所以它並不重繪視窗。我們從其它地方複製一段文字,將它貼上到這個拙劣的編輯器中,似乎沒有反應?現在拖動滑鼠,你將看到有黑色選擇區域出現,感悟到什麼沒有?是的,這個拙劣的編輯器中好象有文字存在,雖然我們不知道究竟是什麼文字!做進一步的試驗,試著用cricheditctrl的getline方法去取視窗中的文字,你將得到剛才那些看不到的文字!然後我們就可以在同樣的位置繪出這些文字,rich edit將恢復它的本來面貌!如果我們對取得的這些文字進行分析,將特定的文字用特定的顏色繪出,這不就是夢想中的語法編輯器嗎?

為了讓編輯器的內容顯示正常,必須使文字的繪製與編輯器的預設行為精確的一致,這要求繪出的文字要與編輯器本身的文字位置相同,否則會出現文字錯位的錯誤。這需要注意兩個問題:一、因為rich edit是精確精滾動的,也就它的第一行可能只顯示出一半來,所以必須計算好第一行的top位置;二、rich edit的tab字元的問題,tab代表的寬度不是一成不變的,而是根據字元數不斷調整的。在寫字板中輸入文字,你可以觀察到這一情況。解決好所說的幾個問題,乙個簡單的語法編輯器就大功告成了!

CSDN markdown編輯器語法

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 引用塊內容 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個...

markdown編輯器語法

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

markdown編輯器語法

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...