随笔分类 -  C/C++

摘要:1、基于VC++ Win32+CUDA+OpenGL组合的遥感影像显示 在该组合方案下,初始化时将OpenGL设置为下面两种方式,效果一样 从遥感影像数据中提取出像素数据,可将其中的R、G、B三通道依次赋值给OpenGL的像素缓冲区对象 (PBO,Pixel Buffer Object)所指定的像素 阅读全文
posted @ 2018-05-02 00:08 rainbow70626 阅读(476) 评论(0) 推荐(0)
摘要:1、问题症状 在VC++环境下,利用MFC单文档应用程序SDI下开发OpenGL程序,当调用glGenBuffersARB(1, &pbo)方法编译通过但执行时出错,出错代码如下: 2、原因分析 关于缓冲区的一些GL接口,是从GL1.5才开始有的,而windows自带的GL只支持到1.1版本。但如果 阅读全文
posted @ 2018-05-01 13:19 rainbow70626 阅读(555) 评论(0) 推荐(0)
摘要:引言 我们知道,在MFC框架中,用于绘图的接口是GDI。但GDI只能绘制简单的2D图形,要想制作精美的3D图形,一个可行的办法是使用OpenGL或者Direct3D等第三方库。 由于最近在给导师的一个小项目帮忙,而且要求使用OpenGL,所以我特地在网上搜索“如何在MFC框架中使用OpenGL”,看 阅读全文
posted @ 2018-05-01 10:23 rainbow70626 阅读(8680) 评论(0) 推荐(0)
摘要:原文链接: 1、用多线程方法实现在MFC/WIN32中调用OpenGL函数并创建OpenGL窗口 2、Windows MFC 两个OpenGL窗口显示与线程RC问题 阅读全文
posted @ 2018-04-30 13:04 rainbow70626 阅读(362) 评论(0) 推荐(0)
摘要:本文主要讲述如何在VC++环境下实现单文档SDI与OpenGL多视图分割窗口,最终的界面类似3DMAX的主界面。首先给出我实现的效果图: 整个实现过程网络上有很多零散的博文,请各位自行搜索,在基于对话框、单文档或多文档下实现多视图分割窗口的原理是一致的。本文检索了众多相关论文,发现了几篇写的非常细致 阅读全文
posted @ 2018-04-30 12:17 rainbow70626 阅读(1005) 评论(0) 推荐(0)
摘要:基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, 阅读全文
posted @ 2018-04-30 00:46 rainbow70626 阅读(1421) 评论(0) 推荐(0)
摘要:第一步:准备2个视图类(如CTViewOne, CTViewTwo) 第二步:在CMainFrame类的头文件中添加数据成员变量: 第三步:重载CMainFrame类的OnCreateClient函数: 这里记得要将原函数的最后一行代码注释掉,否则创建的拆分窗口会被默认窗口覆盖。 1、MFC的窗口分 阅读全文
posted @ 2018-04-28 21:47 rainbow70626 阅读(606) 评论(0) 推荐(0)
摘要:类模板:template<class T1,class T2> struct pair 参数:T1是第一个值得数据类型,T2是第二个值的数据类型。 功能:pair将一对值组合成一个值, 这一对值可以具有不同的数据类型(T1和T2), 两个值可以分别用pair的两个公有函数first和second访问 阅读全文
posted @ 2018-04-19 23:12 rainbow70626 阅读(1009) 评论(0) 推荐(0)
摘要:C++语言一直被认为是复杂编程语言中的杰出代表之一,不仅仅是因为其繁缛的语法规则,还因为其晦涩的术语。下面要讲的就是你的老熟人—new: 它是一个内存管理的操作符,能够从堆中划分一块区域,自动调用构造函数,动态地创建某种特定类型的数据,最后返回该区域的指针。该数据使用完后,应调用delete运算符, 阅读全文
posted @ 2018-04-19 18:00 rainbow70626 阅读(689) 评论(0) 推荐(0)
摘要:经过下面几个步骤可以实现通过函数指针实现事件消息处理: 步骤1:在某一个.h文件中定义以下函数指针类型MouseCLick,比如在CallbackEventModel.h文件中添加如下代码: 步骤2:在需要使用事件的类中定义一个MouseCLick类型的函数指针: 下面的类CallbackUser是 阅读全文
posted @ 2018-04-19 15:59 rainbow70626 阅读(332) 评论(0) 推荐(0)
摘要:有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域, 并说明每个区域的 阅读全文
posted @ 2018-04-18 11:59 rainbow70626 阅读(245) 评论(0) 推荐(0)
摘要:VC++中,在栈空间上申请存储的结构体或者类对象的数组空间时,如果数组长度过大,造成申请的栈空间超过或者逼近1MB时,程序可以编译通过,但是不能够执行起来。打到调试模式时会弹出如下图所示的栈空间越界错误对话框。 如下面的类定义: 而FreeTypeFont类中申请了65536个Character类数 阅读全文
posted @ 2018-04-17 23:42 rainbow70626 阅读(3180) 评论(0) 推荐(0)
摘要:在学习别人的代码时,发现了一个__super,第一感觉很像java中的super,或者C#中的base网上查了一下发现作用差不多,都是指父类。C++本身没有__super,这是visual c++的扩展。其实在c++中,要使用父类的成员,可以直接用”父类名::成员”即可,或者利用using声明。 来 阅读全文
posted @ 2018-04-14 11:58 rainbow70626 阅读(844) 评论(0) 推荐(0)
摘要:注意: 1、每种方法也要复制相应的DLL文件到相应目录,或者设定DLL目录的位置,具体方法为:"Properties" -> "Configuration Properties" -> "Debugging",在"Working Directory"设置dll的路径就可以了 2、无论是设置DLL目录 阅读全文
posted @ 2018-04-14 10:40 rainbow70626 阅读(291) 评论(0) 推荐(0)
摘要:最近需要用 C++ 做一些数值计算,之前一直采用Matlab 混合编程的方式处理矩阵运算,非常麻烦,直到发现了 Eigen 库,简直相见恨晚,好用哭了。 Eigen 是一个基于C++模板的线性代数库,直接将库下载后放在项目目录下,然后包含头文件就能使用,非常方便。此外,Eigen的接口清晰,稳定高效 阅读全文
posted @ 2018-04-13 11:17 rainbow70626 阅读(48776) 评论(5) 推荐(3)
摘要:项目要进行比较多的矩阵操作,特别是二维矩阵。刚开始做实验时,使用了动态二维数组,于是写了一堆Matrix函数,作矩阵的乘除加减求逆求行列式。实验做完了,开始做代码优化,发现Matrix.h文件里适用性太低,而且动态二维数组的空间分配与释放也影响效率,于是寻找其他解决方案。 首先考虑的是与Matlab 阅读全文
posted @ 2018-04-13 11:12 rainbow70626 阅读(4183) 评论(0) 推荐(0)
摘要:VC上或取当前路径有多种方法,最常用的是使用 GetCurrentDirectory和GetModuleFileName函数,个中都有诸多注意事项,特别总结一下 一、获取当前运行目录的绝对路径 1、使用GetCurrentDirectory函数假设程序路径为D:\Test\tst.exe,执行Get 阅读全文
posted @ 2018-04-13 10:38 rainbow70626 阅读(12779) 评论(0) 推荐(0)
摘要:好处:是可以不管是用unicode 编码还是其他 ,代码都不用改. C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,如:1、_tcschr代替strchr或者wcschr函数功能:查找一个字符串中首次出现的指定字符。 (注:_tcschr支持ANSI和UNICODE,AN 阅读全文
posted @ 2018-04-13 10:28 rainbow70626 阅读(2582) 评论(0) 推荐(0)
摘要:在VS 2012 中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误: 原因是Visual C++ 2012 使用了更加安全的 run-time library routines 。新的Security CRT functions(就是那些带有“_s”后缀的函数),请参见: 阅读全文
posted @ 2018-04-13 10:18 rainbow70626 阅读(350) 评论(0) 推荐(0)
摘要:1) #define是预处理指令,在编译预处理时进行简单的替换,不作正确性检查,不关含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。例如: #define PI 3.1415926 程序中的:area=PI*r*r 会替换为3.1415926*r*r 如果你把#defin 阅读全文
posted @ 2018-04-12 17:12 rainbow70626 阅读(8201) 评论(0) 推荐(0)