首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

語法高亮編輯控件 PfxEditCtrl:支援 Unicode/UTF-8、列塊編輯、分割視窗

     編輯:關於VC++

早期發布的語法編輯器 LiteEdit 獲不少開發者好評,現將其核心編輯控件 PfxEditCtrl 開源分享。基於標準 MFC Doc/View 架構,功能強大且易於整合,支援中文、多種編碼、列塊操作等專業編輯器特性。

執行畫面

PfxEditCtrl 執行畫面

核心功能特性

  • 完整支援中文(MBCS/Unicode)
  • 語法高亮:透過設定檔自訂關鍵字、註解、字串等規則
  • 編碼支援:Unicode、UTF-8、Unicode Big Endian、ANSI 互相開啟/轉換
  • 列塊選取/複製/刪除/貼上(Alt+滑鼠拖曳)
  • 非等寬字體支援
  • 自動換行、列號顯示
  • 分割視窗:水平/垂直雙窗格同步編輯同一文件
  • 列印與列印預覽

架構設計:兩大核心類別

快速整合:三步驟

1. 建立 View 派生類別

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);
    DECLARE_MESSAGE_MAP()
};

2. 建立 Document 派生類別

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);
    DECLARE_MESSAGE_MAP()
};

3. 註冊文件模板

BOOL CMyApp::InitInstance() {
    CMultiDocTemplate* pTemplate = new CMultiDocTemplate(
        IDR_MYEDIT,
        RUNTIME_CLASS(CMyEditDoc),
        RUNTIME_CLASS(CMyEditFrame),  // 自訂 MDI 子框架
        RUNTIME_CLASS(CMyEditView));
    if (!pTemplate) return FALSE;
    AddDocTemplate(pTemplate);
    // ...
}

開發歷程與心得

  • 參考過網上多款開源編輯控件,常見問題:不支援 MBCS、記憶體管理混亂、架構不清、程式碼品質參差
  • 耗時約一年開發 PfxEditCtrl,功能與效能可媲美 EditPlus / UltraEdit
  • 作者已 2-3 年未使用商業編輯器,完全自給自足

未來規劃:PfxEditCtrl 2.0

  • 全面 Unicode 模式
  • 虛擬記憶體管理:極少記憶體編輯超大檔案(參考 UltraEdit / EmEditor 架構)
  • 更完善的語法解析引擎

完整原始碼與範例專案已附上,歡迎下載研究、二次開發!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類別繼承自職責
CPfxEditViewCView編輯視圖、繪製、游標、選取、滾動、語法著色
CPfxEditDocCDocument文件資料、編碼處理、儲存/載入、語法設定管理