dll源碼及接口scintilla使用指南_第1頁
dll源碼及接口scintilla使用指南_第2頁
dll源碼及接口scintilla使用指南_第3頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、供一個(gè) license 允許用戶地將它用在開源或是商業(yè)中。我是在做畢業(yè)課題的時(shí)候發(fā)現(xiàn)的這個(gè)編輯控件,使用后發(fā)現(xiàn)它實(shí)在是強(qiáng)大和穩(wěn)定,作為源代碼編輯控件,能在普通的的文本編輯控件中能看到的功能,scilla 都完全能夠?qū)崿F(xiàn),而且,它還能夠提供很多編輯和調(diào)試源代碼時(shí)有用的特殊功能。包括語法高亮顯示,錯(cuò)誤指示,代碼自動(dòng)完成以及代碼提示等。而且在左邊的空白處(margin),可以顯示調(diào)試代碼中非常有用的顯示斷點(diǎn)以及顯示當(dāng)前運(yùn)行行等功能。而且,自定義風(fēng)格的功能比其他大部分編輯器控件都開放,它允許用戶自定義不同類型下的字體,是否粗體,是否斜體,前景色和背景色,支持大量的字體。舉個(gè)例子,在設(shè)置 c/c+編輯模

2、式后,你可以定義注釋語句類型的顏色,字體,大小等等,同樣,可以自定義關(guān)鍵字類型的顏色,字體,大小諸如此類,這樣給用戶極大的配置的。據(jù) sc illa 的 上發(fā)布的消息,scitilla 將在以后的開發(fā)中,更加靈活,健壯,更好地表現(xiàn)在.net 和 java 虛擬機(jī)中運(yùn)行,就這一點(diǎn),可以看出 scitilla 項(xiàng)目就是一個(gè)非常有 的項(xiàng)目,其開發(fā)團(tuán)隊(duì)對它非常有 ,這也使 這些用戶從中受益。據(jù)作者介紹,開發(fā) scilla 的是來自他對 richedit 的失望,在richedit 中,樣式的改變被看作是文檔的一種改變,從而會(huì)被到scilla 是一個(gè)免費(fèi)的源代碼編輯控件,它完全開放源代碼,并且提undo

3、 的堆棧中,并且設(shè)置的文檔對象的修改標(biāo)記。這對源代碼編輯是非常不合適的,改變關(guān)鍵字類型的顏色或是運(yùn)算符的顏色,這不應(yīng)該看作是文檔的修改,也不應(yīng)該能夠通過 undo/redo 來返回/前進(jìn)。我對此深有感觸,如果是 richedit 來做源代碼編輯的控件,那將有太多的東西需要自己編寫代碼實(shí)現(xiàn)了,選擇 scilla,將是一個(gè)明智的選擇,省時(shí),省力,安全,可靠。scilla 目前提供了 win32 版本和 linux 版本。在 linux 中使用的是 gtk+,已經(jīng)在 windows95,nt4.0, windows2000, windows xp 以及 redhat linux8 和 9 中的 gt

4、k+1.2 和 2.0 中測試運(yùn)行正常。這是一個(gè)跨的控件,也是我對其非常欣賞的原因之一。下面主要論述的還是在 windows + vc 下如何使用這個(gè)控件,但是其他/編譯工具下也大同小異,觸類旁通吧。簡介:scilla 的 windows 版本就是一個(gè)窗體控件。它的主要編程接口是通過窗體消息來傳送的。你要實(shí)現(xiàn)什么功能,向控件發(fā)送一個(gè)消息就可以了,當(dāng)需要從控件得到什么信息,接受 wm_notify 消息即可,可以從它帶的參數(shù)中獲得大量當(dāng)前控件的信息,比如是否已經(jīng)修改文字了,是否正在點(diǎn)擊左邊的邊框等等。但是,實(shí)際上在 mfc 編程中,通過消息的方式來控制控件還是非常麻煩的,因?yàn)檫@些消息的大部分都是

