
原创文章
文章平均质量分 71
cbNotes
这个作者很懒,什么都没留下…
展开
-
map容器插入数据的4种方法
在构造map容器后,我们就可以往里面插入数据了。这里讲四种插入数据的方法:第一种:用insert函数插入pair数据:在VC下请加入这条语句,屏蔽4786警告 #pragma warning (disable:4786) ) mapint, string> mapStudent; mapStudent.insert(pairint, string>(1, "原创 2017-08-02 18:56:50 · 20839 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(2):Boost.Conversion
Conversion库包含有一些函数,它们是现有的强制类型转换操作符(static_cast, const_cast, 和 dynamic_cast)的增强。Conversion为安全的多态转换增加了 polymorphic_cast 和 polymorphic_downcast,为安全的数字类型转换增加了 numeric_cast,为文本转换(如string 和 double间的转换)增加 le原创 2016-10-19 13:17:33 · 1539 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(1):智能指针Boost.smart_ptr
我们学习C++都知道智能指针,例如STL中的std::auto_ptr,但是为什么要使用智能指针,使用它能带给我们什么好处呢?最简单的使用智能指针可以不会因为忘记delete指针而造成内存泄露。还有如果我们开发或者使用第三方的lib中的某些函数需要返回指针,这样的返回的指针被client使用的时候,lib就会失去对返回的指针的控制,这样delete的指针的任务一般就会交给调用方client原创 2016-10-19 11:48:37 · 2078 阅读 · 0 评论 -
VS2010远程调试环境配置详解
VS2010远程调试环境配置详细讲解: 阅览下文之前,请看相关符号说明:1. A 代表本地机,即就是研发机 (以下示例为Win764位)2. B 代表远程机,即就是客户机 (以下示例为WinXp32位)3. (###) 括号中的内容为命令顺序 【1】具体步骤(1)在A机上(运行—cmd-ipconfig)获取A机的ipA(p转载 2016-10-14 09:36:48 · 3251 阅读 · 0 评论 -
等待光标的两种实现方式
有时候在做烦琐的工作时,希望鼠标处于忙状态,有两种简单的方法来实现1.采用ApI函数,大多数采用此方法:BeginWaitCursor();.....处理......EndWaitCursor();该方法这两个函数必须配对使用,并注意处理中提前退出的处理情况,可能一个BeginWaitCursor()函数要对应多个EndWaitCursor();函数。2.采原创 2016-10-13 17:18:51 · 2193 阅读 · 0 评论 -
结构体中用CString的请注意了,不能使用memset()函数来初始化结构体
定义结构体CMyTest{ CString strName; int n;} MyTest;如果memset(MyTest,0,sizeof(MyTest));则会引起程序崩溃,如果想用memset,CString 换为string即可.关于崩溃原因愚人认为CString的内存分配机制与STL中的string不同.由于时间原因,来不及分析两者的不同点,请其他原创 2016-07-04 11:40:30 · 2187 阅读 · 2 评论 -
C++中for循环的5种语法,你可知道?
在最新的C++中,支持for循环的5种用法,你可知道?#include #include //////////////////////////////////////////////int nArray[] = {0, 1, 2, 3, 4, 5};std::vector vecNum(nArray, nArray + 6);CString strText;// 第一种用法:最原始原创 2015-11-19 17:16:41 · 22502 阅读 · 3 评论 -
使用CCriticalSection类的注意事项
在类中使用CCriticalSection变量时,必须要将CCriticalSection变量定义为全局变量和静态变量,否则将出现未定义的错误。如:// a.h 文件class A:public CWnd{private: static CCriticalSection m_cs; ...};//a.cpp 文件CCriticalSection原创 2015-03-17 11:31:32 · 2975 阅读 · 0 评论 -
在DLL中资源切换的两中方法
方法一:AFX_MANAGE_STATE(AfxGetAppModuleState());// MFC扩展dll或AFX_MANAGE_STATE( AfxGetStaticModuleState());//常规Regular dll方法二:HMODULE hDLL=GetModuleHandle("SourceChange.dll"); HINSTANCE hEXE原创 2015-03-19 10:14:49 · 3888 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(3):Boost.Utility
Boost.Utility一些本不应在一个库里出现的有用的东西,只是因为它们每个都不太复杂和广泛,不足够形成一个单独的库。但不是说它们没有什么用外;事实上小的工具通常都有最广泛的用处。在Boost, 这些小工具被集中起来,形成一个称为Utility的库。你可以在这找到checked_delete, 一个函数,用于确认在删除点的类型是完整的;还有类noncopyable,用于确保类不能被复制原创 2016-10-19 13:42:17 · 1609 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(4):Boost.Operators
Boost.Operators Operators库提供了相关操作符及概念(LessThanComparable, Arithmetic,等等)的实现。定义一个类型的操作符时,保证所有操作符都有定义是一件乏味并容易出错的工作。例如,你提供了operator, 和 operator>= 。Operators可以根据给定类型的最小的用户自定义操作符集合,自动声明并定义其它所有的相关操作符。原创 2016-10-19 13:58:50 · 3494 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(12):Boost.Signals
Boost.Signals信号和接收系统,基于称为publisher-subscriber 和 observer的模式,它是在一个最小相关性系统中管理事件的重要工具。很少有大型应用软件不采用这种强大设计模式的某种变形,尽管他们有各自的实现方式。Signals提供了一个已验证的、高效的手段,将信号(events/subjects)的发生和这些信号要通知的接收者(subscribers/obs原创 2016-10-19 16:31:26 · 2652 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(11):Boost.Function
Boost.FunctionFunction库实现了一个泛型的回调机制。它提供了函数指针、函数对象和成员函数指针的存储和后续的调用。当然,它与binder库,如 Boost.Bind 和 Boost.Lambda一起工作,大大提高了回调(包括带态度的回调函数)的使用机会。Function常用于需要把函数指针用于回调的地方。例如:信号/接收者的实现,GUI与业务逻辑的分离,以及在标准库容器中原创 2016-10-19 16:18:45 · 2720 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(10):Boost.Lambda
Boost.LambdaLambda为C++提供lambda表达式及无名函数。在使用标准库算法时特别好用,Lambda允许函数在呼叫点创建,避免了创建多个小的函数对象。使用lambdas意味着更少的代码,在哪需要就在哪写,这比分散在代码各处的函数对象更清晰、更好维护。Lambda 库如何改进你的程序?对函数和函数对象进行适配,使之可用于标准库算法绑定参数到函数调用将原创 2016-10-19 16:02:19 · 2384 阅读 · 1 评论 -
C++“准”标准库Boost学习指南(9):Boost.Bind
Boost.BindBind是对标准库的绑定器bind1st 和 bind2nd的泛化。这个库支持使用统一的语法将参数绑定到任何类似于函数行为的东西,如函数指针、函数对象,以及成员函数指针。它还可以通过嵌套绑定器实现函数组合。这个库不要求那些对标准库绑定器的强制约束,最显著的就是不要求你的类提供typedefs result_type, first_argument_type, 和 sec原创 2016-10-19 15:26:46 · 1868 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(8):Boost.Tuple
Boost.Tuple在标准C++中有Pairs(类模板 std::pair), 但它不支持n-tuples。用Tuple.不象用structs 或 classes 来定义n-tuples, 这个类模板支持直接声明和使用,如函数返回类型或参数,并提供一个泛型的方法来访问tuple的元素。Tuple已经被即将发布的Library Technical Report所接受。Tuple 库原创 2016-10-19 15:06:10 · 2342 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(7):Boost.Variant
Boost.VariantVariant库包含一个不同于union的泛型类,用于在存储和操作来自于不同类型的对象。这个库的一个特点是支持类型安全的访问,减少了不同数据类型的类型转换代码的共同问题。Variant 库如何改进你的程序?对用户指定的多种类型的进行类型安全的存储和取回在标准库容器中存储不同类型的方法变量访问的编译期检查高效的、基于栈的变量存储原创 2016-10-19 14:52:33 · 1904 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(6):Boost.Any
Boost.AnyAny库支持类型安全地存储和获取任意类型的值。当你需要一个可变的类型时,有三种可能的解决方案:无限制的类型,如 void*. 这种方法不可能是类型安全的,应该象逃避灾难一样避免它。可变的类型,即支持多种类型的存储和获取的类型。支持转换的类型,如字符串类型与整数类型之间的转换。Any实现了第二种方案,一个基于值的可变化的类型,无限可能的类型。这个原创 2016-10-19 14:42:34 · 2375 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(5):正则表达式库 Boost.Regex
Boost.Regex正则表达式是解决大量模式匹配问题的基础。它们常用于处理大的字符串,子串模糊查找,按某种格式tokenize字符串,或者是基于某种规则修改字符串。由于C++没有提供正则表达式支持,使得有些用户被迫转向其它支持正则表达式的语言,如Perl, awk, 和 sed。Regex提供了高效和强大的正则表达式支持,基于与STL同样的前提而设计,这使得它很容易使用。Regex已被即原创 2016-10-19 14:10:08 · 1727 阅读 · 0 评论 -
用SendMessage/PostMessage发送WM_SIZE消息
一般情况下,调用MoveWindow()/SetWindowPos()函数会自动引发WM_SIZE消息,但有时候也需要手工发送该消息,使窗口调整大小和布局。SendMessage()和PostMessage()函数发送WM_SIZE的格式是一样的,在此就只以SendMessage()函数为例。LONG xy;xy =MAKELONG(x, y);SendMessage(WM_原创 2015-02-04 17:44:48 · 9761 阅读 · 0 评论 -
关于Cwnd::Create()函数出现afxwin1.inl line:21错误的解决方法
我最近在调试一个dll时,出现了一个莫名的断言错误,就是在主程序中创建由MFC 扩展DLL导出的一个控件(该控件继承自CWnd类)时,一调用Create()函数就出现下面的的断言错误:调试跟进去:file:afxwin1.inl line:21 发现是下面的断言语句报错:_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetResource原创 2014-10-09 16:54:36 · 9004 阅读 · 1 评论 -
绝对值函数abs、fabs等的使用
求数字的绝对值,vc++提供的库函数的支持,当必须包含:#include 其中又分好几种类型:abs、_abs64、fabs、fabsf、labs、_cabs。详细说明如下://Calculate the absolute value.int abs( int n );long abs( long n ); // C++ onlydouble abs原创 2014-08-29 10:44:20 · 49946 阅读 · 0 评论 -
MFC多线程的创建,包括工作线程和用户界面线程
MFC多线程的创建1.MFC多线程简介MFC对多线程进行了一层简单的封装,在Visual C++中每个线程都是从CWinThread类继承而来的。每一个应用程序的执行都有一个主线程,这个主线程也是从CWinThread类继承而来的。可以利用CWinThread对象创建应用程序执行的其它线程。MFC用CWinThread对象来表示所有线程。利用MFC可以创建两种线程,分别称之为工作者线程原创 2013-01-04 16:41:40 · 78981 阅读 · 18 评论 -
VC++实现切换按钮
VC++实现切换按钮有时候要实现两个选项的切换,常规做法1是放两个Radio按钮控件,并设置这两个按钮为一组。2是放一个Check按钮控件。但感觉都不是那么理想和直观。有没有更好的实现方式呢?下面将给你介绍一种我自绘的控件,我把它命名为“切换控件”(SwitchButton)。实现的效果如下图实现,给你一个多的选择,以供参考。下面是实现源码://////////////////原创 2013-01-23 14:19:47 · 4314 阅读 · 1 评论 -
采用_beginthread/_beginthreadex函数创建多线程
1、CRT简介:CRT: (C Runtime Library)即C运行时库,是系统运行的基础,包含了c常用的函数集(如:printf,malloc,strcpy等),为运行main做了初始化环境变量、堆、io等资源,并在结束后清理。在Windows环境下,VC提供的 C run-time library又分为动态运行时库、静态运行时库、多线程、单线程、调试版本(Debug)、发行版本(R原创 2012-12-19 14:20:36 · 18906 阅读 · 1 评论 -
在VS2008的解决方案中添加多个现有工程的方法
在以前的VS6.0中,可以在工作面板中添加多个项目,有响应的菜单项(Project>Insert Project Into Workspace...),非常的方便。但在VS2008中,缺找不到相应的菜单,难道是不支持多项目吗?不是的!在VS2008中也提供该功能,只不过移动了位置和换了名称。具体位置为:【文件>添加>现有项目..】,如下图所示:注意事项: 1.有人反映,原创 2012-12-11 14:08:03 · 6300 阅读 · 0 评论 -
VS2008增加ActiveX控件测试容器(Vista或者windows7系统可用)
1. TSTCON32.exe的编译:在编写Activex控件时,可以用到Active X control test container来测试Activex控件,这在Visual Studio 6.0里面是很方便查找的,工具菜单下面就有。但是在Visaul studio 2008 里面TSTCON32.exe这个文件却消失了。是微软疏忽忘了吗?不是的,而是微软把它放在了例子程序里面(提供源码)原创 2012-12-11 11:23:06 · 4073 阅读 · 1 评论 -
采用CreateThread()创建多线程程序
采用CreateThread()创建多线程程序在window环境下,Win32 提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作:1、主要的函数列表:序号函数名功能1CreateThread()创建一个新线程2ExitThread()正原创 2012-12-10 11:44:59 · 67051 阅读 · 12 评论 -
Main()函数纠错
Main()函数纠错----------------你使用对了吗?在C/C++程序中,都必须有一个主函数(入口函数),这个函数就是main()函数,先看看他们的标准定义吧: (1) C语言中C89:2种,当时还没有void类型int main();//不带参数main( );//可选,因为默认的返回类型就是int,所以可以省略。int main( int argc, c原创 2012-11-25 10:27:56 · 2068 阅读 · 1 评论 -
为 adobe reder(pdf文件)添加书签
为 adobe reder(pdf阅读器)添加书签--------完美解决中文乱码和支持reder10.0/reader11.0从adobe reder的官方说明书中可以看到,adobe reder是不支持书签功能的。这给我们阅读带来了很大的麻烦,我每次都是在桌面新建一文本文件,专门用来记录书签信息。(当然,adobe reder支持一种类似的功能,即:视图->页面导览->上一视图,它记录原创 2012-11-29 15:17:50 · 4060 阅读 · 0 评论 -
EAN码详解
EAN码详解1. EAN码介绍EAN(European Article Number) 码是国际物品编码协会(INTERNATIONAL ARTICLE NUMBERING ASSOCIATION)制定的一种商品用条码,通用于全世界。是定长的、纯数字型的、连续型的、四种单元宽度的一维条码,它表示的字符集为数字0~9。EAN码符号有标准版(EAN-13)和缩短版(EAN-8)两种标准版表示1原创 2013-01-16 17:04:08 · 24204 阅读 · 1 评论 -
线程间的通信
线程间的通信1.线程之间的通信简介一般而言,在一个应用程序中(即进程),一个线程往往不是孤立存在的,常常需要和其它线程通信,以执行特定的任务。如主线程和次线程,次线程与次线程,工作线程和用户界面线程等。这样,线程与线程间必定有一个信息传递的渠道。这种线程间的通信不但是难以避免的,而且在多线程编程中也是复杂和频繁的。线程间的通信涉及到4个问题:(1) 线程间如何传递信息(2) 线程原创 2013-01-18 11:54:35 · 51944 阅读 · 7 评论 -
VC++实用宏定义
前言:在日常的编程工作中,常常定义一些实用的宏方便调用,该文章将收集一些常用的宏供大家参考,欢迎大家讨论和添加!指针释放最常用的就是指针的安全释放。对应new的释放#define ReleasePtr(Ptr) {\if (Ptr != NULL)\{\delete Ptr;\Ptr = NULL;\}\}对于new数据的释放#defi原创 2014-08-28 16:47:30 · 2474 阅读 · 0 评论 -
delete 和 delete []的真正区别
c++中对new申请的内存的释放方式有delete和delete[两种方式,到底这两者有什么区别呢?1.我们通常从教科书上看到这样的说明:delete 释放new分配的单个对象指针指向的内存delete[] 释放new分配的对象数组指针指向的内存那么,按照教科书的理解,我们看下下面的代码:int *a = new int[10];delete a; //方原创 2014-08-28 17:18:57 · 60554 阅读 · 8 评论 -
VC工程垃圾清理小工具(.bat)
用VS写的C++项目工程目录里总是有一些不需要的临时编译文件或VS的数据索引文件,这些文件体积具大,比如.sdf文件经常达到70M左右,这给代码备份带来了一些麻烦。代码备份时,只需要留下一些需要的源文件,而这些文件往往加起来只有不到1M,所以清理工程目录是一个非常有必要做的事情。以下是一个清理工程目录的.bat工具:@echo offecho =============原创 2014-08-28 16:36:12 · 4821 阅读 · 0 评论 -
在DLL间或者DLL与EXE之间传递vector对象或指针的问题
vector 析构 容器 dll接口 exe原创 2014-08-14 11:15:00 · 6419 阅读 · 0 评论 -
在用户线程/主线程中推荐MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()函数
多线程同步,采用WaitForSingleObject和WaitForMultipleObjects()函数出现卡死现象,采用MsgWaitForMultipleObjects代替可以解决此类问题。原创 2014-08-15 13:03:41 · 7736 阅读 · 0 评论 -
多线程同步方式一:临界段
多线程同步方式一:临界段1.常见问题在一个进程中,多个线程是共享进程资源的,而由于线程的并发操作,如果不加控制,就有可能出现多个线程同时操作共享资源的情况,而造成操作混乱或出差等。有可能你不太相信,请看下面的一个实例,你可能会真实感受到问题的所在。实例1说明:一个线程一次产生5个相同的随机数,另一个线程将这5个数输出。//.h文件//声明线程处理函数unsigned _原创 2013-02-18 11:52:48 · 4358 阅读 · 1 评论 -
线程间的同步概述
线程间的同步概述1.前言前面几篇文章着重介绍了多线程的三种创建方式及多线程间的4种通信方式,并采用大量的实例演示,相信大家对线程的创建和使用有了一定的了解。若还不了解请复习下前面的文章,多动手写代码和调试,光看不练,假把式。今天先请大家看看下面一个多线程程序,操作很简单,就是创建9个线程,并输出相应的线程编号(即报数)。主要代码如下://声明线程处理函数unsigned __原创 2013-01-21 16:29:20 · 6021 阅读 · 0 评论 -
获取系统日期时间的简单方法
获取系统日期时间的简单方法不用MFC类,直接使用C/C++ANSI标准库函数1.time.h简介日常编程中,常常需要获取系统的日期时间或对相关日期时间进行简单处理等。我常常使用MFC类库中的CMonthCalCtrl、 CDateTimeCtrlCTime/CTimeSpan、COleDateTime/COleDateTimeSpan等类,它们提供了很强大的功能。但有时仅仅只需要获原创 2013-01-09 11:47:56 · 14292 阅读 · 0 评论