支持代码完成和函数提示
来自http://www.cppprog.com/2009/1111/176_4.html
VS的代码完成和函数提示功能是很值得称道的,它们可以极大地提高我们的编程效率(造成我现在写代码时往往只记住前四个字母,如果在对象后面点了小数点后不出现提示就会心慌意乱的说-_-),尽管有时也会失效。
做为IDE这个功能是绝对不能少D。即使你只打算做个编辑器,如果有这个功能那也是一大亮点啊~~(目前很多代码编辑器都没这个功能的说)。
关于函数提示的几个命令以SCI_CALLTIP作为前缀,这里只介绍我们即将使用的几个命令(更多命令见:http://scintilla.sourceforge.net/ScintillaDoc.html#CallTips)
- SCI_CALLTIPSHOW(int posStart, const char *definition) 显示提示。posStart表示显示位置,definition是显示的内容
- SCI_CALLTIPCANCEL 取消提示
- SCI_CALLTIPACTIVE 如果当前编辑器中有提示信息,返回1,否则返回0
- SCI_CALLTIPSETHLT(int highlightStart, int highlightEnd) 设置提示中的高亮位置,在VS里我们输入函数实参时函数提示会高亮当前输入的参数名。
在我们程序中加入提示的最佳时机是SCN_CHARADDED(见上一节)事件。当用户输入左圆括号'('时,取得括号左边的函数名,然后显示出该函数的完整定义。
下面的代码实现了CreateWindow和MoveWindow两个API的函数提示
-
-
const size_t FUNCSIZE=2;
-
char* g_szFuncList[FUNCSIZE]={
-
"CreateWindow(",
-
"MoveWindow("
-
};
-
char* g_szFuncDesc[FUNCSIZE]={
-
"HWND CreateWindow("
-
"LPCTSTR lpClassName,"
-
" LPCTSTR lpWindowName,"
-
" DWORD dwStyle, "
-
" int x,"
-
" int y,"
-
" int nWidth,"
-
" int nHeight, "
-
" HWND hWndParent,"
-
" HMENU hMenu,"
-
" HANDLE hInstance,"
-
" PVOID lpParam"
-
")",
-
"BOOL MoveWindow("
-
"HWND hWnd,"
-
" int X,"
-
" int Y,"
-
" int nWidth,"
-
" int nHeight,"
-
" BOOL bRepaint"
-
")"
-
};
-
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
-
{
-
TForm::WndProc(Message);
-
if(Message.Msg == WM_NOTIFY)
-
{
-
SCNotification* notify = (SCNotification*)Message.LParam;
-
...
-
if(notify->nmhdr.code == SCN_CHARADDED)
-
{
-
...
-
-
static const char* pCallTipNextWord = NULL;
-
static const char* pCallTipCurDesc = NULL;
-
if(notify->ch == '(')
-
{
-
char word[1000];
-
TextRange tr;
-
int pos = SendEditor(SCI_GETCURRENTPOS);
-
int startpos = SendEditor(SCI_WORDSTARTPOSITION,pos-1);
-
int endpos = SendEditor(SCI_WORDENDPOSITION,pos-1);
-
tr.chrg.cpMin = startpos;
-
tr.chrg.cpMax = endpos;
-
tr.lpstrText = word;
-
SendEditor(SCI_GETTEXTRANGE,0, sptr_t(&tr));
-
-
for(size_t i=0; i<FUNCSIZE; i++)
-
{
-
if(memcmp(g_szFuncList[i],word,sizeof(g_szFuncList[i])) == 0)
-
{
-
pCallTipCurDesc = g_szFuncDesc[i];
-
SendEditor(SCI_CALLTIPSHOW,pos,sptr_t(pCallTipCurDesc));
-
const char *pStart = strchr(pCallTipCurDesc,'(')+1;
-
const char *pEnd = strchr(pStart,',');
-
if(pEnd == NULL) pEnd = strchr(pStart,')');
-
SendEditor(SCI_CALLTIPSETHLT,
-
pStart-pCallTipCurDesc, pEnd-pCallTipCurDesc);
-
pCallTipNextWord = pEnd+1;
-
break;
-
}
-
}
-
}
-
else if(notify->ch == ')')
-
{
-
SendEditor(SCI_CALLTIPCANCEL);
-
pCallTipCurDesc = NULL;
-
pCallTipNextWord = NULL;
-
}
-
else if(notify->ch == ',' && SendEditor(SCI_CALLTIPACTIVE) && pCallTipCurDesc)
-
{
-
-
const char *pStart = pCallTipNextWord;
-
const char *pEnd = strchr(pStart,',');
-
if(pEnd == NULL) pEnd = strchr(pStart,')');
-
if(pEnd == NULL)
-
SendEditor(SCI_CALLTIPCANCEL);
-
else
-
{
-
SendEditor(SCI_CALLTIPSETHLT,pStart-pCallTipCurDesc, pEnd-pCallTipCurDesc);
-
pCallTipNextWord = pEnd+1;
-
}
-
}
-
}
-
...
-
}
-
}
当然,这个提示功能相当山寨啦。比如函数名和括号之间有空格提示就不出来了,函数嵌套调用时只会提示最后一个函数的参数。关于如果改进,大家各显神通吧。
另外,还有一个提外话,在实际的使用中,我们的函数信息不可能象这里一样是写死的,而是依据用户的输入动态生成的函数名及信息列表。这就涉及到一个C++代码解析的问题(还好,只要解析函数声明就行了),对于这一点,牛X的同学可以自己写解析代码;次牛X的可以考虑用WAVE,Spirit,Regex等库帮助解析;象偶这种不牛的同学,则可以考虑利用CTAGS工具在后台线程中生成tag文件,我们从tag文件里取就可以了(当然,效率嘛~~可以参考C++Builder的函数提示效率-_-)。
代码完成和函数提示的用法类似,前缀是SCI_AUTOC,具体命令见:http://scintilla.sourceforge.net/ScintillaDoc.html#Autocompletion
直接上代码:
-
void __fastcall TForm1::WndProc(Messages::TMessage &Message)
-
{
-
TForm::WndProc(Message);
-
if(Message.Msg == WM_NOTIFY)
-
{
-
...
-
if(notify->nmhdr.code == SCN_CHARADDED)
-
{
-
...
-
if(notify->ch == '.')
-
{
-
char word[1000];
-
TextRange tr;
-
int pos = SendEditor(SCI_GETCURRENTPOS);
-
int startpos = SendEditor(SCI_WORDSTARTPOSITION,pos-1);
-
int endpos = SendEditor(SCI_WORDENDPOSITION,pos-1);
-
tr.chrg.cpMin = startpos;
-
tr.chrg.cpMax = endpos;
-
tr.lpstrText = word;
-
SendEditor(SCI_GETTEXTRANGE,0, sptr_t(&tr));
-
if(strcmp(word,"file.") == 0)
-
{
-
SendEditor(SCI_AUTOCSHOW,0,
-
sptr_t(
-
"close "
-
"eof "
-
"good "
-
"open "
-
"rdbuf "
-
"size"
-
));
-
}
-
}
-
...
SCI_AUTOCSHOW命令的第一个参数表示已经输入了多少个字符。这对于代码自动完成是很有帮助的,比如我们可以用它帮助用户输入长串的单词,如:
-
if(strcmp(word,"Create") == 0)
-
{
-
SendEditor(SCI_AUTOCSHOW,6,
-
sptr_t(
-
"CreateBitmap "
-
"CreateDC "
-
"CreateHandle "
-
"CreateWindow "
-
"CreateWindowEx"
-
));
-
}
分享到:
相关推荐
2.支持代码折叠功能,如下 void f() { } 3.支持自动代码缩进 int main() { while(true) { printf("great"); } } 4.支持行号显示,如程序左显示 5.支持函数参数自动提示功能,...
快写代码编辑器是一款中文代码编辑器,支持中文编写PHP、HTML、CSS,支持多种编程语言的语法高亮、拥有优秀的代码自动完成功能。 快写代码编辑器主要功能: 1、简洁的界面 2、用中文编写代码 3、中英代码互转 ...
3.自动完成:Source Insight 提供了自动完成功能,可以根据上下文提供代码片段和函数名的自动补全提示,提高编码效率。 4.代码分析:它能够对代码进行静态分析,检查语法错误、未使用的变量、函数调用关系等,并且...
可以为各种语言添加API,使其有和vc vs一样的下拉菜单提示及自动完成API函数名,关键字等等。 其下载地址为 http://groups.google.com/group/scite-interest/web/extras 还可以自己定义语言,并为自己的语言设置语法...
LINQPad 也是一个很好的学习LINQ的工具,包含《C# 3.0 in a Nutshell》一书中200个示例,可以使用LINQPad感受LINQ的超酷功能和函数编程。 编写一条简单的查询语句,可以立即看到查询的结果,在此测试是编写的LINQ...
-语法高亮、代码提示补全、代码折叠、自定义皮肤/配色方案、多便签 -代码地图、多种界面布局与全屏免打扰模式 -完全开放的用户自定义配置与神奇实用的编辑状态恢复功能 -强大的多行选择和多行编辑 -雷电般快速的文件...
12.代码提示及代码自动完成功能【快捷键:Alt+Backspace】 13.代码自动格式化【保存及编译运行时】 14.支持导入STL格式的3D打印文件 15.支持用户自定义源代码模板 16.支持高精度运算和进制转换 17.自带C++函数...
程序可以对类C语言代码编译,支持函数过程调用和数组。编译完成后会在原文件路径下生成汇编语言代码文件并在运行日志中输出对应的编译信息或者发生编译错误时的错误提示信息。此时用户可以查看详细的编译过程和结果...
李文娟,中国石油大学(华东)硕士,现供职于国家行政学院,工作后一直从事软件开发和软件项目管理工作,对计算机语言、计算机体系结构、操作系统都非常熟悉,尤其是精通C和C++编程技术. 目录 封面 -19 封底 -18 扉页...
7. 代码完成功能和函数参数提示功能;(5)(6) 8. 能够列出代码文件中包含的所有符号(函数、类/结构、变量等);(7) 9. 大量可定制的功能 可定制快捷键 可定制外部工具 可定制帮助(可支持Windows帮助、Html帮助和在线...
:: 代码完成和基础的智能感应 :: 提示信息 :: 函数帮助 :: 代码片段 :: 跳转到定义 :: 文档格式化和选中 :: 文档代码符号 :: 支持 SRP ShaderlabVSCode 有免费的功能受限的版本可以从 这里 获得。 支持平台: 1. ...
增强如下: 1、增加自定义API的...2、对自动完成和函数提示作了较多的增强;加了少量语义分析,以便于智能提示; 3、关闭了调试信息窗口,改善了工程列表的显示; 主要因为我不用此工具来调试,纯粹编写lua代码;
一,技术选型 1,前端 微信小程序原生框架 css JavaScript 2,管理后台 云开发Cms内容管理系统 web网页 3,数据后台 小程序云开发 云函数 ...9,搜索结果,支持模糊查询 ...3,订单完成 ...5,管理后厨和排号管理
有出色的语法高亮功能, 支持多种语言,python,c/c++,html,javascript,xml,css等,能够自动检测,并加载Python解释器, 允许用户自由添加删除解释器,并选择相应的解释器运行脚本,支持函数智能提示和代码自动完成, ...
截止到目前(2022-09-29)官网最新版本 老规矩,先安装,再覆盖。 本版本更新内容如下 ...在完成列表、快速信息和参数信息中添加了对 DATE_BUCKET 函数的支持 改进了源代码管理中刷新操作的性能 等等等…………
代码完成功能和函数参数提示功能; 能够列出代码文件中包含的所有符号 函数 类 结构 变量等 ; 大量可定制的功能: 可定制快捷键 可定制外部工具 可定制帮助 可支持Windows帮助 Html帮助和在线帮助 ; 彩色 带语法加...
《超实用的jQuery代码段》从jQuery框架的使用原理与应用场景出发,对最实用的jQuery代码段进行了全方位的介绍和演示。全书分为11章,包含网页效果、DOM元素与属性、HTML事件、CSS样式、用户输入自动完成、拖放、图形...
支持函数和正则表达式的扩展。提供扩展库formValidatorReg.js,你可以自由的添加、修改里面的内容。 支持2种校验模式。第一种:文字提示(showword模式);第二种:弹出窗口提示(showalert模式) 支持多个校验组。...
支持函数和正则表达式的扩展。提供扩展库formValidatorReg.js,你可以自由的添加、修改里面的内容。 支持2种校验模式。第一种:文字提示(showword模式);第二种:弹出窗口提示(showalert模式) 支持多个校验组。...
-语法高亮、代码提示补全、代码折叠、自定义皮肤/配色方案、多便签 -代码地图、多种界面布局与全屏免打扰模式 -完全开放的用户自定义配置与神奇实用的编辑状态恢复功能 -强大的多行选择和多行编辑 -雷电般快速的文件...