- 博客(13)
- 资源 (4)
- 收藏
- 关注
原创 MFC内部机制探秘
由于MFC应用程序涵盖了基于SDK的windows程序几乎所有的功能,所以使用MFC AppWizard创建的MFC程序将自动具有WIndows程序的基本功能,我们今天就来探寻一下MFC的框架机制。首先大家先利用向导制动建立一个基于MFC的单文档应用程序。我取名为MFC_DISCOVER,方便大家自己验证自己的程序。(多图预警)1.声明全局对象\quad利用应用程序对象theApp启动应用程序,th
2016-04-29 09:55:44 2816
原创 Window程序的结构--学习笔记
学过C系语言编程的都知道,程序的入口一定是main()函数,在windows系统中也有这样的函数,它叫WinMain函数。WinMain函数是所有windows程序的入口,主要负责注册窗口类,创建并初始化窗口,进入消息循环,以及消息循环检索到WM_QIUT消息时,终止程序执行。下面详细说明\quad在此之前,请看下面的代码:int WINAPI WinMain( HINS
2016-04-28 16:43:01 1596
原创 Windows消息队列学习笔记
1.windows消息和消息结构一条消息是作为一个结构传递给应用程序的,这个结构中,包含了消息号,消息的类型,字参数和长字参数等信息。结构定义如下:typedef struct tagMSG { HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; } MSG;第一个成员变
2016-04-27 17:12:47 4538
转载 MFC框架的一种理解方法
MFC的水很深,如果你想搞清楚所有的的细枝末节,恐怕我这里就帮不到你了,需要看侯捷的《深入浅出MFC》之类的书籍,一般而言,我们没必要知道所有的底层技术,但是知道一点基本的框架,对于编程还是很有用的。\quad一个简单的MFC程序\quad通常而言,我们在生成MFC程序的时候都是直接用类向导(class Wizard)生成好一个框架,你若想通过这个框架去分析MFC的机制,就会发现越深入,越难懂。
2016-04-27 00:25:03 6088
翻译 c++ lambda表达式
c++lambda表达式是c++11中的新增特性,最开始知道lambda表达式的时候,是学习python,python中的lambda表达式是用于简化函数编写,同样,我认为c++引入这个也是为了方便,lambda表达式并非不可替代,但是合理用lambda表达式,可能会事半功倍,至少也能少打一些字吧。\quad我在前面讲函数对象时说到过很多stl算法都需要一元谓词,二元谓词,先看一个例子:templa
2016-04-21 16:33:41 617
翻译 C++函数对象-谓词
函数对象(也叫functor),听起来或许有点陌生,但他们是c++实体,即使你没有用过,也一定见过,只是你没有意识到而已。从概念上讲,函数对象时用作函数的对象;但是从实现上来说,函数对象时实现了 operate()的类的对象。虽然函数和函数指针也可以归为函数对象,但实现了operate()的类的对象才能保存状态,才能用于STL。\quad我们直接看定义: - 一元函数:接受一个参数的函数,如f(x
2016-04-20 23:34:29 2685
转载 使用宏避免多次包含
\quad在写程序是时考虑这样一种情况:如果头文件class1.h中声明了一个类,而这个类将class2.h中的声明作为类成员,则需要在class1.h中包含class2.h。如果设计非常复杂,即第二个类也需要第一个类,则class2.h中也包含class1.h.\quad然而在处理器看来,两个头文件彼此包含会导致递归问题,为了避免这种问题,可以结合使用宏以及预处理器编译指令#ifdef和#endi
2016-04-13 12:04:57 781
翻译 C++类型转换之dynamic_cast
C++提供了一种新的类型转换运算符,专门用于继承的情形,这种情形在c语言中不存在。再说dynamic_cast之前,我想先说说static_cast \quadstatic_cast用于在相关类型的指针之间进行转换,还可以显示地执行标准数据类型的类型转换—这种转换原本将自动或隐式进行。用于指针时,static_cast实现了基本的编译阶段检查。确保指针被转换为相关类型。这改进了c风格类型转换,在c语
2016-04-12 23:45:13 669
翻译 含有指针成员时的赋值运算符重载
如果类封装了原始指针,如下面这个类:class MyString{private: char* Buffer;public: // constructor MyString(const char* InitialInput) { if(InitialInput != NULL) { Buffer = new char [strle
2016-04-12 21:26:31 2002
翻译 运算符重载之转换运算符
我们知道c++中,cout<<3、cout<<"hello"是没有问题的,但是若你声明了一个类Fish,想输出类的相关信息,使用cout<<Fish是无法正确被识别的。当然你可以申明一个类成员函数print(),调用Fish.print(),但是我们可以重载转换运算符,使得输出根伟方便我们知道c++中,cout<<3、cout<<"hello"是没有问题的,但是若你声明了一个类Fish,想输出类的相
2016-04-11 10:33:46 940
转载 虚函数的工作原理--虚函数表
请看下面的Base类,它申明了N个虚函数:class:Base{public: virtual void func1() { //Func1 implementation } virtual void func2() { //Func2 implemetation } //..so on and so for
2016-04-10 16:51:39 684
翻译 C++中的为什么需要虚析构函数
让我们先看一个简答的例子:#include <iostream>using namespace std;class Fish{public: Fish() { cout << "Constructed Fish" << endl; } ~Fish() { cout << "Destroyed Fish" << endl; }};cl
2016-04-10 11:53:32 860
原创 关于C++中getline()函数的一个陷阱
最近写代码的时候遇到一个问题,就是getline函数接受标准输入(键盘)时,失效了。请先看代码:#include<iostream>#include<vector>#include<string>using namespace std;int main(){ cout<<"your age:"<<endl; int a; cin>>a; string str1
2016-04-07 20:26:05 5914 3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人