<!-- Search Google -->
输入您的搜索字词 提交搜索表单
|
<!-- Search Google -->
文件切换功能的原理非常简单,就是首先得到当前文档窗口的文件名称,判断是不是C/C++的类型的文件,然后找到与这个文件对应的代码文件并打开这个文件。查找对应的文件其实就是根据当前文件的扩展名查找对应的代码文件,如果当前文件是.cpp或.c文件,那么就在相应的位置查找同名的.h文件,反之亦然。TabBars插件的C++文件切换功能不仅可以在当前文档所在目录查找对应的文件,还支持多个搜索目录,支持那些讲头文件和cpp文件分开存放的项目。
文件切换首先是得到当前打开的文件名称,Visual Studio的内置组件的IApplication接口有一个属性ActiveDocument,就是当前打开的IGenericDocument文档对象,IGenericDocument对象的FullName属性就是当前文件的全路径名。完整的代码如下:
CComBSTR bStr;
CComPtr<IDispatch> pActiveDocument;
m_pApplication->get_ActiveDocument(&pActiveDocument);
if (pActiveDocument)
{
CComQIPtr<IGenericDocument, &IID_IGenericDocument> pDoc(pActiveDocument);
pDoc->get_FullName(&bStr);
}
接下来就是对FullName名进行分析,得到文件的路径和名称。替换名称中的扩展名就得到了原文件对应的代码文件,然后在当前目录中找这个文件,如果不存在就遍历整个预先定义的搜索路径,在所有的路径下找这个文件。为了简化代码,切换搜索部分总是将当前文件目录作为第一个搜索目录:
i = 0;
BOOL bOpen = FALSE;
while(i < strAExts.GetSize() && !bOpen)
{
k = 0;
while(k < g_strAFlipPath.GetSize() && !bOpen)
{
cFullName.Format(_T("%s%s%s"),g_strAFlipPath[k],cFName,strAExts[i]);
bStr = cFullName;
CComVariant sAuto("Auto"), vFalse(VARIANT_FALSE);
pDocuments->Open(bStr, sAuto, vFalse, &pDisp);
if (pDisp != NULL)
{
bOpen = TRUE;
}
k++;
}
i++;
}
strAExts是对应的扩展名序列,比如对于.c或.cpp文件,它的对应扩展名序列就是.h,.hpp和.hxx,主要是为了兼容不同C++编译器对文件名称的要求。g_strAFlipPath就是搜索目录数组,g_strAFlipPath[0]总是当前目录,对于每一个组合的文件名使用IDocuments对象的Open方法尝试打开,如果打开成功就表示找到对应的文件。这个方法看似很笨,其实实现起来简单,比自己编写代码进行文件搜索要快的多。
分享到:
相关推荐
总之,《数据结构——C++实现》(第二版)的源代码提供了丰富的学习资源,不仅可以帮助初学者建立坚实的数据结构基础,也是经验丰富的开发者巩固和扩展知识的良好参考资料。通过实践和调试这些代码,你将能够更好地...
《数据结构与程序设计——C++描述》是高等教育出版社出版的一本教材,由Bobert L. Kruse和Alexander J. Ryba共同编写。这本书深入探讨了如何使用C++语言进行数据结构的实现和程序设计,旨在帮助学生和程序员掌握数据...
在这个“哈密顿回路 回溯法——C++代码”的项目中,我们看到的是使用C++编程语言来实现的回溯法求解哈密顿回路。C语言和C++虽然在语法上有一定差异,但C++是在C语言基础上发展起来的,因此,此处的描述中提到的...
《图书管理系统——C++实现》是一个基于C++编程语言开发的简单图书管理软件。这个系统设计的主要目标是提供一个直观且易于理解的界面,让用户能够有效地管理图书信息,包括添加、查询、修改和删除图书记录。尽管它不...
在这个压缩包文件“aco”中,我们可以期待找到C++实现的蚁群算法源代码。 蚁群算法的基本原理是利用蚂蚁在路径上留下的信息素(pheromone trails)来指导后续蚂蚁选择路径。在数学模型中,信息素的浓度表示路径的...
动态规划算法——C++实现经典案例——初级
总的来说,"数据结构与程序设计——C++语言描述"是一门深入探讨数据结构和算法的课程,结合源代码实践,能帮助你提升编程能力和问题解决能力,为后续的软件开发打下坚实基础。在学习过程中,务必动手实践,不断思考...
根据给定的文件标题“无线通信系统仿真——C++实用模型”以及描述“无线通信系统仿真——C++实用模型”,我们可以推断出该文件主要关注的是如何利用C++语言进行无线通信系统的仿真建模。虽然提供的部分内容似乎并不...
数据结构大作业——C++校园导航系统,96分程序设计代码,直接运行 数据结构大作业——C++校园导航系统,96分程序设计代码,直接运行 数据结构大作业——C++校园导航系统,96分程序设计代码,直接运行 数据结构大作业...
这也表明,转向使用C++所带来的利弊并不是绝对的:正如本文所述,你可以选择一些对应用有用的C++功能,而不要其他功能。相比于C, C++更加强大的类型检验可以在编译时发现更多的错误,实现精确的内存控制和开发出更...
北京大学数据结构与算法课程作业代码,供广大学习c++的同学参考与学习
本压缩包"安卓Android源码——代码调用C++代码和C++代码调用代码.zip"包含了关于如何在Android应用中使用JNI来实现Java与C++之间的双向调用的实例。 1. **Java调用C++代码** - 创建`Native`方法:在Java类中声明一...
电子书 高质量程序设计指南——C++_C语言(第二版)
Cocos2d-x游戏编程——C++篇(电子工业出版社,徐飞 著)书本配套的光盘代码,
课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
《数据结构与算法分析——C++描述(第3版)》是计算机科学领域经典的一本教材,由Mark Allen Weiss著,主要针对数据结构和算法进行了深入的探讨,并使用C++语言进行实现。这本书旨在帮助读者理解和掌握如何有效地设计...
**MTL——C++实现的矩阵模板类** MTL(Matrix Template Library)是一个强大的C++库,专门用于处理矩阵和线性代数运算。它提供了一组高效的模板类,允许程序员进行各种矩阵运算,包括但不限于加法、减法、乘法、...
在本文中,我们将深入探讨如何使用C++编程语言和Microsoft Foundation Classes (MFC)库来实现音频输出设备的切换功能。MFC是微软提供的一种面向对象的C++库,用于构建Windows应用程序,它封装了许多Windows API,...