使用 EnvDTE 从 Visual Studio 中 c++ 头文件中的光标位置获取 CodeElement
Get CodeElement from cursor position in c++ header file in Visual Studio using EnvDTE
要求:
使用自动化模型 EnvDTE 从 Visual Studio 中C++源和头文件中的当前光标位置获取代码元素(函数/类等)。
问题:
当光标位于头文件中并且我从该头文件中迭代代码元素以获取它们的位置时,我在其源文件中获得相应的元素位置。因此,我收到"值不在指定范围内"异常。
例:这是代码片段
private CodeElement GetCodeElementAtTextPoint(vsCMElement eRequestedCodeElementKind, CodeElements codeElements, TextPoint objCursorTextPoint)
{
CodeElement objResultCodeElement = null;
CodeElements colCodeElementMembers;
CodeElement objMemberCodeElement;
if (codeElements != null)
{
foreach (CodeElement objCodeElement in codeElements)
{
if (objCodeElement.Kind == vsCMElement.vsCMElementFunction)
{
var infoLoc = objCodeElement as CodeType;
}
if (objCodeElement.StartPoint.GreaterThan(objCursorTextPoint))
{
}
else if (objCodeElement.EndPoint.LessThan(objCursorTextPoint))
{
}
else
..
在上面的代码片段中,objCodeElement.StartPoint 为我提供了源文件中该代码元素的起点,因此我在该行出现异常
例如,假设在头文件中函数 fun() 在第 20 行声明,并在源文件的第 901 行定义。如果我单击第 20 行,那么在迭代过程中我会得到函数 fun() 的行号 901,这显然不是头文件的范围。
注意:我尝试在FileCodeModel和VCFileCodeModel中使用CodeElementFromPoint方法,但它不可靠。
有人遇到过这样的问题吗?请帮忙。或者请向我建议正确的方法来满足我的要求。
提前谢谢。
自己
想通了
默认情况下,"objCodeElement.StartPoint"中的属性 StartPoint 给出了元素定义的位置。
因此,我没有使用属性,而是在 CodeElement 上使用函数get_StartPointOf。此函数采用两个参数,第一个是"元素的一部分",第二个是"元素来自何处"(声明或定义)。因此,将第二个参数作为声明给出将给出元素声明在其头文件中的起始位置。
例如
startPoint = objCodeElement.get_StartPointOf(vsCMPart.vsCMPartWholeWithAttributes, vsCMWhere.vsCMWhereDeclaration);
endPoint = objCodeElement.get_EndPointOf(vsCMPart.vsCMPartWholeWithAttributes, vsCMWhere.vsCMWhereDeclaration);
相关文章:
- 如何在QML中设置鼠标光标位置
- 当光标位置在编辑控件 MFC 中更改时是否有通知代码?
- 将光标位置存储在类对象中(ncurses c++)
- 在系统设置光标位置之前获取和设置光标位置?
- 在重新居中之前获取游戏中的光标位置
- 尝试在自定义 QT 创建器文本编辑器中创建查找和替换循环.我似乎无法设置光标位置
- 如何在应用程序窗口中设置光标位置?(C )
- 如何在Qwidget上获取当前的鼠标光标位置
- 如何在 c++ 控制台应用程序中控制光标位置
- 如何使用 Gtkmm 获取光标位置
- C++如何获取当前光标位置
- 在Embarcadero Tools API中的光标位置插入文本
- 光标位置 在控制台上需要有关此代码的帮助
- 在记事本++插件中获取当前光标位置
- 在Qt中如何处理相对于光标位置的光标形状
- 在linux终端中获取光标位置和终端大小
- 如何从最后一个光标位置读取文件
- 信号编辑文本已更改为可编辑的QComboBox设置光标位置在设置编辑文本之后的末尾
- 如何为标准输出设置控制台光标位置
- 获取当前光标位置