自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(184)
  • 收藏
  • 关注

原创 win32和x64用到不同的头文件时:就体现预处理器的作用

在同一个项目的win32平台中的预处理器中加上WIN32,x64平台平台中的预处理器中加上WIN64。在代码中用写上#ifdef WIN32**填写32位用到的代码***#endif#ifdef WIN64**填写64位用到的代码***#endif...

2020-06-16 16:07:31 171

转载 C++技术路线

随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者。而在今天,它又扮演着什么样重要的角色呢?请往下看:后端服务器,移动互联网后端,经典Windows界面开发,移动互联网端界面开发,跨平台界面开发,图形分析,系统架构,应用设计,还有现在最为流行的分布架构等一些新的技术领域。这么牛的语言,你是不是想知道怎样学习和掌握它呢?接下来请看经过小编整理过C/C++工程师必备知识的思维导图。初学者看到这么密集的知识点,是不.

2020-05-16 13:42:25 337

原创 C++控制台程序停下来--实现暂停功能

一、针对Microsoft#include <stdlib.h>(1)第一种方式system( "PAUSE ");--------------------(2)第二种方式getchar(); // 这招对QT程序也有用---------------------(3)第三种方式Sleep();二、针对Linux(1)第一种方式getchar()...

2020-04-25 10:21:14 110

转载 setlocale()函数的作用

一、C 和 C++ 的标准库分别有自己的 locale 操作方法,C 标准库的 locale 设定函数是 setlocale(),而 C++ 标准库有 locale 类和流对象的 imbue() 方法。这篇讲解 C 标准库中 setlocale() 的使用。GNU libc 中的 setlocale()参考:man 3 setlocale头文件与声明如下: #include...

2020-04-21 15:37:21 185

转载 C++ Unicode SBCS 函数对照表

因为项目碰到了国际化的问题,自己整理了一下,主要是从tchar.h里面导出的包括类型和各类字符相关的处理函数,大部分都应该是用不到的。如果有想用自动化工具替换字符升级到unicode版本的,这个列表就比较全了。至于转换工具的替换规则,以后再发Generic SBCS UNICODE TCHAR char wchar_t _TEOF EOF...

2020-04-21 14:38:21 57

原创 CListCtrl

GetFirstSelectedItemPosition();返回值是个指针,获取的是当前位置的指针GetNextSelectedItem();返回值是int,参数是position类的一个指针,根据参数,获取当前位置的索引。把列表看做是一个数组,获取的是该数组(pos指针)的下标...

2020-04-20 22:47:39 46

原创 跳转语句break、continue、goto的区别

1、我们的目的是讲解“跳转语句”的区别2、先把c++中包含的几个语句先总结概括一下几种典型的c++语句:①空语句+语句块;②条件语句(if,switch);③迭代语句(while,do-while,for,范围for);④跳转语句(break,continue,goto)3、之后,再讲解各个“跳转语句”的区别3.1BreakBreak-对迭代/循环语句,只能跳...

2020-04-19 18:10:36 114

原创 十六进制左移

2020-04-17 10:09:16 540

原创 Tokenize

