
MFC与C++学习笔记
文章平均质量分 81
草根武林
吾本草根,体羸身弱,偶涉武林,徜徉其中,未尝间断,虽未成才,幸窥一斑,私发宏愿,传承兴家。
展开
-
COM,DCOM原理及应用
1、DCOM COM的进程透明特性表现在组件对象和客户程序即可以拥有各自的进程空间,也可以共享同一个进程空间,COM负责把客户的调用正确传到组件对象中,并保证参数传递的正确性。组件对象和客户代码不必考虑调用传递的细节,只要按照一般的函数调用的方式实现即可。如果进一步拓展进程透明特性,考虑组件对象与客户程序运行在不同计算机上的情形,把进程透明性拓展为位置透明性,形成分布式组件对象模型...转载 2019-11-14 11:50:58 · 1777 阅读 · 0 评论 -
动态改变ListCtrl中的图标
第一部分为加载:DWORD dwStyle = m_listNodeInfo.GetExtendedStyle(); dwStyle |= LVS_EX_FULLROWSELECT;//选中某行使整行高亮(只适用与report风格的listctrl) dwStyle |= LVS_EX_GRIDLINES;//网格线(只适用与report风格的listctrl) d原创 2017-05-19 10:23:12 · 800 阅读 · 0 评论 -
设置listctrl 风格及扩展风格
1. CListCtrl 风格 LVS_ICON: 为每个item显示大图标 LVS_SMALLICON: 为每个item显示小图标 LVS_LIST: 显示一列带有小图标的item LVS_REPORT: 显示item详细资料 直观的理解:windows资源管理器,“查看”标签下的“大图标,小图标,列表,详细资料”转载 2017-05-09 15:05:08 · 1706 阅读 · 0 评论 -
VC++获得当前系统日期和时间问题汇总
Ⅰ.VC中得到当前系统的时间和日期:得到时间的方法一般都是得到从1900年0点0分到现在的秒数,然后转为年月日时分秒的形式得到当前的时间(时分秒)。主要方法如下:1)使用CRT函数C++代码 char szCurrentDateTime[32]; time_t nowtime; struct tm* ptm;转载 2017-02-03 16:26:07 · 21596 阅读 · 1 评论 -
CThread - a Worker Thread wrapper class
https://www.codeproject.com/Articles/111/CThread-a-Worker-Thread-wrapper-class?msg=5361661#xx5361661xxPrefaceCThread Class ConceptionThread Task ParadigmsTrivial ThreadsNotificable T转载 2017-02-15 09:00:58 · 866 阅读 · 0 评论 -
MFC对话框及其控件同步缩放
这是最原始的方法也是最实用的方法!代码如下:YourDlg.h头文件中加入:POINT m_oSize;afx_msg void OnSize(UINT nType, int cx, int cy);YourDlg.cpp文件中加入:BOOL CItouziDlg::OnInitDialog(){CDialogEx::OnInitDialog()原创 2017-01-24 10:21:24 · 848 阅读 · 0 评论 -
VC中如何将控件保存为图片
第一种方法:voidCItouziDlg::OnBnClickedSave(){HBITMAP hBitmap = NULL; //创建位图段 BITMAPINFO bmi; LPBYTE pBits; ZeroMemory(&bmi,sizeof(bmi)); //IDC_CHARTCTRL为控件变量名(可以是任何控件!) CDC *p原创 2017-01-23 12:35:04 · 1381 阅读 · 1 评论 -
Using Worker Threads
IntroductionWorker threads are an elegant solution to a number of problems about concurrent processing; for example, the need to keep the GUI active while a computation is being performed. This es转载 2017-02-13 10:34:55 · 650 阅读 · 0 评论 -
关于Visual Studio 2010与64位系统的问题
这种问题是在论坛里经常被问到的问题:有没有64位的VS2010?Vs2010能不能编译64位的程序?我的回答是这样的:1. VS2010没有专门的64位版。但32位版可以在64位系统上面正常使用。2. 如果安装VS2010的时候,在安装选项里面,选择了 X64 Compilers and Tools,那么你就可以编译x64版本的程序;同理如果你在安装选项里面选择了Itan转载 2017-09-26 07:14:08 · 3343 阅读 · 0 评论 -
代码的编译、连接与执行过程分析
问题:1、为什么外部变量的定义性声明只能在一个编译单元中出现?2、为什么同一个函数的定义不能出现在多个编译单元中?3、为什么类定义应当写在头文件中,可被多个源文件包含?一、编译源文件(如:.cpp或.c文件)经过编译处理后生成目标文件(如:.obj文件)的过程称为编译。编译是对一个个单独的源文件进行处理,每个文件都对应生成一个目标文件或构成一个编译单元,不同的编译单元是互不影响原创 2017-11-07 09:45:09 · 426 阅读 · 0 评论 -
OPC之DCOM配置
一、在装有OPC Server的机器上。DCOM配置如下(OLE for Process Control):1.在Windows的安装目录中System32中运行服务器上的dcomcnfg.exe程序,进行DCOM配置。2.进入DCOM的总体默认属性页面,将“在这台计算机上启用分布式COM”打上勾,将默认身份级别改为“无”。3.进入DCOM的总体默认安全机制页面,确认默认访问权限和默认启动权...转载 2019-06-27 14:41:16 · 3497 阅读 · 0 评论 -
COM技术和.NET的关系
The Microsoft .NET Framework consists of a library of classes called the Framework ClassLibrary(FCL) and a Common Language Runtime (CLR) that provides a managed code executionenvironmentwith featur...转载 2019-06-24 09:22:55 · 854 阅读 · 0 评论 -
COM组件(MFC篇)
目 录第1章 创建进程内组件11.1 目标11.2 创建项目31.2.1 VC++6.031.2.2 VC++201041.2.3 VC++6.0与VC++2010的区别61.3 升级项目61.3.1 增加接口定义文件61.3.2 覆盖应用程序类的InitInstance函数71.3.3...转载 2019-06-23 11:03:31 · 1926 阅读 · 0 评论 -
三种编程命名规则:驼峰命名法,帕斯卡命名法,匈牙利命名法
三种流行的命名法则目前,业界共有四种命名法则:驼峰命名法、匈牙利命名法、帕斯卡命名法和下划线命名法,其中前三种是较为流行的命名法。驼峰命令法(Camel): 也称骆驼式命名法正如它的名称所表示的那样,是指混合使用大小写字母来构成变量和函数的名字例如,下面是分别用骆驼式命名法和下划线法命名的同一个函数:程序代码printEmployeePaychecks();print_em...转载 2019-01-23 16:08:01 · 5167 阅读 · 0 评论 -
EditPlus挂接Vc6.0 的配置方法
注:其中相关目录(E:\Program Files\.....)因情况而异。工具/ 配置工具/弹出参数选择窗口,“组名称”改为Debug c/c++,“添加工具”添加如下两个“应用程序”:1、菜单文本:编译命令:"E:\Program Files\Microsoft Visual Studio\VC98\Bin\CL.EXE"参数:"$(FilePath)"起始目录:$(FileDi...转载 2018-11-15 14:48:17 · 356 阅读 · 0 评论 -
用EditPlus编译C/C++程序的设置步骤
EditPlus不介绍了,大家都知道,最近在复习C/C++,用VS2005太慢了,所以一直用EditPlus来测试代码。这是用EditPlus编译C/C++程序的设置步骤:工具->配置用户工具->添加工具>>程序: 菜单文本:Compile (或 编译) 命令: 找到cl.exe //(如:C:\Program...转载 2018-11-08 08:38:29 · 4539 阅读 · 0 评论 -
EditPlus+MinGW使用经验集
1、cmd命令行下进行编译总是出现:g++: error: CreateProcess: No such file or directory,之前也通过set path="c:\Editplus\mingw\bin\"进行了设置。解决方案:通过百度,有些原因是因为文件没有拷贝全造成的,有些是因为文件没有用对造成的,但均不能解决我所遇到的这个问题,另外发现在EditPlus中是可以用g++的!最...原创 2018-11-08 08:22:13 · 389 阅读 · 0 评论 -
C++基础知识(修正)
一、指针指针可以说是双面剑,能让C/C++灵活强大,也让C/C++易出大错,以下是C/C++中指针使用易错的地方。1、指针的混合运算和运算优先级指针运算符*、取地址运算符&、++、--运算符优先级都相同,且都具有右结合性。在一个表达式中判断执行顺序,还要结合++、--的前置性(先加减后用)和后置性(先用后加减)统一考虑。int a[4] = {100原创 2016-12-21 09:37:25 · 353 阅读 · 0 评论 -
关于volatile的用法
就像大家更熟悉的const一样,volatile是一个类型修饰符(type specifier)。它是被设计用来修饰被不同线程访问和修改的变量。如果不加入volatile,基本上会导致这样的结果:要么无法编写多线程程序,要么编译器失去大量优化的机会。作用编辑volatile的作用是: 作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值.转载 2017-02-11 10:25:36 · 2509 阅读 · 0 评论 -
C++11之右尖括号(影响面广)
对于C++程序员来说,>>是位右移操作符,但在一此应用中会涉及到需要连写的地景,例如:模板和表达式转换。 在实例化模板时会出现连续两个右尖括号,同样static_cast、dynamic_cast、reinterpret_cast、const_cast表达式转换时也会遇到相同的情况。C++98标准是让程序员在>>之间填上一个空格,而C++11则废除了这一规定,支持连写。原创 2017-01-04 11:06:48 · 2311 阅读 · 0 评论 -
C++类对象共享数据的两种实现方法
C++中类对数据与行为做了封装,使得私有数据成员不能在类体外被访问,同时类对象之间也不能互相访问对方的私有成员,而在有些情况下,数据既需要保持其私有性,又需要其有共享性,以下将给出两种方式的实现。一、静态成员变量#include using namespace std;class sample{private:static char m_sArray[20];pub原创 2016-12-25 08:43:26 · 7998 阅读 · 0 评论 -
new/delete用法
C++提供了new/delete操作符对内存进行动态定理,在使用有两种方式:C++运行库的默认全局方式和自定义实现。一、C++运行库中的new/delete使用:1.1、C++标准中关于new/delete的声明namespace std{class bad_alloc;struct nothrow_t {};extern const nothrow_t nothro原创 2016-12-23 07:23:17 · 547 阅读 · 0 评论 -
应用程序与系统内存管理
1、虚拟内存原创 2016-12-21 06:50:53 · 851 阅读 · 0 评论 -
动态内存分配
动态内存分配指的是在堆上进行分配内存,根据申请分配的层次可以分成两大类:1、底层:堆内存管理函数HeapCreate、HeapAlloc、HeapFree、HeapDestroy函数 HeapCreate函数功能:创建自定义堆,这不同与默认堆由进程创建时系统自动创建。HeapAlloc函数功能:从自定义堆中分配内存。HeapFree函数功能:释放内存。但并不能保证所有的物理内原创 2016-12-22 14:32:20 · 665 阅读 · 0 评论 -
C++11之模板函数(影响面广)
一、示例代码C++98中引入了函数模板与类模板,类模板声明中允许默认模板参数,但不支持函数模板默认参数。C++11将这一限制取消。在EditPlusMinGW下,调试如下示例代码:(本人设置为:^F7用C++11编译,^7用C++98编译)#include #include using namespace std;template // C++98和原创 2017-01-04 09:25:35 · 427 阅读 · 0 评论 -
C++11之动态类型引入(影响面广)
python、perl等语言中的“动态类型”功能让C++程序员很羡慕,也即变量不需要声明类型,拿来就用,类型是在运行中实时确定的。C++98标准中只有“静态类型”,定义的变量在编译期间就要确定类型,C++11标准将以前很少用的atuo(C++98中为自动存储类型,所有的局部变量默认都为这种类型)原功能取消,赋予了新的功能:“动态类型”。一、C++11中的auto功能:1.1、通过推导可以接原创 2017-01-05 07:36:22 · 600 阅读 · 0 评论 -
C++11之lambda表达式(影响面广)
我认为C++11给所有人带来最大的惊喜是引入了Lambda表达式!虽然第二早的高级语言LISP早就引入了这种编程范型,现代语言C#、PHP都提供了Lambda的支持,而最新的Java 8也提供了支持。一、语法及示例代码:首先给出Lambda语法定义:[捕捉列表](参数列表) mutable/const->返回类型{ 函数体 }。“捕捉列表”有两个作用,其一是告之编译器下面可能是La原创 2017-01-07 08:40:47 · 581 阅读 · 0 评论 -
C++中看不见的临时对象
面向对象的编程语言中涉及到对象的创建与销毁,其中有构造函数与析构函数的调用,在创建对象、值拷贝对象等过程中,编译器会隐含创建一些源码中没有的临时对象,如果不注意,这些临时对象会给程序的性能带来很大的影响。下面介绍二种常见的临时对象产生环境并给出解决方案:1、当函数返回一个对象时,一般情况下会出现临时变量class A{ public: A& operat原创 2016-12-21 09:12:01 · 352 阅读 · 0 评论 -
一个好的GCC下载地址
http://www.equation.com/servlet/equation.cmd?fa=fortran原创 2016-12-31 10:28:28 · 6262 阅读 · 1 评论 -
Win32应用程序启动步骤详解
关于Win32应用程序的启动,我们给出一个有可执行文件+动态链接库的实例来分析。1、操作系统创建进程,分配私有进程空间,理论上32操作系统每个进程有4G的内存空间,其中低2G为系统所用,高2G为进程所用。操作系统的加载器把可执行文件的数据段和代码段映射到进程的虚拟内存空间,需要注意的是并不是把所有的代码和数据都拷贝到内存,而只是预先取出部分代码和数据拷贝到内存。2、加载器读入可执行文件的导原创 2016-12-29 14:54:45 · 1043 阅读 · 0 评论 -
C++11之断言(影响面广)
很可笑,我很少用断言,对断言的不了解程度与初学者无异。今天翻看了《深入理解C++11》,新标准中对断言做了改进,至少说明断言还是很有用的。结合《代码大全》、《C++应用程序性能优化》把自己对断言的理解写下来以方便自己日后用到时查阅。一、为什么要用断言首先要搞清楚为什么要用断言,不能看别人代码中有,就追赶时髦地用一用!从效果上来说assert断言能用if语句替换,那么为什么不用if语句把断言原创 2017-01-02 08:36:16 · 4543 阅读 · 0 评论 -
C++11之基于范围的for循环(影响面广)
在Java语言中已有基于范围的for循环了,C++98中的fo循环与其比较,使用上繁琐。C++11则引入了基于范围的for循环,使程序变得更加简洁。一、几组示例:#include #include #include #include using namespace std;int opera1(int &i) { i *= 10;}int opera2(原创 2017-01-05 13:04:52 · 528 阅读 · 0 评论 -
内存映射文件的使用
内存映射文件一般有三种用途:1、访问硬盘文件。2、共享内存。3、exe与dll文件使用。不管哪种用途,其使用的步骤如下所述(按实现函数的顺序):1、CreateFile函数功能:获取文件对象句柄,成功后返回对象句柄,不成功则返回INVALID_HANDLE_VALUE。2、OpenFileMapping函数功能:创建或打开一个文件映射内核对象,其中用到了CreateFile函数返回的对...原创 2019-10-07 11:11:09 · 619 阅读 · 0 评论