5、自定義消息,不便于。所以一般的做法就是將這些消息的調(diào)用封裝成一個(gè)窗體類,這樣調(diào)用方便多了。除了能實(shí)現(xiàn)一般編輯控件能實(shí)現(xiàn)的功能外,scilla 還能實(shí)現(xiàn)語法高亮,代碼折疊,書簽,自動(dòng)完成,語句提示等等功能。你完全可以不用學(xué)習(xí)標(biāo)準(zhǔn)編輯控件 cedit 或者是 richedit,scilla 提供了協(xié)調(diào)一致的 api 口,這些都是它的優(yōu)點(diǎn)之處。事實(shí)上,scilla 開發(fā)組同時(shí)也用這個(gè)控件開發(fā)了一個(gè)編輯scite,它百分百的實(shí)現(xiàn)了 scilla 的全部功能,如果你對 scilla非常感,但又不知它到底能做到那些功能的活,當(dāng)一個(gè) scite,使用一下就完全明白了。同時(shí),scite 也是開源,學(xué)習(xí)它的代碼

6、,就是學(xué)習(xí) scilla 的使用方法。在 scilla 的文檔中,就說明了,這個(gè)文檔只是獨(dú)立地講解各個(gè)消息的使用方能和參數(shù),并不能講解如何把它們連接起來組成一個(gè)實(shí)用的編輯器,要想知道如何實(shí)現(xiàn)某些特定功能,還是看看 scite 是如何實(shí)現(xiàn)的。我也看過 scite 的代碼,可讀性還是不錯(cuò)的,可惜我是沒有耐心的人,也就讀了幾個(gè)函數(shù),大體了解了一下,如果你想用好這個(gè)控件,多讀讀 scite 的源碼還是不錯(cuò)的。scilla 的消息就用 sendmessage 函數(shù)發(fā)送,它提供兩個(gè)頭文件:scilla.h 和 scilexer.h,消息號的宏定義都在這里,而且還有很多要用到的結(jié)構(gòu)體,類型等等的定義。消息帶

7、的兩個(gè)參數(shù)ram 和lparam是要經(jīng)常用到的,也許會(huì)用到一個(gè),兩個(gè),或者無需參數(shù)。但建議你最好在使用的時(shí)候把不用的參數(shù)都賦予0 值,因?yàn)槿绻院髷U(kuò)充消息功能,用到了某個(gè)參數(shù),賦值能防止程序的。通常參數(shù)的類型如下:boolconstchar*char*colour其他的類型不用多說,至于 color 類型,是用于描述顏色的,它實(shí)際上就是一個(gè)整數(shù),計(jì)算方法是:red|(green 8)|(blue 16), red,green,blue 是 8 位 2 進(jìn)制數(shù),也就是 2 位 16 進(jìn)制數(shù)。很容易就能實(shí)現(xiàn) 256 色的調(diào)配。至于,就是說這個(gè)參數(shù)在這個(gè)消息中不用,可以賦為 0 值。下面的講解的重點(diǎn)

8、是放在 vc+mfc 的環(huán)境中,因?yàn)槲乙恢痹谶@個(gè)環(huán)境下開發(fā)東西,要是用 sdk 編程也一樣的,只是用到了 的 api,至于編譯器,vc 也好,gcc 也好,我覺得沒什么大問題,我就曾經(jīng)用 gdb 調(diào)試 scite 的源碼,來了解 sc illa 如何使用的,linux 下的 gtk+編程我沒嘗試過,從文檔上看,也是用消息的方式來控制控件,用接受消息的方式來獲得控件的信息。下面我就如何封裝 sc illa 成為一個(gè)窗體類,如何在程序中使用它的功能一一講解,水平有限,而且現(xiàn)在還在上學(xué)中,可能寫得比較慢,呵呵,諒解。如何使用 scinitlla 控件呢?scilla 控件需要兩個(gè)頭文件,Scilla

