| 類別 | 繼承自 | 職責 |
CPfxEditView | CView | 編輯視圖、繪製、游標、選取、滾動、語法著色 |
CPfxEditDoc | CDocument | 文件資料、編碼處理、儲存/載入、語法設定管理 |
快速整合:三步驟
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 架構)
- 更完善的語法解析引擎
完整原始碼與範例專案已附上,歡迎下載研究、二次開發!
- 上一篇文章: ATL 實作 Shell 擴展之 Context Menu Handler:右鍵選單註冊 DLL 元件
- 下一篇文章: 多執行緒技術實現高效檔案搜尋:從遞迴到並行的效能躍升
Copyright ©
程式碼之家 All Rights Reserved