C/Cplusplus
Fantasy__MX
这个作者很懒,什么都没留下…
展开
-
VS中如何快速找到某个函数
在VS中,有时候程序编多了,函数越来越多,通过转到定义、转到声明等方法找函数函数很麻烦,这时候可以通过VS上侧的函数列表来看,如下图所示:原创 2015-01-25 18:34:52 · 23056 阅读 · 1 评论 -
MFC RadioButton用法简单介绍
基础介绍:radio button通常都是成组使用的,在一组里面是互斥的。分组的原则是:1、首先将RadioButton控件定好Tab顺序,具体方法:工具栏“格式”—>“Tab键顺序”选项选中,然后按照预定的顺序依次点击对话框上面的RadioButton按钮,Tab键顺序设定完成。2、按照上面的Tab键顺序进行分组,然后设定每组第一个RadioButton的Group属性为TRUE原创 2015-01-25 18:06:02 · 731 阅读 · 0 评论 -
MFC中获取/设置按钮的文字/改变按钮的文字
(1)获取按钮的文本具体示例如下://用于缓冲的临时CStringCStringtempstr;//获取ID_SimPause按钮的文本内容,其中ID_SimPause为按钮的IDGetDlgItem(ID_SimPause)->GetWindowText(tempstr);(2)设置按钮的文本具体示例如下://,其中ID_SimPause为按钮的ID,””内为按钮的文字内原创 2015-01-25 17:59:56 · 13242 阅读 · 0 评论 -
C++中类似C#用于折叠代码的语句
这个微软在VS2005及其以上版本提供的功能,不是C++的标准功能,但是在VS下进行编程时,可以对其代码进行整理、折叠,方便使用。//语法描述#pragma region name#pragma endregion //END//实例代码#pragma region Region_1void Test() {}void Test2() {}void转载 2015-01-25 18:10:56 · 652 阅读 · 0 评论 -
结构体类型的使用
结构体类型是一种非常常用的类型,相对于类,其所有的成员均为public类型,而且只有数据,而没有多余的方法,因此经常使用。使用结构体的主要作用是减少变量数目,并使结构清晰化,代码简单化。特别是对于那种多个地方多次使用的相同类型的变量,更应该封装成结构体。比较常见的一种情况是,我们在一个名为CommonDefine.h的头文件中声明各段代码都共用的结构体类型,然后在其他的头文件中包含这个头文原创 2015-01-25 18:07:08 · 874 阅读 · 0 评论 -
VS2010工程占用空间过大的原因和解决方法
如果不进行特定的设置,用VS2010建立的工程占用磁盘空间会非常的大,原因是VS2010会自动生成.ipch和.sdf文件,用于记录整个开发过程中的变化,这些东西在99.9999%的情况下是完全用不到的,要解决占用空间大的问题,有两种方法:(1)临时性方法:每次复制VS2010工程时在其文件夹中搜索.ipch和.sdf文件,并直接删除,不影响工程的打开和使用。(2)永久性方法:在VS201转载 2015-01-25 18:02:30 · 4239 阅读 · 0 评论 -
在MFC单文档/多文档/对话框环境下添加控制台
在开发过程中,有的时候需要实时查看一些处理结果,或者查看函数的运行时间以判断其性能是否达到要求,但是MFC/对话框环境中并没有控制台,也就是那个常见的黑框框,写了cout代码后,结果也不会输出,为了调试的方便,如何在MFC/对话框环境中加入控制台程序呢?在程序初始化时,开启控制台,并开启读写权限:///测试用,开启控制台,后面destroy里面配套有free::AllocConsole(原创 2015-01-25 18:31:23 · 1166 阅读 · 0 评论 -
MFC状态栏的创建、管理、维护等
一个好的软件,界面非常重要,其中的功能要让客户一目了然。而这些可以借助于工具栏,如在MicrosoftWord中的工具栏,相关的操作基本上都可以借助工具栏来完成。下面,我就将我知道的关于VC中关于工具栏的一些东西写写,与大家共享,不对的地方请大家帮忙纠正。 下面我以VisualStudio.net 2003下的单文档/视图的程序为例说明。 在VS中,实现工具栏的类是CToolBar转载 2015-01-25 18:25:54 · 541 阅读 · 0 评论 -
OpenGL启用双缓冲时颜色变淡或者不纯的解法方法
初学OpenGL,什么都不太会,在开启双缓冲并进行实时绘图的时候发现,颜色和设置的颜色并不完全一样,不太纯正,一直找不到原因,互联网上也搜不到,后来有个偶然的机会,知道了原因,需要在OpenGL环境初始化的时候做一些配置,具体配置非常的简单,在启用深度测试的后面,指定所做的测试类型,代码如下://启用深度测试 ::glEnable(GL_DEPTH_TEST); glDepthFunc(原创 2015-01-25 18:24:51 · 703 阅读 · 0 评论 -
MFC GDI环境HFONT、Cpen类型使用完后必须按时释放
在使用OpenGL编写基于MFC的OpengGL PPI显示器的时候,开始总会有内存溢出,一直找不到原因,后来发现是创建了一个HFONT的字体变量,然后字体用完后没有释放,原本以为HFONT类型的变量和int型变量一样,是一种基本类型,无需手动释放,后来发现,这是微软在MFC GDI环境下提供的一种变量,和Cpen一样,需要做手动释放,具体代码如下: //建立字体 HFO原创 2015-01-25 18:13:10 · 1562 阅读 · 0 评论 -
防止头文件重复包含
在编程中,经常会遇到这种情况,我们的某一个程序会调用多个DLL,因此需要包含多个头文件,不同的头文件可能包含了相同某一个下一级头文件,这就可能会导致头文件的重复包含,从而导致变量/函数的重定义等等,为了解决这个问题,就要求我们在编写Dll的时候,使用#ifndef … #define …#endif来保证头文件的唯一性。具体做法为:(1)头文件的时候,在头文件的最前面写上一些两行,意思原创 2015-01-22 21:56:35 · 413 阅读 · 0 评论 -
在MFC环境下配置OpenGL导致闪屏的解决方案
按照牛四强OpenGL学习中网页的配置方法或者网上的配置方法在MFC框架下配置完OpenGL后,虽然启用了双缓冲,但是仍然会出闪屏的情况,这是由于OpenGL自己有刷新背景的函数glClear,故而应禁止Windows刷新窗口背景。否则,当窗口需要重画时,Windows会自动先发送WM_ERASEBKGND,而缺省的处理函数使用白色的背景刷。当OpenGL使用的背景颜色不是白色时,作图时有一帧白色原创 2015-01-25 18:11:36 · 1649 阅读 · 0 评论 -
OpenGL启用双缓冲时颜色变淡或者不纯的解法方法
初学OpenGL,什么都不太会,在开启双缓冲并进行实时绘图的时候发现,颜色和设置的颜色并不完全一样,不太纯正,一直找不到原因,互联网上也搜不到,后来有个偶然的机会,知道了原因,需要在OpenGL环境初始化的时候做一些配置,具体配置非常的简单,在启用深度测试的后面,指定所做的测试类型,代码如下: //启用深度测试 ::glEnable(GL_DEPTH_TEST); glDepthFunc(原创 2015-01-25 18:21:49 · 950 阅读 · 0 评论 -
C++标准库中vector容器的使用
标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope本质上是一“重型”string。非标准的关联容器hash_set、hase_multiset、hash_map和hash_multimap。容器是具有大小可变的存储空间,这原创 2015-01-25 18:09:11 · 2464 阅读 · 0 评论 -
VS中条件断点调试
在调试的过程中,有时候我们并不想让程序没循环一次就停一次,而是在满足一定的条件下才停止,这就需要使用条件断点,所谓条件断点,顾名思义,就是满足一定条件才能触发的断点,添加方法如下:在VS中添加普通断点(单击代码最左侧或在代码所在行按F9),然后在断点的右侧,代码的左侧,也就是紧靠行号的左边空白处,选择条件选项,如下图所示:在弹出的对话框中设置中断条件,设置完成后,断点内会出现一原创 2015-01-25 18:33:13 · 1432 阅读 · 0 评论 -
我个人理解的C++面向对象的类
C++中类是一个非常重要的概念,也是经常使用的一个东西,平时我们建立对类成员的属性(public、protected、private)并不注意,经常将所有成员都设为public属性的,按照面向对象的标准化思想,在C++建立类时,需要注意:(1)封装:将功能封装成一个个独立的单元,减小耦合,避免牵一发而动全身,降低维护成本。(2)类的成员变量都定义成private类型的,类的成员函数无特殊情原创 2015-01-25 17:59:06 · 421 阅读 · 0 评论 -
Debug模式和Release模式的区别和调试无法看到正确结果的原因
VS中生成/调试中有两种模式Debug和Release,顾名思义,Debug为调试模式,也就是开发者在开发时使用的模式,Release为发布模式,也就是交付给用户使用的时用的模式。在Debug模式下,VS会留出很多的调试信息和调试接口,方便进行程序调试,但是Debug模式下生成的程序拷贝到其他电脑上,只要该电脑没装VS,就肯定用不了,这对用户来说是不可能接受的,用户使用的永远是Release版本的原创 2015-01-25 18:28:56 · 1439 阅读 · 0 评论 -
OpenGL抗锯齿、提高显示效果的设置
OpenGL是一种高效的图形编程库,因此只要不做复杂的图形运算,我们都可以开启OpenGL的抗锯齿、平滑等功能,来增加显示效果,设置需要做在OpenGL画图 前面,一般也就是glBegin的前面,需要记住,OpenGL的效果一次设置,在本程序内一直有效,不需要重复设置,代码如下: //OpenGl设定 glEnable(GL_BLEND); //启用混合功能,将图形颜原创 2015-01-25 18:22:17 · 3716 阅读 · 0 评论 -
CString和内置类型之间的转换
Cstring是MFC中比较好用和常用的一种字符串类型,有时候我们需要将一些例如int、double等的常用类型转换成Cstring类型,具体转换方法如下:(1) float、int、double转Cstring在MFC中可以采用CString内置的函数Format实现,形式如下CString destinationdestination.Format(_T("%??"),sou转载 2015-01-25 18:07:48 · 389 阅读 · 0 评论 -
MFC中如何删除工具栏中多余的图标
刚学习MFC的时候,发现在MFC资源视图里面编辑工具栏的时候,多余的图标没有删除键,其实只要把你要删除的图标按住并往外拖就可以了。原创 2015-01-25 18:26:45 · 1713 阅读 · 1 评论 -
如何让MFC程序只能运行一个?
有时候,有的程序只能运行一个实例,这时候可以在程序中进行控制。在APP::InitInstance()定义个互斥对象,HANDLE m_hMutex; //用于互斥的对象句柄,具体代码如下: m_hMutex = ::CreateMutex(NULL, TRUE, "互斥名(随便取)"); if (GetLastError() == ERROR_ALREADY_EXISTS) //程序已经运转载 2015-01-25 18:04:27 · 900 阅读 · 0 评论 -
MFC中通过代码添加按钮
(1)首在相应类的头文件添加private类型的Cbutton指针的定义;private://牛四强自己定义的//仿真开始按钮CButton *SimStart;(2)在相应类的头文件的DECLARE_MESSAGE_MAP()后添加相应的按钮响应函数的声明;//牛四强自己添加的消息函数afx_msg voidOnBtnSimStart();(3)在相应类的CPP文原创 2015-01-25 18:01:53 · 4452 阅读 · 1 评论 -
MFC下二维OpenGL环境详细配置
一直以来,网上有很多关于OpenGL在MFC环境下配置的教程,但是,一般都说的不够详细,或者配置过程不够完整,今天我在自己摸索和学习的基础了,写出了这篇文章,尽量说明了坐标系的设定、添加深度测试类型以防止颜色变淡或者不纯等等。首先说明,本配置教程配置完成的OpenGL环境为二维环境,坐标系为中心坐标系,客户区中心为OpenGL坐标系的中心,向右为x轴增大方向;向上为y轴增大方向,与其他的配置方法不原创 2015-01-25 18:35:35 · 967 阅读 · 0 评论 -
MFC中菜单图标的实现
在MFC中,为了让自己的程序更美观,更形象,有时候需要添加一些菜单图标,这时候该如何实现呢?(1)单文档的菜单图标实现: 1、新建一个位图资源,大小为13*13,假设ID为IDB_BITMAP1,画好图标 2、在CMainFrame中添加成员变量:CBitmapbitmap 3、在CMainFrame的OnCreate中加入: bitmap.LoadBitmap(IDB_B转载 2015-01-25 18:27:34 · 1432 阅读 · 0 评论 -
利用窗口分割将多EXE嵌入统一程序(MFC)
窗口分割的必要性:有时候我们需要在一个窗口内显示不同的信息,类似于下图所示,每个窗口直接交互并不大,或者我们需要将一个exe嵌入到一个窗口中,这样就用到了窗口分割。窗口分割技术在MFC的单文档文件中比较容易实现,其他编程语言或者对话框可能也可以实现,但是实现起来比较复杂,与此同时没有现成的例子或者函数。实现窗口分割的步骤:(1)建立一个单文档程序:新建—项目—Visual C+原创 2015-01-22 21:38:12 · 3864 阅读 · 2 评论 -
Try-catch异常抛出的简单用法
在简单的编程中,我们一般用if来判断异常,也是非常挫逼的,而且由于异常经常会造成内存泄露等不知名的错误,因此在以后的编程中,我们尽量采用try-catch的模式来进行编程。其简单用法如下:try { //你需要执行的代码,其中可能有异常。一旦发生异常,立即跳转到catch执行 //如果没有异常,则不会执行catch里面的东西原创 2015-01-22 21:54:54 · 5680 阅读 · 0 评论 -
有关CString的头文件(C/C++)
首先,必须要清楚CString是怎么写的,是头两个字母大写!切记,不然就不能用!其次,CString是string的升级版,有很多好用的功能,使用CString一般需要包含头文件atlstr.h,在MFC程序中,可能不用包含,因为CString是MFC的基础功能。原创 2014-05-21 21:40:43 · 13603 阅读 · 0 评论 -
如何调用自己编写的DLL
首先,将DLL工程的头文件复制需要使用DLL的工程里,因为里面声明了dll中的各种函数。然后,将生成的**.lib和**.dll复制到需要使用DLL的工程中,这相当于把功能的实现模块加了进来。最后,在源代码中声明载入DLL,即#pragmacomment(lib,”baseModel.lib”)。原创 2014-05-21 21:55:55 · 720 阅读 · 0 评论 -
调用带输入参数的exe(C++)
调用一个exe程序有很多方法,这里以调用带参数的exe为例子,因为这样的更通用一点,主要用到的函数为ShellExecute,首先需要包含两个头文件:windows.h和shellapi.h,然后下面的以具体代码为例子:原创 2014-05-21 21:43:37 · 3384 阅读 · 1 评论 -
C++读取txt示例程序
此示例在VS2012下编译通过#include#includeusing namespace std;int main(){char timu[90][1000];ifstream object;object.open("timu.txt", ios::in);if(!object)cout<<"Openerror!"int i=0;for(;object.good();原创 2014-03-17 15:40:08 · 547 阅读 · 0 评论 -
编写DLL中调用其他DLL
如果你在编写一个dll的时候调用了另一个DLL的功能,那么你自己写的那个新生成的DLL不能独立使用,使用时需要你编写的DLL和LIB,以及你调用的DLL才能正常使用。原创 2014-03-25 22:03:15 · 2787 阅读 · 0 评论 -
谈debug版本可以正常运行,而在rel…
以前在学校时,经常碰到这样的情况:程序在Debug模式下运行的好好的,可是一换到Release模式下,就出错,实在很郁闷,而当时还经常天真的以为是工程文件有问题,也没有去分析原因;直到上次有位同事也碰到类似的问题,于是想拿那个程序来开开刀~(1)程序出现崩掉原因程序出现崩掉,一般都是访问到非法地址或数组越界访问了;但为什么debug可以,而release不行呢?于是就需要分析debug模式转载 2014-03-17 15:40:14 · 742 阅读 · 0 评论 -
MFC中通过按钮调用其他对话框
1.在资源视图中找到dialog,新建dialog,命名为DLG(名字随意),这个dialog就是你要点击后出来的对话框,楼主自己对这个对话框进行设计。Ø 2.找到你要点击的按钮,双击,在显示的函数中添加一下代码:DLG dlg;dlg.DoModal();//模态对话框 3.在当前的文件中的最前面添加#include"DLG.h" 4.运行程序。原创 2014-03-30 20:46:22 · 1551 阅读 · 0 评论 -
C++调用MATLAB引擎
第一步:添加库和包含目录以VS2005为例,选择 项目——属性——配置属性——C/C++——附加包含目录添加包含(include)目录:F:\ProgramWin8\Matlab2007b\extern\include选择 项目——属性——配置属性——链接器——附加库目录添加库(Libray)目录:F:\ProgramWin8\Matlab2007b\extern\lib\win3原创 2014-03-30 20:48:38 · 931 阅读 · 0 评论 -
Matlab 执行engEvalString命令介绍
MATLAB与VC混合编程指导书在调用 Matlab 引擎之前,首先应在相关文件中加入一行: #include "enging.h" ,该文件包含了引擎 API 函数的说明和所需数据结构的定义。可以在 VC 中调用的引擎函数分别如下:1、引擎的打开和关闭 engOpen -打开 Matlab engine 函数声明:Engine *e转载 2014-03-30 20:45:20 · 1090 阅读 · 0 评论 -
VS2012无法正常读取txt的一种解决…
刚开始用VS2012,以前一直用VC6.0,最近编了一个程序,用VC6.0可以正常读取txt,一到VS2012里就出现了一闪然后不停执行,跳不出循环的问题,发现是VS2012默认运行目录的问题,要读取的txt要放到其默认目录下,就可以了。那么VS2012的默认运行目录是什么呢?比如你建立了一个叫a的project,源文件是a.cpp,那么工程文件夹就是a,a目录下还有一个文件夹a,VS默认的运原创 2014-03-17 15:40:10 · 1125 阅读 · 0 评论 -
带输入参数的exe编写(C++)
以一个简单的例子作介绍#include//ECHO.CPPmain(int argc,char *argv[]) { for(int i=0;i<argc;i++)cout<<argv[i]<<'\t'; cout<<'\n';}原创 2014-05-21 21:41:33 · 3443 阅读 · 0 评论 -
设置工作路径(C++)
为什么要设置工作路径呢?实验室的很多exe都依赖于一些lib库啊或者xml什么的,任何exe都以自己所在的文件夹为默认工作路径,如果你写了一个exe调用1510实验室的exe,恰巧你编的exe又不和1510实验室的exe在一个文件夹内,那么就会出现被调的1510实验室的exe找不到xml表的情况,因为1510实验室的exe在默认的工作路径进行寻找,结果肯定是找不到的,这时候,就需要设置工作路径,将原创 2014-05-21 22:00:49 · 5023 阅读 · 0 评论 -
错误不能将参数“**”转换为“LPCWSTR”的解决方法(C++)
在用VS编程的时候经常会遇到这种问题,不能互转,特别蛋疼,解决方法其实很简单,点击 项目—属性—常规,将使用字符集的选项由“使用 Unicode 字符集”改为“使用多字节字符集”原创 2014-05-21 21:45:16 · 1394 阅读 · 0 评论 -
基于计算机时钟晶振的高精度时间的获取
有时候我们需要计算某次仿真的运行时间,以来计算时效比,也就是说实际中1秒钟的时间我们的仿真要消耗多少实际时间,这就需要我们在程序运行前,获取一次系统时间,程序运行后,获取一次系统时间,两次相减,就是用的时间。获取时间可以用17中的方法获取,但是这个函数耗时间长,而且会由于线程占用等导致获取的时间不稳定,因此我们需要一种更精确的计时方法。在Windows操作系统当中,QueryPerform原创 2015-01-22 21:31:09 · 2651 阅读 · 0 评论