9、.h 和 SciLexer.h,這里定義了消息宏,所用到的數(shù)據(jù)結(jié)構(gòu)類型等等。在所要用到的 cpp 文件中包括這兩個(gè)頭文件即可。scinitlla 控件與主程序交互通信是通過消息傳遞的。在窗體類中,創(chuàng)建一個(gè)scinitlla 控件,然后發(fā)送消息給控件,以達(dá)到不同的目的。有的時(shí)候,也需要控件的反饋,比如當(dāng)用戶點(diǎn)擊編輯器左邊欄時(shí)希望控件能通知父窗體,這時(shí),父窗體接收到一個(gè) WM_NOTIFY 消息,它的參數(shù) lParam 可以轉(zhuǎn)化為結(jié)構(gòu)體SCNotification 的指針類型,結(jié)構(gòu)體 SCNotification 是由控件頭文件定義的,該結(jié)構(gòu)體定義如下:struct SCNotification

10、struct NotifyHeader nmhdr;ition;/SCN_STYLENEEDED, SCN_MODIFIED, SCN_DWELLSTART,/SCN_DWELLEND, SCN_CALLTIPCLICK,/SCN_HOTSPOTCLICK,SCN_HOTSPOTDOUBLECLICKch;/ SCN_CHARADDED, SCN_KEYmodifiers;/ SCN_KEY, SCN_HOTSPOTCLICK,SCN_HOTSPOTDOUBLECLICKmodificationType;/SCN_MODIFIEDconst char *text;/SCN_MODIFIEDle

11、ngth;/ SCN_MODIFIEDlinesAdded;/ SCN_MODIFIEDmessage;/ SCN_MACRORECORDuptr_tram;/SCN_MACRORECORDsptr_t lParam;/SCN_MACRORECORDline;/ SCN_MODIFIEDfoldLevelNow;/ SCN_MODIFIEDfoldLevelPrev;/ SCN_MODIFIEDmargin;/ SCN_MARGINCLICKlistType;/SCN_USERLISTSELECTIONx;/ SCN_DWELLSTART, SCN_DWELLENDy;/ SCN_DWELLS

12、TART, SCN_DWELLEND;上面的 SCN_MODIFIED,SCN_MARGINCLICK,SCN_STYLENEEDED 等都是控件定義不同的消息宏,通過該結(jié)構(gòu)體,可以知道控件通知父窗體的內(nèi)容,具體的代碼實(shí)現(xiàn)會(huì)在下面的內(nèi)容敘述的。在創(chuàng)建控件之前,必不可少的一步就是加載動(dòng)態(tài)庫 scilexer.dll,在 WinApp 類的 InitInstance()方法中,加入m_hDll = LoadLibrary(_T(SciLexer.dll);其中 m_hDll 是定義的 App 類的成員變量,同時(shí),在 ExitInstance() 方法中,加入/ unload scilla dlli

13、f (m_hDll != NULL)FreeLibrary(m_hDll);這樣才能使用功能強(qiáng)大的 scilla 控件,否則是會(huì)出現(xiàn)無法創(chuàng)建控件的錯(cuò)誤的。那么如何創(chuàng)建 scilla 控件?在 MFC 中,一般的做法是建立一個(gè) CWND 窗體類,封裝與 scilla 控件通信的一系列實(shí)現(xiàn),然后在視圖類中加一個(gè)該窗體類的成員變量,通過窗體類來實(shí)現(xiàn)控件的,如創(chuàng)建、初始化等。這時(shí)起封裝作用的窗體類看作是控件,這就是在設(shè)計(jì)模式中稱為 PROXY 的模式。建立一個(gè) CScillaWnd 類,如下:class CScillaWnd : public CWndpublic:CScillaWnd();virtual CScillaWnd();BOOL Create (LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect,CWnd* pParentWnd, UnID);#define STR_SCILLAWND _T(Sci

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論