C++
随心漂流
C++程序员
展开
-
隐藏和显示电脑下方任务栏
1.隐藏void CMyDlg::Onhide() { CWnd *taskBar; taskBar=FindWindow("Shell_TrayWnd",NULL);//获得任务栏窗口对象指针 taskBar->GetWindowRect(&taskBarRECT);//保存原任务栏窗口的大小 taskBar->SetWindowPos(NULL,0,600,0,0,SWP_HIDEWINDOW);//改变大小}2.显示void CMyDlg::Onsho原创 2021-12-01 13:16:28 · 839 阅读 · 0 评论 -
C++函数模板(Template Function)
模板(Template)指C++程序设计语言中采用类型作为参数的程序设计,支持通用程序设计。下面以不使用函数模板,和使用函数模板来实现同一功能的示例:例子:实现计算一个数的幂次方的函数power,接受正幂次方数,如果是负幂次方数,就让结果等于0.1.不使用模板如果不使用函数模板,对于需要实现的功能相同,但参数的数据类型却不同的情况,则需要定义多个不同数据类型的函数://对于实现 整数类型 的幂次方函数int power(int base,int exponent){ int result =原创 2021-11-30 14:19:02 · 1097 阅读 · 1 评论 -
设计模式之单例模式
单例模式:单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点,使整个系统中只有唯一的一个对象实例。应用:常用于管理资源,如日志、线程池。实现要点: 在类中,要构造一个实例,就必须调用类的构造函数,并且为了保证全局只有一个实例,需防止在外部调用类的构造函数而构造实例, 需要将构造函数的访问权限标记为private,同时阻止拷贝创建对象时赋值时拷贝对象,因此也将它们声明并权限标记为private。 另外,需提供一个全局访问点,所以要在类中定义一个static函数,返回在类内部唯一构造的原创 2021-03-17 13:50:00 · 76 阅读 · 0 评论 -
MFC 封装删除目录的函数
void CBubbleMachineDlg::DeleteDirectory(CString strDir){ TCHAR szFind[MAX_PATH] = { _T("\0") }; lstrcpyn(szFind, strDir, MAX_PATH); lstrcat(szFind, _T("\\*.*")); //指明通配符,读取所有文件和目录 CFileFind finder; BOOL bfind = finder.FindFile(szFind, 0); while原创 2021-03-05 09:24:09 · 145 阅读 · 1 评论 -
MFC编写界面dll,加载并显示dll中的UI
1、创建一个“MFC dll”工程,确定。选择“使用共享MFC DLL的规则DLL”,点击“完成”。2、再创建的dll工程中插入一个对话框Dialog资源。3、在该对话框中添加一新类,如:UiDlg,基类为CDialog。4、在dll工程的.cpp文件最顶部处添加 #include “UiDlg.h”,并添加一个接口函数:extern "C" __declspec(dllexport) void ShowUIDlg(){ AFX_MANAGE_STATE(AfxGetStaticMo原创 2021-03-03 09:35:43 · 756 阅读 · 1 评论 -
C++ 16进制转成byte
#include <iostream>using namespace std;#define byte unsigned charbyte hex2byte(char hexstr[]);int main(){ char hex[3] = "67"; cout << int(hex2byte(hex));}byte hex2byte(char hexstr[]){ byte h = hexstr[0]; byte l = hexst原创 2021-02-25 17:04:21 · 1279 阅读 · 0 评论 -
CSV文件读写
写void CcsvWriteDlg::WriteCsv(){ CString strFilePath = _T("D:\\DataCsv.csv"); CFileFind finder; //判断文件是否存在,存在返回true,不存在返回false BOOL bWorking = (bool)finder.FindFile(strFilePath); if (!bWorking) { //不存在,创建 if (CStdioFile *fsp = new CStdioFile(st原创 2021-02-23 12:58:09 · 290 阅读 · 1 评论 -
MFC判断文件是否存在,不存在则创建+CSV文件操作
MFC判断文件是否存在,不存在则创建+CSV文件操作 CString strFileName; SYSTEMTIME sysLocaltime; GetLocalTime(&sysLocaltime); strFileName.Format(_T("D:\\TestData\\%04i-%02i-%02i"), sysLocaltime.wYear , sysLocaltime.wMonth, sysLocaltime.wDay); //创建目录 SHCreateDirectoryE原创 2021-02-22 14:19:14 · 1794 阅读 · 3 评论 -
MFC中IP控件常规操作
MFC中IP控件的使用void CMFC_IPControlDlg::OnIPAddressCtrl(){ /*获取计算机名和本机IP地址*/ WORD wVersionRequested; WSADATA wsaData; char name[255];//本机名 CString ip;//本机IP PHOSTENT hostinfo; wVersionRequested = MAKEWORD(2, 0); if (WSAStartup(wVersionRequested, &am原创 2021-02-04 15:27:20 · 505 阅读 · 0 评论 -
MFC--事件控制线程的开启和停止
使用线程过程中,如果while循环(死循环)比较多的话, 建议使用事件来控制线程的开启和终止。因为如果用sleep()轮询的方式来控制线程的停止,sleep是有不可避免的时间差的,不能及时准确地控制线程的开启和停止。而且,如果强行终止线程的话,容易造成内存泄漏的问题。所以,最好的方法,就是设置一个值(事件)作为标志. 如果这个标志发生了变化,就break即可。事件的使用流程:1.创建事件: CEvent* pExitEvent = new CEvent(FALSE, TRUE); 2.重原创 2021-01-09 22:28:14 · 1739 阅读 · 0 评论 -
MFC—分级创建目录及文件
分级创建目录及文件:在根目录下按照日期分类生成目录,在日期目录下再按照分钟生成分钟目录,文件按每分钟生成在不同的文件夹下。#include <io.h> //_access头文件#include <direct.h> //_mkdir()目录头文件void CFindFilesDlg:: TestLog(){ SYSTEMTIME LocalSystemTime; GetLocalTime(&LocalSystemTime); CStri原创 2020-05-27 17:26:53 · 525 阅读 · 0 评论 -
C++深入之内联函数
C++内联函数对常规函数的调用对应着跳转到标记函数起点的内存单元,然后执行函数代码,执行完毕后跳回到地址被保存的命令处。来回跳跃并记录跳跃位置是需要一定开销的。C++提供的内联函数与常规函数不同,内联函数在编译阶段就将函数代码与调用者内联起来了,也就是使用函数代码替换了函数的调用,从而实现较快的执行速度,但是代价是需要额外的存储空间。使用方式为在函数声明前加上关键字inline;在函数定以前加上关键字inline。什么时候考虑使用内联函数:(内联函数不需要出入栈,效率上会好点,但编译后的原创 2020-05-26 11:23:29 · 206 阅读 · 0 评论 -
CString几个常用方法
常用:CString Left(int nCount)const; //从左边1开始获取前 nCount个字符CString Mid(int nFirst)const; //从左边第 nCount+1个字符开始,获取后面所有的字符CString Mid(int nFirst, int nCount)const; //从左边第 nFirst+1 个字符开始,获取后面nCount个字符CString Right(int nCount)const; //从右边1开始获取从右向左前 nCount个字符v原创 2020-05-25 10:29:37 · 839 阅读 · 0 评论 -
C++不能往TXT、XML文件写入中文的解决方法
以下CStdioFile无法向文件(txt、xml)中写入中文,或写入的是乱码:CStdioFile file;file.Open(…);file.WriteString(_T(“abc你好”));//只能写入abc解决办法:使用setlocale语句设定区域#include <locale>//头文件CStdioFile file;file.Open(…);char...原创 2020-05-07 09:33:40 · 1185 阅读 · 0 评论 -
VS2015Socket警告warming:C4996 'inet_addr': Use inet_pton() or InetPton() instead or define _WIN...
原:sockAddr.sin_addr.s_addr = inet_addr(“192.168.1.6”);报警:Error C4996 ‘inet_addr’: Use inet_pton() or InetPton() instead or define _WINSOCK_DEPRECATED_NO_WARNINGS to disable deprecated API warnings解...原创 2020-04-26 16:58:21 · 351 阅读 · 0 评论 -
C++内存机制中内存泄露、内存溢出、内存越界和内存泄漏原因分析
在用C++做底层驱动时,经常会遇到内存不足的警告,往往是因为内存出现溢出、泄露或者越界等原因。内存溢出(out of memory) 是指程序在申请内存时,没有足够的内存空间供其使用。内存泄漏(memory leak) 是指程序申请的内存,用完后没有释放已申请的内存空间,占用有用内存。二者关系:内存泄漏的堆积最终会导致内存溢出内存溢出,就是你要的内存空间超过了系统实际分配给你...原创 2020-04-03 17:10:36 · 2048 阅读 · 0 评论 -
文件的复制、剪切、删除
#include <Windows.h>#include <stdio.h>//复制void CFileCopyClipDeleteDlg::OnBtnCopy() { DWORD getlastError; if (!CopyFileA("E:\\TestFile.txt", "E:\\Test\\TestFile.txt", false))//把1.txt...原创 2019-12-24 20:41:05 · 207 阅读 · 0 评论 -
获取当前运行程序所在路径(exe/dll)
GetModuleFileName() 函数返回当前进程已加载可执行或DLL文件的完整路径名(以’\0’终止),该模块必须由当前进程地址空间加载。若要获取另一个已加载模块的文件路径,可以使用GetModuleFileNameEx()函数。DWORD WINAPI GetModuleFileName( _In_opt_ HMODULE hModule, //应用程序或DLL实例句柄,NU...原创 2019-11-27 21:57:01 · 1206 阅读 · 0 评论 -
内存映射技术(共享内存)
内存映射 :内存映射文件不同于文件I/O操作,内存映射实际用到了Windows的核心编程技术–内存管理。使用内存映射文件的一般方法: 首先要通过CreateFile()函数来创建或打开一个文件内核对象,这个对象标识了磁盘上将要用作内存映射文件的文件。在用CreateFile()将文件映像在物理存储器的位置通告给操作系统后,只指定了映像文件的路径,映像的长度还没有指定。为了指定文件映射对...原创 2019-11-02 18:02:43 · 2625 阅读 · 0 评论 -
C++之MFC读写ini配置文件【案例介绍】
C++之MFC读写ini配置文件【案例介绍】信息化、大数据的时代,数据尤为重要,有些数据甚至是无价之宝,所以作为程序员,知道如何对关键数据进行保存至关重要。下面介绍一下读写ini文件的3个函数,并给出案例说明。3个ini文件读写函数分别是:WritePrivateProfileString();GetPrivateProfileString();GetPrivateProfileInt(...原创 2019-07-18 23:27:05 · 1296 阅读 · 0 评论 -
如何创建和加载动态链接库DLL
动态链接库DLL的动态加载DLL,即动态链接库(Dynamic Link Library),在实际应用开发过程中,为了以后对已经开发好的软件程序进行更好的维护和管理,程序的模块化是一个很好的管理方法,程序员大都喜欢把某一模块的功能做成dll文件,然后导入到工程目录中,再进行加载即可调用dll里面的函数,大大的减少了代码的阅读量,节省大量的宝贵时间,如果需要对dll里面的具体方法进行修改,直接打开...原创 2019-07-16 21:35:04 · 2086 阅读 · 0 评论 -
常用设计模式之桥接模式
桥接模式桥接模式:将抽象部分与实现部分分离,使它们都可以独立变换。桥接模式实质是因为某个对象有多个维度的变化因素;通过组合的方式将这多个维度的变化因子组合到一起。桥接模式(Bridge)是一种结构型设计模式。基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。主要特点是: 1.将实现(Implementation)抽离出来,再实现抽象(Abstraction),...原创 2019-07-29 21:47:16 · 225 阅读 · 0 评论 -
MFC之线程(开启、挂起、恢复、终止)
MFC之线程(开启、挂起、恢复、终止)MFC中线程有UI线程和工作者线程两种,下面分享一下MFC工作者线程的相关操作,包括线程的开启、挂起、恢复和终止。流程:1.列举用法2.案例展示一:MFC线程的开启CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc, //线程的入口函数 LPVOID pParam, ...原创 2019-07-30 22:25:00 · 7955 阅读 · 1 评论 -
常用设计模式之外观模式
最近由于工作的需要,程序设计方面需要考虑到一些设计模式,下面分享一个设计模式的例子:外观模式外观模式:隐藏系统内部的复杂性,只向系统使用者提供一个可以访问系统的接口。该设计模式属于结构型模式。简单来说就是,一些复杂的系统会为客户端提供一个简单的接口,而把内部功能的实现过程封装起来,客户端不需要知道内部的细节,直接使用该接口即可。通过生活中的一些例子可以更加清晰地理解什么是外观模式:例1:公...原创 2019-08-03 16:54:32 · 228 阅读 · 0 评论 -
预处理/编译命令介绍
预处理:预处理是在编译器编译之前进行的操作。预处理过程扫描源代码,对其进行初步的转换,产生新的源代码提供给编译器。所以预处理过程先于编译器对源代码进行处理,这样做的好处是经过处理后的代码会变的很精短。在很多编程语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码(防止重复包含某些文件)。要完成这些工作,就需要使用预处理程序。目...原创 2019-08-08 17:36:08 · 2189 阅读 · 0 评论 -
MFC控件 --- 进度条【案例】
打开游戏或者其他一些软件时,时常会看到刚开始时有一个进度条在加载,有点酷炫的感觉。对于MFC进度条的使用,下面用一个案例介绍一下。案例:进度条单步加载和自动连续加载步骤:1.按下图在对话框中添加一个进度条,一个编辑框,和3个按钮,并为进度条添加一个控件变量进度条变量:m_Progress2.在初始化函数中对进度条进行初始化,代码如下:BOOL CSpinDlg::OnInitDia...原创 2019-08-08 22:26:23 · 2624 阅读 · 3 评论 -
动态链接库DLL的制作(附加载演示)
之前分享了动态链接库DLL的加载,此次分享一下DLL的制作。本案例的演示其实完成了对接口的二次封装,对于某些工作,特别是机械控制类的,往往公司采购的设备种类比较多,拥有的开发文档也很多,但同一个公司如果不对这些文档的使用规定统一的调用方法,那么每用一种设备程序就有一种设备的调用方法,不方便程序的统一管理和维护。所以对这些程序提供统一的封装方法和调用方式非常重要,那么DLL模块化的思想就得到了应用。...原创 2019-08-06 21:20:28 · 426 阅读 · 0 评论 -
MFC----禁止同时运行多个实例
Windows是多进程的操作系统,由于多进程的使用,有些应用程序可以有“多开”的现象,即同一个应用程序的多次运行产生了多个运行实例。但有时候为了保证应用程序的安全运行,要求该程序只能运行一个实例,那么我们就要实现限制应用程序“多开”的功能,保证任何情况下该应用程序只有一个实例存在。那么如何保证应用程序任何情况下只有一个实例存在?可以通过创建互斥事件来进行实现。在创建应用程序的时候,在xxxA...原创 2019-08-09 17:31:39 · 1423 阅读 · 0 评论 -
MFC---定时器的使用【定时器并行】
定时器的使用非常广泛:体育课上,计算田径跑步用时;军事上,定时炸弹,定时雷管。生活上,定时器控制开关或工作时间。下面先说下MFC定时器的具体使用方法,然后再演示一个定时器的具体案例。一: 定时器的使用:1.定时器的开启:使用CWnd类的成员函数SetTimer(): SetTimer ( UINT nIDEvent, //定时器ID,用来确定消息是那个定时器发送的...原创 2019-08-11 15:46:06 · 1911 阅读 · 0 评论 -
内存分区
C++中的内存分区模型:五种分区:分别是堆区、栈区、全局静态区、文字常量区和程序代码区。也有人把全局静态区和文字常量区归为一类。堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收栈区:由编译器自动分配释放,存放函数的参数值、局部变量等全局区:存放全局变量和静态变量以及常量代码区:存放函数体的二进制代码,由操作系统进行管理。一:堆区-----存放动态变量程序员手动分配和...原创 2019-09-28 17:26:41 · 128 阅读 · 0 评论 -
VC6.0调试功能使用介绍
VC6.0调试功能使用介绍程序编译好以后需要进行错误的排查,找到代码问题所在,这就是调试。程序员的调试能力体现了程序员的水平高低,是程序员的重要能力之一。 以下是VC6调试相关介绍:一:快捷键功能功能介绍F9Insert/Remove Breakpoint在当前光标下插入/删除一个断点,有则删除,无则插入。F5G0以调试的模式运行程序,执行到有断点的地...原创 2019-06-23 12:29:21 · 2358 阅读 · 0 评论