
C++
代码搬运工007
这个作者很懒,什么都没留下…
展开
-
socket通信阻塞模式下,设置发送和接受函数超时
今天公司项目上遇到了一个问题,就是用到socket与服务器通信时,接收数据会突然有一次接收不到数据。但是项目代码使用阻塞程序写的,所以程序就一直卡在接收函数不能动。开始为了解决这个问题可以说是费劲周折。先是用了定时器,但是项目代码用的是多进程,要涉及到进程间通信的问题。 后面从网上搜到了下面这一段文字,帮助了我的大忙,真是太感谢了。在阻塞状态下,接收和发送函数同样可以设置接受发送超时时间,而只要...转载 2018-08-27 10:45:48 · 4937 阅读 · 0 评论 -
UniCode下字符常见的一些问题(二)
Unicode下字符转换 . TCHAR是一种字符串类型,它让你在以MBCS和Unicode来build程序时可以使用同样的代码,不需要使用繁琐的宏定义来包含你的代码,而char代表ASCII的字符if def UNICODE TCHAR = wcharelse TCHAR = char 所以用MBCS来build时,TCHAR是char,使用UNICODE时,TCHAR是wchar_t原创 2016-08-26 11:49:45 · 646 阅读 · 0 评论 -
UniCode下字符常见的一些问题(一)
1、为什幺要使用Unicode?(1) 可以很容易地在不同语言之间进行数据交换。(2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。(3) 提高应用程序的运行效率。 Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那幺系统首先要将字符串转换成 Unicode,然后将Unicode字符串传递给操作系统。如果原创 2016-08-26 11:34:27 · 1252 阅读 · 0 评论 -
CDockablePane使用心得
CFrameWndEx 在框架类的头文件中定义一个CDockablePane的数组CDockablePane m_Panes[5];//一个CDockablePane的数组CFrameWndEx:: OnCreate() 在Create函数中自动生成了一下代码,对MFC比较熟悉的这里就不讲了CMFCPopupMenu::SetForceMenuFocus(FALSE);InitUserToolb转载 2016-06-21 14:31:05 · 1221 阅读 · 1 评论 -
C++ const 的全面介绍
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。 Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示: No. 作用 说明 参考代码 1 可以定义转载 2016-06-20 15:49:42 · 370 阅读 · 0 评论 -
MFC List Control 控件添加单元格编辑和单元格下拉列表项
原理很简单:就是在点击到列表相应单元格的时候,在相应的位置生成一个跟单元格大小相当的编辑框或者下拉列表框并贴在单元格上面而已。 实现如下: 在对话框类声明中添加如下变量和函数:头文件中添加:int e_Item; //刚编辑的行 int e_SubItem; //刚编辑的列 CEdit m_Edit; //生成单元编辑框对象bool haveeditcreate;//标志编辑框已经转载 2016-06-17 11:42:51 · 15042 阅读 · 3 评论 -
MFC 列表视图控件List Control 使用一
列表视图控件的创建MFC同样为列表视图控件的操作提供了CListCtrl类。如果我们不想在对话框模板中直接拖入List Control来使用列表视图控件,而是希望动态创建它,则要用到CListCtrl类的成员函数Create函数,原型如下:virtual BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd,转载 2016-06-17 11:30:41 · 18798 阅读 · 2 评论 -
MFC对话框扩展区域显示(可伸缩对话框区域)
一、新建对话框程序对话框布局为:黑色区域为初始显示区域。红色区域为扩展区域。二、在OnInitDialog()中添加获取区域代码:.h头文件/// 成员变量CRect m_rect; //黑色区域 + 红色区域CRect m_rtFace; // 黑色区域GetWindowRect(&m_rect); /// IDC_STATIC_TITLE,静态文本Static的IDGetDl原创 2016-06-16 17:47:45 · 3933 阅读 · 0 评论 -
CString、TCHAR*、char*转换
1:将CString 转换为 TCHAR* TCHAR* CPublic::CString2TCHAR(CString &str) { int iLen = str.GetLength(); TCHAR* szRs = new TCHAR[iLen]; lstrcpy(szRs, str.GetBuffer(iLen)); str.ReleaseBuffer转载 2016-07-12 15:30:27 · 644 阅读 · 0 评论 -
多字节与UTF-8、Unicode之间的转换(二)
1、多字节编码转为UTF8编码 2、UTF8编码转为多字节编码 3、多字节编码转为Unicode编码 4、Unicode编码转为多字节编码 5、UTF8编码转为Unicode 6、Unicode编码转为UTF81、多字节编码转为UTF8编码 bool MBToUTF8(vector<char>& pu8, const char* pmb, int32 mLen) {转载 2016-07-12 15:22:12 · 1220 阅读 · 0 评论 -
Unicode字符集和多字节字符集关系(一)
Unicode字符集和多字节字符集关系 在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母、数字、标点符号等常用字符。之后,又进行扩展,使用8 bits表示一个字符,可以表示256个字符,主要在原来的7 bits字符集的基础上加入了一些特殊符号例如制表符。 例如在GB-2312字符转载 2016-07-12 14:56:02 · 811 阅读 · 0 评论 -
C++动态库(Dll)的制作,导出类
1、完成类的封装: 如:CMyTestClass类/// CMyTestClass.h头文件中/************************************************************************* Copyright(c) 2000-2013 Company Name* All rights reserved.** 文件名称: CMyT原创 2016-06-03 16:24:20 · 10144 阅读 · 2 评论 -
利用OpenSSL库对Socket传输进行安全加密(RSA+AES)
利用OpenSSL库对Socket传输进行安全加密(RSA+AES) 1. 利用RSA安全传输AES生成密钥所需的Seed(32字节) 2. 利用AES_encrypt/AES_decrypt对Socket上面的业务数据进行AES加密/解密理论上只需要AES就能保证全部流程,但由于AES加密所需要的AES-KEY是一个结构。 这个一个结构,如果通过网络进行传输,就需要对它进行网络编码,Ope转载 2016-05-27 13:58:09 · 2947 阅读 · 0 评论 -
MFC中功能键键值(转)
MSG中的wParam 键盘常用ASCII码 ESC键 VK_ESCAPE (27) 回车键: VK_RETURN (13) TAB键: VK_TAB (9) Caps Lock键: VK_CAPITAL (20) Shift键: VK_SHIFT () Ctrl键: VK_CONTROL (17) Alt键: VK_MENU (18) 空格键: VK_SPACE (/32) 退转载 2016-10-11 11:45:18 · 1651 阅读 · 0 评论 -
GDI+学习及代码总结之------区域
在GDI+中,对于区域的部分基本上使用了GDI的区域构造函数与合并方法,所以我们先看看GDI中的区域是如何构造与操作的。GDI中区域构建与操作一、基本函数创建矩形区域:[cpp] view plaincopyHRGN CreateRectRgnIndirect(CONST RECT *lprc); HRG转载 2015-08-31 17:20:25 · 666 阅读 · 0 评论 -
Windbg的gflags.exe调试堆栈溢出,访问越界等问题。
gflags.exe是Windbg下的一个小工具,非常好用,对于调试程序隐藏的bug很有帮助。 如:我在vs2015中遇到访问越界的问题,但程序不会在越界的地方发生崩溃中断,而是在一个不可能存在访问错误的地方发生了错误,以至于无法定位问题的位置。 所以在网上看到了Windbg的方法,一开始对Windbg不是很了解,熟悉之后发现Windbg很强大,虽然只用到了其中的一个小工具g原创 2017-06-28 14:22:42 · 8883 阅读 · 4 评论 -
C++11 新的计时方法——std::chrono 大法好
计时有很多用途,比如:测试某一段代码的运行时间,时间越短,则性能相对越高。计时有很多方法,我将首先给出我以前常用的一种计时方法,然后给出我认为的最佳方法(采用了C++11的标准技术)。首先给出我以前常用的一种“传统”的计时方法:#include <ctime>using namespace std;clock_t start = clock();// do something...clock_转载 2017-08-14 15:37:13 · 13834 阅读 · 2 评论 -
MFC Ribbon下禁用状态栏CMyRibbonBar右键,快速访问工具(CMFCRibbonQuickAccessToolBar),关闭ApplicationButton响应
1、禁用CMyRibbonBar右键 新建CMyRibbonBar 类,继承CMFCRibbonBar,重载OnShowRibbonContextMenu。//屏蔽CMFCRibbonBar中的右键菜单,重载OnShowRibbonContextMenu();class CMyRibbonBar : public CMFCRibbonBar{protected: virtual BO原创 2017-04-07 17:43:54 · 4208 阅读 · 1 评论 -
C++中的static关键字
C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下:转载 2017-02-14 09:37:53 · 503 阅读 · 0 评论 -
在单文档程序中动态切换多个窗体(附图)
操作系统:Windows 7软件环境:Visual Studio 2008 SP1本次目的:在单文档程序中动态切换多个窗体 此文章转自网上,本人在最新的2008 SP1试验通过,现将步骤(转帖)和过程图片(本人自己截图)记录如下。摘要:本文通过一个程序实例描述了在VC++6.0下如何在单文档程序中通过菜单动态控制多个窗体的切换。 一、 引言 我转载 2016-02-25 13:58:54 · 795 阅读 · 0 评论 -
【C++11】随机数函数库random
1.随机数由生成器和分布器结合产生生成器generator:能够产生离散的等可能分布数值 分布器distributions: 能够把generator产生的均匀分布值映射到其他常见分布,如均匀分布uniform,正态分布normal,二项分布binomial,泊松分布poisson2.分布器利用运算符()产生随机数,要传入一个generator对象作为参数std::default_random_e原创 2017-01-06 14:53:07 · 1749 阅读 · 0 评论 -
实战c++中的vector系列--正确释放vector的内存(clear(), swap(), shrink_to_fit())
关于vector已经写的差不多了,似乎要接近尾声了,从初始化到如何添加元素再到copy元素都有所涉及,是时候谈一谈内存的释放了。是的,对于数据量很小的vector,完全没必要自己进行主动的释放,因为那样对程序的效率几乎没有影响。但是当vector中存入大量的数据后,并且都数据进行了一些操作,比如删除后,如果我们能积极主动的去释放内存,那么是非常明智的。写到这里,应该明确了size和capacity的转载 2016-11-11 10:51:33 · 734 阅读 · 0 评论 -
CMFCRibbonStatusBar状态栏修改
既然要显示时间,一个定时器是免不了了,在CMainFrame::OnCreate()函数中添加一个 1. SetTimer(1, 1000, NULL); 1、表示的是EventID,可以设置多个Timer,传递不同的EventID便有不同的时间间隔。 1000表示的是1000ms,每隔1000ms执行一次定时器内的代码。 第三个参数是一个DWORD值,包含定时器标识,一般设为NUL转载 2016-11-09 11:29:09 · 2929 阅读 · 1 评论 -
计算几何-多边形的重心
1. 1 累加和求重心设平面上有N 个离散数据点( xi , yi ) ( i = 1, 2, ., n) , 其多边形重心G( . x1, . y1) 为: 这是求多边形最简单直观的方法。可以直接利用离散数据点的x, y坐标就能求图形重心。但是缺陷在于没有对离散数据点所围图形做任何处理和分析,精度不够。1. 2 算法一:在讲该算法时,先要明白下面几个定理。定转载 2014-11-17 10:25:50 · 1884 阅读 · 0 评论 -
多边形重心公式算法
多边形重心公式算法,有需要的朋友可以参考下。网上看了很多,但是有的需要序列逆序,但是,对顶点序列转置后计算的重心坐标还是不正确,话费好长时间找到这个,测试一些可以使用,如果有什么不正确的,希望可以指出来,我也好及时的更正。多边形的重心公式:1、多边形重心公式,需要知道每个顶点坐标,令面积为area,则 | Xi X(i+1)| area = s转载 2015-01-21 14:56:27 · 8456 阅读 · 2 评论 -
任意多边形的面积公式
设Ω是m边形(如下图),顶点沿边界正向排列,坐标依次为 建立Ω的多边形区域向量图。 由图知坐标原点与多边形任意相邻的两个顶点构成一个三角形,而三角形的面积可由三个顶点构成的两个平面向量的外积求得。 任意多边形的面积公式 多边形计算公式的计算和原点的选取没有关系,通常可以选点(0,0)或者多边形的第一个点(这个时候比较直观了,看起来就是把多边形分成一个个三角形和加起来,读者自己可以画个原创 2016-09-28 15:25:25 · 4614 阅读 · 0 评论 -
判断点在多边形内,水平/垂直交叉点数判别法(适用于任意多边形)
2、 水平/垂直交叉点数判别法(适用于任意多边形)注意到如果从P作水平向左的射线的话,如果P在多边形内部,那么这条射线与多边形的交点必为奇数,如果P在多边形外部,则交点个数必为偶数(0也在内)。所以,我们可以顺序考虑多边形的每条边,求出交点的总个数。还有一些特殊情况要考虑。假如考虑边(P1,P2), 1)、如果射线正好穿过P1或者P2,那么这个交点会被算作2次,处理办法是如果P的从坐标与P1,P2原创 2016-04-11 15:41:22 · 1794 阅读 · 0 评论 -
MFC中单文档程序框架
新建一个Example单文档工程,应用向导可以自动地生成MFC应用的各个C++类。1. 应用类及全局对象(CExampleApp)theApp 是唯一一个在程序形成的时候就存在的全局变量,CExampleApp类继承于CwinApp类,MSDN中CwinApp的继承关系如下从继承关系当中,我们发现theApp是作为程序的实体而存在的,是单文档程序的核心。应用类封装了Wi转载 2016-02-25 15:44:05 · 2651 阅读 · 0 评论 -
结构体和类的区别
1.C的结构体和C++结构体的区别 1.1 C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 1.2 C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 1.3 C语言的结构体是不可以继承的,C++的结构体原创 2015-10-30 10:06:35 · 427 阅读 · 0 评论 -
xtreme toolkit pro——CXTPReportControl控件教程-2
一 、使用前的准备1 、新建一个基于对话框的MFC程序ReportControlTest。2 、添加对XT Toolkit Pro 的引用。添加对头文件“XTToolkitPro.h”的引用。假设Xtreme ToolkitPro的目录下的源文件夹的路径为“D:\Software\Software Development\vs6.0\Xtreme ToolkitProv11.2.2-src\Sour转载 2015-09-14 10:52:53 · 1434 阅读 · 0 评论 -
xtreme toolkit pro——CXTPReportControl控件教程-3
一、CXTPReportControl的Data Members(Protected:m_)(Xtreme Toolkit Pro v12.0-> Report Control->Classes-> CXTPReportControl Class->CXTPReportControl Data Members)class CXTPReportControl : public CWnd;The CX转载 2015-09-14 11:07:49 · 3097 阅读 · 0 评论 -
xtreme toolkit pro——CXTPReportControl控件教程-1
CXTPReportControl控件是xtreme toolkit pro中的一个控件,它用来显示表格,可以显示表头表尾,可以对各列排序,拖放,等等,,也可以对各个单元格进行编辑,功能非常强大。下面介绍一下他的使用:在工程中头文件“stdafx.h”中添加:#include< XTToolkitPro.h> // Xtreme Toolkit Pro component library如果要使用转载 2015-09-14 10:39:33 · 1696 阅读 · 0 评论 -
C/C++ 数据范围(int ,char long, float,double)
====================================================================(一)32位平台: 分为有符号型与无符号型。 有符号型: short 在内存中占两个字节,范围为-2^15~(2^15-1) int 在内存中占四个字节,范围为-2^31~(2^31-1) long 在内存中占四个字节,范原创 2015-08-08 18:16:19 · 1545 阅读 · 0 评论 -
error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)----解决方法
在我们定义的Class中如果需要继承,或者是必须继承Object类时,我们又需要对类的对象进行操作是,会出现:error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)问题,这是由于微软将Object类的操作运算符设置为private,在我们用到是需要这些操作符时,就需要我们自己来实现,来重载。 我在使用过程中遇到两种问题,现在原创 2015-07-21 15:32:49 · 3156 阅读 · 1 评论 -
error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)---解决办法
在我们定义的Class中如果需要继承,或者是必须继承Object类时,我们又需要对类的对象进行操作是,会出现:error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)问题,这是由于微软将Object类的操作运算符设置为private,在我们用到是需要这些操作符时,就需要我们自己来实现,来重载。我在使用过程中遇到两种问题原创 2015-07-20 11:28:42 · 22424 阅读 · 2 评论 -
VC,VS2010如何调试内存泄漏
最近好像常常看到有人问如何调试内存泄漏的问题,于是我写下本文,抛砖引玉……在VS2008(VS2010)中也可以使用, 首先,应该是MFC报告我们发现内存泄漏。注意:要多运行几次,以确定输出的内容不变,特别是{}之间的数值,不能变,否则下面的方法就不好用了。 我们来看看:F:\CodeSample\Test\TestPipe\L转载 2015-04-16 17:33:06 · 4386 阅读 · 0 评论 -
C++著名程序库的比较和学习经验
1、C++各大有名库的介绍——C++标准库 2、C++各大有名库的介绍——准标准库Boost 3、C++各大有名库的介绍——GUI 4、C++各大有名库的介绍——网络通信 5、C++各大有名库的介绍——XML 6、C++各大有名库的介绍——科学计算 7、C++各大有名库的介绍——游戏开发 8、C++各大有名库的介绍——线程 9、C++各大有名库的介绍——序列化原创 2015-03-10 16:30:25 · 557 阅读 · 0 评论 -
vector的内存释放
1. vector容器的内存自增长 与其他容器不同,其内存空间只会增长,不会减小。先来看看"C++ Primer"中怎么说:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时转载 2014-12-12 15:22:13 · 707 阅读 · 0 评论 -
VS2010 MFC单文本启动画面设置。
添加类CwzdSplash,然后,实现代码主要是在CwzdSplash类的头文件和cpp文件中实现。在CwzdSplash类的头文件中我们添加下面的代码:CwzdSplash.h:#pragma once// CWzdSplashclass CWzdSplash : public CWnd{ DECLARE_DYNAMIC(CWzdSplash)public: CWzdSp转载 2014-12-04 15:30:35 · 631 阅读 · 0 评论 -
c++中STL排序算法程序
// paixu.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "iostream"#include "vector"#include using namespace std;struct student{ string name; int score;};bool compare(int a,int b转载 2014-11-22 15:28:25 · 438 阅读 · 0 评论