C++相关
luliyuan
这个作者很懒,什么都没留下…
展开
-
memset和wmemset用法记录
char cBuffer[50] ;TCHAR wBuffer[50];1、将cBuffer初始化为空格memset(cBuffer, ' ', sizeof(cBuffer));第三个参数为字符个数/字节数cBuffer[49] = 0;2、将wBuffer初始化为空格wmemset(wBuffer, _T(' '), sizeof(wBuffer)/sizeof(T原创 2015-03-25 13:29:48 · 6068 阅读 · 1 评论 -
CreateFile参数使用
HANDLEWINAPI CreateFile(_In_LPCTSTRlpFileName,_In_DWORDdwDesiredAccess,_In_DWORDdwShareMode,_In_opt_LPSECURITY_ATTRIBUTESlpSecurityAttributes,_In_DWORDdwCreationDisposition,_原创 2014-10-28 10:14:56 · 2770 阅读 · 0 评论 -
记录字符操作函数(包括对应宽字符函数)
strlen->wcslenstrcmp->wcscmpstrcat->wcscatstrcpy->wcscpystrncpy->wcsncpymemcpy->原创 2014-10-28 12:48:20 · 1235 阅读 · 0 评论 -
int _tmain(int argc, _TCHAR* argv[])
_tmain(int argc, _TCHAR* argv[])函数中第一个参数表示包括函数执行路径参数在内的参数个数argv[]第一个参数用来存储函数的执行路径,后面用来存储自己写入的参数。原创 2014-10-28 11:15:23 · 2959 阅读 · 0 评论 -
FindFirstFile FindNextFile FindClose使用
TCHAR szFind[MAX_PATH] = _T("\\CF Card");TCHAR cFileName[MAX_PATH] = { 0 };WIN32_FIND_DATA stFindFileData; wcscat(szFind, _T("\\*.*")); //这里一定要指明通配符,不然不会读取所有文件和目录 HANDLE hFind = FindFirs原创 2014-11-12 15:56:23 · 3742 阅读 · 0 评论 -
获得文件属性
#include "string"using namespace std;typedef struct stFilePro { wstring strComments; wstring strProductName; wstring strInternalName; wstring strProductVersion; wstring strSpecialBuild;}STFIL原创 2014-11-12 16:34:45 · 805 阅读 · 0 评论 -
wcscpy与_tcscpy关系 strcpy_s与strcpy比较
C++标准库函数提供了字符和字符串的操作函数,并提供了其UNICODE版本,如:char *strcpy(char *strDestination, const char *strSource); wchar_t *wcscpy(wchar_t *strDestination, const wchar_t *strSource); wcscpy()即为strcpy()的宽字符版本,与转载 2014-11-11 14:42:33 · 2173 阅读 · 0 评论 -
CString转char*
char* pFilePath = NULL;CString graycat = CString(_T("Gray")) + CString(_T("Cat"));// CString = _T("Gray") +原创 2014-08-22 11:04:39 · 716 阅读 · 0 评论 -
莫偷懒!成员变量一定要初始化!
莫偷懒!成员变量一定要初始化!未初始化的bool成员变量在Debug下默认值为false,Test下默认true。一个bug查了一晚上,原因就是这个.人物创建的场景在Debug下正常,在Test和Release下不正常,就是镜头不对。然后就盯着这个载入场景的配置文件的代码看,ini不用了,换成xml看看,还是有问题!直接在代码里赋值,不用配置文件还是有问题!(之所以盯着这里看,是因为在转载 2014-04-22 14:35:01 · 3287 阅读 · 0 评论 -
单体模式+模板类+智能指针实现CSingleton
定义单体(Singleton)模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。 理解1. Singleton模式用来取代全局静态变量。C++通过静态成员变量来实现类实例全局唯一性。2. instance()方法是单体提供的唯一调用入口。 要点1. 为了防止外界调用产生多个实例,将构造方法、析构方法、拷贝构造方法、赋值重载原创 2014-04-04 13:45:13 · 4570 阅读 · 0 评论 -
string,wstring,CString
一.概念 string是C++提供的标准字符串操作类.wstring是操作宽字符串的类. CString是对string(字符串)和wstring(宽字符串)的一个封装,常用在mfc中.用来解决编码问题的.二.转换 string或者wstring转换到CString: 要把std::string或者std::wstring类型的数转载 2014-11-13 17:28:44 · 2042 阅读 · 0 评论 -
CreateMutex WaitForSingleObject ReleaseMutex使用
HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpMutexAttributes,// BOOL bInitialOwner, // flag for initial ownership LPCTSTR lpName // pointer to mutex-object name );原创 2014-10-28 17:18:45 · 10315 阅读 · 1 评论 -
memset清空一个结构类型的变量或数组
文章出处:http://blog.csdn.net/liwenjia1981/article/details/6304547个人认为这篇文章很好的讲解了memset的用法,值得推荐!将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。需要的头文件 or 函转载 2016-01-05 15:59:17 · 24841 阅读 · 0 评论 -
memset和wmemset微软官网解释
memset、wmemset 对指定字符的设定缓冲区。语法 void *memset( void *dest, int c, size_t count );wchar_t *wmemset( wchar_t *dest, wchar_t c, size_t count);参数转载 2016-01-04 14:52:58 · 3942 阅读 · 0 评论 -
C++的运算符重载
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运转载 2015-11-23 09:13:46 · 542 阅读 · 0 评论 -
MVC框架模式
1、控制类中有业务类和画面类map m_ControllerMap;控制类决定具体画面的处理交给哪个业务类处理主要接口:(1) virtual int AddController(VIEWID_FORM apxVid, CModelBase * pModel);(2) virtual int RemoveController(VIEWID_FORM apxVid, CModel原创 2013-06-07 15:24:19 · 922 阅读 · 0 评论 -
关联,聚合,组合的区别及C++实现
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gamecreating/archive/2010/03/22/5404589.aspx 关联,聚合,组合的区别及C++实现 收藏 类间关系在类图中,除了需要描述单独的类的名称、属性和操作外,我们还需要描述类之间的联系,因为没有类是单独存在的,它们通常需要和别的类协作,创造比单独工作更大的语转载 2015-09-21 15:25:39 · 4955 阅读 · 1 评论 -
指针变量作为函数参数
用指针变量作为函数参数, 在函数执行过程中指针变量所指向的变量值发生变化,函数调用结束后,这些变量值的变化依然可以保留下来如果在函数内部改变函数参数的值(也就是指针变量的值,而不是指针变量所执行的变量值),那么传递给函数的指针变量的值不变void TestPointParam(char* pBuffer){ pBuffer++; memcpy(pBuffer, "jk原创 2015-03-31 17:06:36 · 927 阅读 · 0 评论 -
引用,其实不可以改变指向
今天跟几位同学讨论了一点小问题,最后谈到指针和引用的区别……最后,谈到引用永远指向初始化它的对象。。。问题就从这里提出。按我的理解,引用是可以改变指向的(说明:这是错误的思维)。#include using namespace std; int main(int argc, char *argv[]) { int a = 10, b = 20转载 2015-04-02 15:07:54 · 3541 阅读 · 4 评论 -
c++ 类中const成员变量的赋值
在头文件的类的定义中定义了一个const成员变量c++ 规则:1、类定义中不能进行初始化,因为头文件中类的定义只是一个声明,并没有分配真正空间,因此变量是不存在的,因此是不能赋值的。2、const 定义的变量是不能赋值这可如何是好,声明中不能赋值,声明完还不能赋值。又不能不赋值。解决方案:1、在构造函数后的参数初始化列表中初始化2、将const变量同时声明为 static转载 2015-03-31 10:16:01 · 5131 阅读 · 0 评论 -
CString、CStringA 和 CStringW
Visual C++.NET中将CStringT作为ATL和MFC的共享的“一般”字符串类,它有CString、CStringA和CStringW三种形式,分别操作不同字符类型的字符串。这些字符类型是TCHAR、char和wchar_t。TCHAR在Unicode平台中等同于WCHAR(16位Unicode字符),在ANSI中等价于char。转载 2015-02-03 12:39:26 · 1144 阅读 · 0 评论 -
CString类的完美总结
①、CString 类对象的初始化:CString str;CString str1(_T("abc"));CString str2 = _T("defg"); TCHAR szBuf[] = _T("kkk");CString str3(szBuf);CString str4 = szBuf; TCHAR *p = _T("1k2");//TCHAR *转载 2014-10-15 14:46:18 · 747 阅读 · 0 评论 -
STL中vector、list、deque的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存转载 2014-04-02 11:12:16 · 4691 阅读 · 0 评论 -
相对路径和绝对路径
1、绝对路径:是从盘符开始的路径,形如C:\windows\system32\cmd.exe2、相对路径:是从当前路径开始的路径,假如当前路径为C:\windows要描述上述路径,只需输入system32\cmd.exe实际上,严格的相对路径写法应为.\system32\cmd.exe其中,.表示当前路径,在通道情况下可以省略,只有在特殊的情况下不能省略。假如当前路径为c:\pro转载 2014-04-01 17:18:33 · 4137 阅读 · 0 评论 -
MFC对话框添加背景图片
void CWinProcessDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client re原创 2013-05-27 20:05:41 · 1073 阅读 · 0 评论 -
获得局域网内IP地址和主机名
源代码:#pragma comment(lib,"Mpr.lib") //否则编译不能通过void GetNameAndIp(CStringArray& NameArray,CStringArray& IpArray){ NameArray.RemoveAll(); IpArray.RemoveAll(); struct hostent *host; st原创 2012-09-05 17:24:24 · 2557 阅读 · 0 评论 -
C++运算符重载
C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的。这一系列主要讲解C++中有关运算符重载方面的内容。在每一个系列讲解之前,都会有它的一些基础知识需要我们去理解。而运算符重载的基础就是运算符重载函数。所以今天主要讲的是运算符重载函数。1.运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生。比如1转载 2012-09-12 09:37:16 · 653 阅读 · 0 评论 -
理解虚函数
虚函数联系到多态,多态联系到继承。所以本文中都是在继承层次上做文章。没了继承,什么都没得谈。 下面是对C++的虚函数这玩意儿的理解。 什么是虚函数(如果不知道虚函数为何物,但有急切的想知道,那你就应该从这里开始) 简单地说,那些被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polymorphism),多态性是将接口与实现进行分离;转载 2012-09-27 10:24:36 · 1361 阅读 · 1 评论 -
虚析构函数
在析构函数前面加上关键字virtual进行说明,称该析构函数为虚析构函数。例如:class B{ virtual ~B(); …}; 该类中的析构函数就是一个虚析构函数。 如果一个基类的析构函数被说明为虚析构函数,则它的派生类中的析构函数也是虚析构函数,不管它是否使用了关键字virtual进行说明。 说明虚析构函数的目的原创 2012-09-12 10:51:31 · 734 阅读 · 0 评论 -
静态联编与动态联编之virtual的作用
=========================定义========================= 将一个调用函数连接上正确的被调用函数,这个过程就叫做函数的联编,简称联编。在C++中,一共有两种联编的方式:静态联编#define:静态联编是指联编工作出现在编译连接阶段。#特点:① 静态联编就是指被调用函数和执行调用函数之间的关系以及它们在内存中的地址在编译的时转载 2012-09-12 10:10:02 · 1133 阅读 · 0 评论 -
动态链接库DLL编程(一)之简介
一、概述1、可以简单的把动态链接库(dynamic-link library,DLL) 看成一种仓库,它提供给我们一些可以直接拿来用的变量、函数或类。 2、DLL是Windows操作系统的基石。Windows应用程序编程接口(API)提供的所有函数都包含在DLL中。其中三个最重要的DLL分别是: Kernel32.dll,包含的函数用来管理内存、进程以及线程;原创 2012-09-07 15:14:56 · 658 阅读 · 0 评论 -
CDC,CClientDC,CPaintDC,CWindowDC 比较区别
MFC中的CDC,CClientDC,CPaintDC,CWindowDC的区别1、CDC是Windows绘图设备的基类。2、CClientDC:(1)(客户区设备上下文)用于客户区的输出,与特定窗口关联,可以让开发者访问目标窗口中客户区,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC。3、CPaintDC:(1)用于响应窗口重绘消息(WM_PAINT)是的绘转载 2013-05-27 20:17:43 · 855 阅读 · 0 评论 -
PostMessage(HWND,MSG,WPARAM,LPARAM)
函数功能: 该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。消息队列里的消息通过调用GetMessage和 PeekMessage取得。函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); 参数 hWnd转载 2013-05-13 18:52:29 · 3114 阅读 · 0 评论 -
全局变量和静态变量
C++变量根据定义位置的不同,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名作用域和文件作用域。从作用域看:全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包括全局变量定义的源文件需要用extern关键字再次声明这个全局变量。静态局部变量具有局部作用域。它只被初始化一次,自从第一次初始化直转载 2014-03-31 13:07:48 · 1157 阅读 · 2 评论 -
返回值为指针的函数解读
一、先看看下面的小程序:[cpp] #include #include typedef struct _STSTAFFINFO { char *pName; /*姓名*/ int iId; /*ID*/ }stStaffInfo; /*根据ID获取姓名*/ char* GetStaffNameById(i转载 2014-03-28 12:51:13 · 1197 阅读 · 0 评论 -
CreateProcess 后设置焦点不能切换
1、背景:A.exe启动B.exe之后,焦点只能在B上,只有B退出后才能将焦点切换到A2、方法:CreateProcess成功后EnableWindow(g_hWndHandle, FALSE);//g_hWndHandle为A窗体句柄在B.exe退出后 EnableWindow(g_hWndHandle, TRUE);原创 2014-03-08 15:55:54 · 1295 阅读 · 1 评论 -
记录文件操作及其相关字符串操作
1、ReadFile第一次存到TCHAR数组中,发现日文有乱码第二次存到char数组中,再将char转tchar,没问题2、CString TCHAR TCHAR* char#ifdef UNICODE typedef wchar_t TCHAR; #else typedef unsigned char TCHAR;原创 2014-03-07 16:35:14 · 898 阅读 · 0 评论 -
如何控制一个进程CPU的占用率
背景:两个进程A和B,A进程负责显示时间,包括时分秒;B进程负责拷贝文件(50兆左右,文件比较大),结果拷贝文件过程中出现A进程中时间突然停止,然后又迅速恢复正常,感觉是画面刷新阻塞了 原因:进程B cup占用率太高导致解决方法:降低进程B的CUP占用率,因为拷贝文件在线程里实现的,所以可以降低线程的优先级:SetThreadPriority(this->m_hProcessThrea原创 2013-11-06 08:58:10 · 1141 阅读 · 0 评论 -
VC画图双缓冲去闪烁
VC显示双缓冲 当应用程序中使用多次GDI调用绘制到窗口中时,在窗口清除并被重新绘制时,会出现明显的闪烁。使用双缓冲技术可轻松消除闪烁。 步骤如下: 1、假设当前显示设备上下文为CDC * pDC; 2、使用CDC对象创建可兼容设备上下文, CDC memdc; memdc.CreateCompatibleDC(pDC);转载 2013-06-18 11:07:58 · 929 阅读 · 0 评论 -
【转】AfxBeginThread和CreateThread具体区别
1. 具体说来,CreateThread这个 函数是windows提供给用户的 API函数,是SDK的标准形式,在使用的过程中要考虑到进程的同步与互斥的关系,进程间的同步互斥等一系列会导致操作系统死锁的因素,用起来比较繁琐一些,初学的人在用到的时候可能会产生不可预料的错误,建议多使用AfxBeginThread,是编译器对原来的CreateThread函数的封装,用与MFC编程(当然,转载 2013-06-04 18:38:28 · 925 阅读 · 0 评论