Cstring szValue= _T("张三 男 高三 18");szValue.TrimRight(_T(" \n"));iStartPos = 0;szToken = szValue.Tokenize(_T(" "), iStartPos);while(FALSE == szToken.IsEmpty()){ vecArraySplit.push_back(szToken);...

2020-04-10 11:22:22 175

原创 GUID的生成使用,生成全球唯一名称字符串

在工作的文档中出现了随机因子(Random Factor),不是我们通常使用的随机数srand,它最大的作用是避免随机相同1,涉及API及结构使用CoCreateGuid函数即可。需要objbase.h头文件。原型:HRESULT CoCreateGuid( GUID * pguid ); 其中GUID结构:typedef struct _GUID {...

2020-04-07 15:19:51 93

转载 微软的COM中GUID和UUID、CLSID、IID

当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全球唯一:第一种是采用和Internet地址一样的管理方式,成立一个管理机构,用户如果想开发一个COM组件的时候需要向该机构提出申请,并交一定的费用。第二种是发明一种算法,每次都能产生一个全球唯一的COM组件标识符。第一种方法,用户使用起来太不方便,微软采用第二种方法,并发明了一种算法,这种算法用GUID(Glob...

2020-04-07 15:08:22 49

转载 串行通信

串行接口是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。数据转换是指数据的串并行转换。具体说,在发送端,要把并行数据转换为串行数据;而在接收端,却要把接收到的串行数据转换为并行数据。串行通信___异步传送方式 起止式异步通信的特点:传输不连续,以字符为单...

2020-04-05 16:19:59 127

原创 uchar类型加减运算

1、uchar 类型只能保存0-255的数字。超过了会溢出,溢出后会从0开始继续累加。所以小心使用uchar u;u +=u;溢出了也不会提醒你2、计算机CPU只有加法逻辑运算器,对于减法运算,是使用两个数的补码进行加法运算。50-100=?50的二进制是: 00000000|00000000|00000000|0011001050的补码是: 0000...

2020-04-04 13:38:35 434

原创 Format

1、实现可变保留位数 格式化

2020-03-31 11:13:21 28

转载 DbgView 显示OutputDebugString 输出内容 不能显示问题总结

1. 是否有其他编辑器作为了Debug信息输出窗口。例如:vc在debug时调用OutputDebugString的内容不会输出到DbgView上。2.版本是否正确。 分两种:Under Windows 9x/MeDebugViewcan capture output from the following sources: Win32OutputDebugString ...

2020-03-28 16:20:15 182

转载 纯虚函数

纯虚函数是一种特殊的虚函数,在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。定义编辑纯虚函数是一种特殊的虚函数,它的一般格式如下:class <类名>{virtual <类型><函数名>(<参数表>)=0;…};在许多情况下,在基类...

2020-03-25 16:52:58 67

原创 c/c++位运算--判断对应标识位是否为1

//判断DWORD对应位是否为1//b为需要判断的数, i为对应的位数BOOL TestDword(DWORD b, DWORD i) //判断b的第i位是否为1{ ATLASSERT(i <= 31); return (b&(0x01<<i))==0?FALSE:TRUE;}...

2020-03-25 10:19:28 282

原创 c++多继承构造函数调用

构造函数的调用顺序从上面的分析中可以看出,基类构造函数总是被优先调用,这说明创建派生类对象时,会先调用基类构造函数,再调用派生类构造函数,如果继承关系有好几层的话,例如:A --> B --> C那么创建 C 类对象时构造函数的执行顺序为:A类构造函数 --> B类构造函数 --> C类构造函数构造函数的调用顺序是按照继承的层次自顶向下、从基类再到派生类的。...

2020-03-24 09:41:29 116

原创 GetPrivateProfileInt

获取文件中指定的条目的值。UINT WINAPI GetPrivateProfileInt(_In_LPCTSTR lpAppName, //节目名._In_LPCTSTR lpKeyName, //键名._In_INT nDefault, //默认键值_In_LPCTSTR lpFileName //文件名);例如:iBaudRate = GetPrivate...

2020-03-18 14:22:15 43

转载 C++/MFC计算程序运行时间

在我们实际的编程工作中,经常要测量程序的运行时间,比如衡量算法的运行时间等等。在这里我收集了网上集中测量程序运行时间的方法。通过网上查阅资料,找到以下几种VC中求取程序运行时间的方法:方法一 利用GetTickCount函数(ms)代码:CString str;longt1=GetTickCount();//程序段开始前取得系统运行时间(ms)...

2020-03-16 16:18:02 61

原创 互斥器mutex

对于多线程,当一个线程1在访问一个资源A的时候, 其他线程不能再对资源A进行访问! 必须等到线程1不在访问资源A的时候,其他线程才能去访问资源A。==>这就需要做:在多个线程之间做一个同步!1.创建一个互斥器对象 hMutex=CreateMutex(NULL,TRUE,NULL); 参数1(安全属性): NUL...

2020-03-02 23:07:31 53

原创 CloseHandel(ThreadHandle )函数

很多程序在创建线程都这样写的:............ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );。。。。。这不是刚好创建又关闭了吗?线程怎么运行呢?================================================CloseHandle( )作用:关闭线程...

2020-02-27 12:42:00 36

原创 SetEvent()和ResetEvent()

设置事件为有信号状态时,线程就执行完毕了!!BOOL SetEvent(HANDLE hEvent);其中hEvent表示句柄,返回值:如果操作成功,则返回非零值,否则为0。说明设置事件的状态为有标记,释放任意等待线程。如果事件是手工的,此事件将保持有标记直到调用ResetEvent,这种情况下将释放多个线程;如果事件是自动的,此事件将保持有标记,直到一个线程被释放,系统将...

2020-02-23 23:12:11 65

原创 ReadFileEx

ReadFileEx是一个Windows API函数。与ReadFile相似,只是它只能用于异步读取文件操作,异步操作完成后会调用指定的回调函数。BOOL ReadFileEx(HANDLE hFile, //文件的句柄LPVOID lpBu...

2020-02-23 22:15:20 97

原创 MFC SendMessage()函数传递数据

比如:用其传递字符串CString cstr1 = _T("123");CString cstr2 = _T("hello");::SendMessage(hWnd, WM_XXX, (WPARAM)(LPCTSTR)cstr1, (LPARAM)(LPCTSTR)cstr2);LRESULT CXXXDlg::OnXXX(WPARAM wParam, LPARAM lParam){// ...

2020-02-23 10:13:32 83

原创 在一个类中调用另一个类的2种方法

1、使用窗口类的指针 1.1在类A中定义这个窗口的指针 1.2在类A的构造函数中将窗口的指针设置为空指针 1.3在对应的点击事件中,new一个这个窗口的对象出来,然后再用这个对象调用窗口函数2、直接使用窗口对象2.1在类A中定义这个窗口的对象2.2在对应的点击事件中,再用这个对象调用窗口函数...

2020-02-20 12:04:06 1352

原创 CreateFile

这是一个多功能的函数,可打开或创建文件或者I/O设备,并返回可访问的句柄:控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。HANDLE CreateFile(LPCTSTR lpFileName, //普通文件名或者设备文件名 DWORD dwDesi...

2020-02-15 17:11:19 87

原创 CreateEvent

CreateEvent是一个Windows API函数。它用来创建或打开一个命名的或无名的事件对象。如果想为对象指定一个访问掩码,应当使用CreateEventEx函数。HANDLE CreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性BOOL bManualReset,// 复位方式BOOL bInitialSt...

2020-02-12 10:52:54 29

转载 类和线程的关系

这种理解,如果代码写得多,思考得多,就会有自己的一套理解方式,而正确的理解往往都是相同的,不对的理解千奇百怪。在C++/Java中,线程以类的形式展现给编程人员,所以编程人员可以通过类来创建线程,而线程执行又需要有类的方法作为执行代码,两者相互联系又相互独立。实际上线程是操作系统层次提供的能力,任何编程语言都是封装和使用操作系统提供的这种能力,C++/Java也不例外,C++/Java中,一切都...

2020-02-11 14:28:01 86

转载 xpath语法规则

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。说白了,就是要在web文件(html,xml文件)定位目标,你不能时时刻刻都用正则来做,...

2020-01-17 13:40:14 63

原创 为什么在网络程序设计中服务器端必须使用bind函数来绑定IP地址和端口号,而客户端不需要使用bind函数来绑定IP地址和端口号呢?

Socket:为什么服务器端只需要一个:服务器端口客户端需要:服务器端口 + 服务器IP因为服务器是时时在监听(Listen)有没有客户端的连接。如果服务器不绑定IP和端口的话(Bind),客户端上线的时候怎么连到服务器呢。所以服务器要绑定IP和端口,而客户端就不需要了。(注意:MFC中的Bind是在Create函数中自动调用的)客户端上线是主动向服务器发出请求的,因为服...

2020-01-08 13:30:58 563

原创 CString类的Format函数(设定有效位)

如下图所示:

2020-01-06 16:41:27 48

转载 C++类的静态成员变量一定要定义(分配内存)

我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。两者的区别在于:初始化是赋一个初始值,而定义是分配内存。静态成员变量在类中仅仅是声明,没有定义,所以要在类的外面定义,实际上是给静态成员变量分配内存。可以通过以下几个例子更形象的说明这个问题://test.c...

2019-12-30 16:27:01 151

原创 c++ 静态函数

1、对象与对象之间的成员变量是相互独立的.要想共用数据,则需要使用静态成员或静态方法2、只要在类中声明静态成员变量,即使不定义对象,也可以为静态成员变量分配空间,进而可以使用静态成员变量.(因为静态成员变量在对象创建之前就已经被分配了内存空间)3、静态成员变量虽然在类中,但它并不是随对象的建立而分配空间的,也不是随对象的撤销而释放(一般的成员在对象建立时会分配空间,在对象撤销时会释放...

2019-12-30 16:09:24 32

原创 C++中static类型的成员变量不能在构造函数中定义

类中的静态成员变量的初始化必须在类外实现!!类的定义是在头文件中,如果类的成员变量是static,static声明的成员变量是说明这个变量是属于整个类的,而不是某个对象的(除了单例模式,一个类都可以定义无数个对象),所以对static成员变量的定义/初始化不可以放在构造函数中(定义对象时才会调用的函数),只能放在类对应的源文件中函数之外的全局位置。在CUtilityTool类的.h文件:...

2019-12-30 15:38:17 319

原创 c++中类的构造函数的作用

构造函数的作用:初始化对象的数据成员。

2019-12-27 15:11:20 200

原创 GDI绘图中,SelectObject()函数作用

SelectObject()作用:选入一个GDI对象。同时会返回(选出)先前选入设备上下文的同类的GDI对象。CPen newPen;CPen *oldPen;newPen.CreatePen(PS_SOLID,2,RGB(192,192,192));//创建对象oldPen = pDC->SelectObject(&newPen);//将画笔选入设备描述表,并保存旧...

2019-12-24 09:59:18 117

原创 AFX_VIRTUAL

//{{AFX_VIRTUAL、/{{AFX_MSG、//{{AFX_MSG_MAP、//{{AFX_DATA_INIT 我们看到很多这样打头的代码,其中典型的一个,在你应用程序的 CApp 头文件中。对于类向导来说。这个符号才是有意义的。它是一个消息处理函数的前缀,类向导生成的消息函数,分发函数,事件响应函数都以这个为前缀.如果去掉了,向导将不能识别。些有规律的注释是类向导自动生成的格式...

2019-12-12 17:32:01 55

转载 自绘控件--对应的不同的消息,在对应的消息响应函数中绘制

1、按钮、标签、列表框(ListBox)、组合框(ComboBox)、菜单等,在父窗口的WM_DRAWITEM消息里绘制2、列表视图(ListView、ListCtrl)在WM_NOTIFY消息的NM_CUSTOMDRAW里绘制没有这些消息的再考虑WM_PAINT3、如果上述消息不能实现,所有窗口、子窗口都有WM_ERASEBKGND(绘制背景)、WM_PAINT(绘制内容)消息4、要...

2019-12-07 11:30:53 43

转载 子类化方法自绘按钮

1.新建一个基于对话框的MFC程序。2.在工程中添加一个新类CMyButton,基类选择CButton。3.然后转至新生成的MyButton.h头文件中,将鼠标放在类名CMyButton上点击一下,打开“属性”窗口,在“消息”按钮下为此类添加WM_LBUTTONDOWN,WM_LBUTTONUP消息,并重写DrawItem虚函数(这个函数是重绘按...

2019-12-06 13:39:06 65

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除