WEB开发网
开发学院软件开发VC 语法高亮控件 PfxEditCtrl 阅读

语法高亮控件 PfxEditCtrl

 2006-07-22 22:58:10 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 两年多以前本人发布了一款语法编辑软件LiteEdit,得到了很多朋友的支持,语法高亮控件 PfxEditCtrl,很多人要求我公布源代码,经过我考虑再三决定公布其中的编辑控件PfxEditCtrl,像 UltraEdit/emEditor 那样只需要很少的内存便可以编辑超大文件,当然了

本文示例源代码或素材下载

两年多以前本人发布了一款语法编辑软件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字符,或者是内存管理一团糟,又或者是架构不够好和代码写得不怎么样,最后我决定自己动手写一个,于是用了大约一年的时间来编写了这个控件。现在我自己编写的 LiteEdit 在功能上和性能上都可以和 EditPlus/UltraEdit 等有得拼。所以,我已经有两三年没有用 UltraEdit 和 EditPlus 了。随着时间的推移,现在NT内核的系统已经占主流,而我由于工作等原因也没有对 LiteEdit(PfxEditCtrl)进行更新,我计划在有时间的时候编写一个全新的 PfxEditCtrl2.0 版,基于 UNICODE 模式,有非常好的虚存管理功能,像 UltraEdit/emEditor 那样只需要很少的内存便可以编辑超大文件。当然了今天的我和几年前写 PfxEditCtrl 的时候的水平肯定有很大不同了,使 LiteEdit 能够打败 UltraEdit 等著名的编辑软件是我对这个小软件一点期望,期待 LiteEdit2.0 版......

Tags:语法 高亮 控件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接