强大的语法编辑控件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.ltesting.net