BCGControlBar有一个能够实现编辑器的类CBCGPEditCtrl,自带的例子比较详细的介绍了使用方法,下面自己记录一些备忘,使用的是12.0版本。
1.新建MFC应用程序,名称Test_BcgEdit,在"下一步"中选择"多个文档","MFC 标准","使用Unicode库"(不然处理汉字有问题),点"完成";
2.配置BCGControlBar的库目录;
3.在"stdafx.h"文件里面添加以下代码:
1 |
| #include "BCGCBProInc.h" |
5.编译运行如下图所示:
6.根据BCGControlBar帮助文件规定的XML格式,具体描述如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
| <SETTINGS> <!-- 以这个标签开始 --> <OPTIONS> <WordDelimeters></WordDelimeters> <!-- 单词分隔符 --> <SpecialDelimiters></SpecialDelimiters> <!-- 特殊的分隔符列表,使用Ctrl+Left或Ctrl+Right跳跃 --> <IntelliSenseChars></IntelliSenseChars> <!-- 智能感知所使用的符号列表 --> </OPTIONS> <COLOR_DATA> <EditTextColor></EditTextColor> <!-- 指定文本的前景色 --> <EditBackColor></EditBackColor> <!-- 指定文本的背景色 --> <SelTextColor></SelTextColor> <!-- 所选文本的前景色 --> <SelBackColor></SelBackColor> <!-- 所选文本的背景色 --> <KEYWORDS> <Color></Color> <!-- 关键字前景色 --> <BackColor></BackColor> <!-- 关键字背景色 --> <CaseSensitive></CaseSensitive> <!-- 是否大小写敏感 --> <Keyword></Keyword> <!-- 关键字 --> <Keyword></Keyword> ... <Keyword></Keyword> </KEYWORDS> <WORDS> <!-- 也是关键字,但可单独指定颜色 --> <WORD> <Val></Val> <!-- 关键字 --> <Color></Color> <!-- 关键字前景色 --> <BackColor></BackColor> <!-- 关键字背景色 --> <CaseSensitive></CaseSensitive> <!-- 是否大小写敏感 --> </WORD> ... <WORD> ... </WORD> </WORDS> <BLOCKS> <!-- 颜色块列表 --> <BLOCK> <Start></Start> <!-- 指定打开块格局 --> <End></End> <!-- 指定关闭块格局,单行注释为空 --> <Color></Color> <!-- 块前景色 --> <BackColor></BackColor> <!-- 块背景色 --> <WholeText></WholeText> <!-- 块是否多行的,只能定义一个块的WholeText为真 --> <CaseSensitive></CaseSensitive> <!-- 是否大小写敏感 --> </BLOCK> ... <BLOCK> ... </BLOCK> </BLOCKS> </COLOR_DATA> </SETTINGS> |
1 2 3 4 5 6 7 8 |
| <SETTINGS> <COLOR_DATA> <KEYWORDS> <Color>0000ff</Color> <Keyword>int</Keyword> </KEYWORDS> </COLOR_DATA> </SETTINGS> |
1 2 3 4 5 6 7 |
| void CTest_BcgEditView::OnInitialUpdate() { CBCGPEditView::OnInitialUpdate(); const CString strXMLFileName = _T("edit_cpp.xml"); GetEditCtrl()->LoadXMLSettings(strXMLFileName); } |
10.其他的XML配置信息参考BCG自带的示例,下面的一些函数能够开启一些功能:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
| GetEditCtrl()->EnableAutoOutlining(TRUE); //开启自动大纲,默认FALSE GetEditCtrl()->EnableGradientMarkers(TRUE); //开启渐变书签,默认FALSE GetEditCtrl()->EnableIntelliSense(TRUE); //开启智能感知功能,默认FALSE GetEditCtrl()->EnableOutlining(TRUE); //开启大纲,默认FALSE GetEditCtrl()->EnableToolTips(TRUE); //开启文本提示功能,默认FALSE GetEditCtrl()->EnableUndoCharMode(TRUE); //开启字符撤销模式,默认FALSE GetEditCtrl()->EnableOutlineParser(TRUE); //开启大纲解析 GetEditCtrl()->EnableHyperlinkSupport(TRUE);//开启超链接支持 GetEditCtrl()->SetLineNumbersMargin(TRUE, 30); //是否显示行号边距 GetEditCtrl()->SetOutlineMargin(TRUE, 20); //是否显示大纲边距 GetEditCtrl()->m_bColorHyperlink = TRUE; //开启超链接进行颜色处理 GetEditCtrl()->m_bEnableCurrentLineCopy = TRUE; //开启复制当前行,未选中当前行时 GetEditCtrl()->m_bEnableSymSupport = TRUE; //开启符号支持,可以实现转义表情图片 GetEditCtrl()->m_bEnableWholeTextCopy = TRUE; //开启复制全部文本,未选中任何区域时 GetEditCtrl()->m_clrBack = RGB(255, 255, 255); //编辑框背景色 GetEditCtrl()->m_clrBackLineNumber = RGB(255, 255, 255);//行号背景色 GetEditCtrl()->m_clrBackOutline = RGB(255, 255, 255); //大纲折叠区域背景色(+-方框) GetEditCtrl()->m_clrBackSelActive = RGB(49, 106, 197); //选中文本块有输入焦点时的背景色 GetEditCtrl()->m_clrBackSelInActive = RGB(122, 150, 223);//选中文本块无输入焦点时的背景色 GetEditCtrl()->m_clrBackSidebar = RGB(227, 227, 227); //侧边栏背景色 GetEditCtrl()->m_clrHyperlink = -1; //超链接颜色,-1表示默认 GetEditCtrl()->m_clrLineOutline = RGB(128, 128, 128); //大纲线框颜色 GetEditCtrl()->m_clrText = GetSysColor(COLOR_WINDOWTEXT);//编辑框文本前景色 GetEditCtrl()->m_clrTextLineNumber = RGB(0, 130, 132); //行号文本颜色 GetEditCtrl()->m_clrTextSelActive = RGB(255, 255, 255); //选中文本块有输入焦点时的前景色 GetEditCtrl()->m_clrTextSelInActive = RGB(216, 228, 248); //选中文本块有输入焦点时的前景色 GetEditCtrl()->m_nLeftMarginWidth = 20; //左边距宽度(显示书签的位置)默认20 GetEditCtrl()->m_nLineVertSpacing = 1; //文本行之间的额外间距 GetEditCtrl()->m_nOutlineMarginWidth = 20; //大纲边距 GetEditCtrl()->m_nTabSize = 4; //Tab制表符大小 CString strText; GetEditCtrl()->ExportToHTML(strText); //导出HTML到内存缓冲区 GetEditCtrl()->ExportToRTF(strText); //导出RTF到内存缓冲区 GetEditCtrl()->FindText(strText); //搜索文本 |
11.默认的滚动条有点长,要修改滚动条可以派生自CBCGPEditCtrl,然后重载CBCGPEditView::CreateEdit函数,具体参考"ChatEditor"示例。