強大的語法編輯控件PfxEditCtrl
發表于:2007-07-01來源:作者:點擊數:
標簽:
兩年多以前本人發布了一款語法編輯軟件LiteEdit,得到了很多朋友的支持,很多人要求我公布源代碼, 經過我考慮再三決定公布其中的編輯控件PfxEditCtrl。這是一款全面支持中文的編輯控件,使用標準的MFC DOC/VIEW機制,使用比較簡單,但功能卻很強大。PfxEdit
兩年多以前本人發布了一款語法編輯軟件LiteEdit,得到了很多朋友的支持,很多人要求我公布源代碼, 經過我考慮再三決定公布其中的編輯控件PfxEditCtrl。這是一款全面支持中文的編輯控件,使用標準的MFC DOC/VIEW機制,使用比較簡單,但功能卻很強大。PfxEditCtrl由兩個主要的類組成,包括CPfxEditView和 CPfxEditDoc,這個控件主要支持如下功能:
1、文本編輯
2、打印
3、可通過語法配置文件定制的語法高亮顯示
4、自動換行
5、支持非等寬字體
6、列塊選擇/復制/刪除/粘貼等列塊方式編輯操作
7、支持UNICODE/UTF8/UNICODE BIG ENDIUM/ANSI文件的打開,編輯,轉換。
8、支持拆份成雙窗口并列編輯。
為了方便大家能快速上手,本人編寫了一示范程序。
建立CPfxEditView的派生類
class CMyEditView : public CPfxEditView { DECLARE_DYNCREATE(CMyEditView)
protected: CMyEditView(); // 動態創建所使用的受保護的構造函數 virtual ~CMyEditView();
public: CMyEditDoc* GetDocument() const;
protected: virtual BOOL PreCreateWindow(CREATESTRUCT& cs); virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); virtual BOOL OnSetupPrintInfo(CPfxEditPrintInfo* pPrintInfo);
protected: DECLARE_MESSAGE_MAP() }; |
建立CPfxEditDoc的排生類
class CMyEditDoc : public CPfxEditDoc { DECLARE_DYNCREATE(CMyEditDoc)
protected: CMyEditDoc(); virtual ~CMyEditDoc();
public: // 當前使用的語法配置信息是否與給定的相同。 BOOL IsCurFileTypeInfo(const CMyEditTypeInfo* pTypeInfo) const; // 獲取當前使用的語法配置信息。 const CMyEditTypeInfo* GetFileTypeInfo() const;
// 指定本文檔使用哪種語法配置信息。 void SetFileTypeInfo(CMyEditTypeInfo* pTypeInfo);
protected: virtual void SetModifiedFlag(BOOL bModified); virtual LONG OnEvent(UINT nCode, LPARAM lParam); virtual BOOL OnInitDocument(LPCTSTR pszPathName);
protected: DECLARE_MESSAGE_MAP() }; |
注冊文檔模板
BOOL CApp::InitInstance() { // 注冊應用程序的文檔模板。文檔模板 // 將用作文檔、框架窗口和視圖之間的連接 CMultiDocTemplate* pTemplate = new CMultiDocTemplate(IDR_MYEDIT, RUNTIME_CLASS(CMyEditDoc), RUNTIME_CLASS(CMyEditFrame), // 自定義 MDI 子框架 RUNTIME_CLASS(CMyEditView)); if (pTemplate == NULL) { return false; } AddDocTemplate(pTemplate);
...... } |
現在就可以使用CPfxEditCtrl的功能了......就這么簡單,更使用平常的MFC DOC/VIEW沒有什么兩樣。
結束語:
很早以前當我想寫一個編輯控件的時候曾經參考過很多網上公布的語法編輯控件,我發覺這些控件編寫的質量不是那么令人滿意,或者是不支持MBCS字符,或者是內存管理一團糟,又或者是架構不夠好和代碼寫得不怎么樣,最后我決定自己動手寫一個,于是用了大約一年的時間來編寫了這個控件。隨著時間的推移,現在NT內核的系統已經占主流,而我由于工作等原因也沒有對LiteEdit(PfxEditCtrl)進行更新,我計劃在有時間的時候編寫一個全新PfxEditCtrl2.0版,基于UNICODE模式,大量使用接口而不是現在的固定的代碼,有非常好的虛存管理功能,像UltraEdit/emEditor那樣只需要很少的內存便可以編輯超大文件.
當然了今天的我和幾年前寫PfxEditCtrl的時候的水平肯定有不同了,使LiteEdit能夠打敗UltraEdit等著名的編輯軟件是我對這個小軟件一點期望,期待LiteEdit2.0版......
原文轉自:http://www.kjueaiud.com