VC++2010开发权威指南

  • static_assert(expression,message)是编译时期断言,可以用于在编译时期确定的表达式是否正确(expression返回0就是断言错误,需要输出message string信息)
  • auto 新特征是自动识别变量的类型。
    map<int,list<string>> m;
    map<int,list<string>>::iterator i = m.begin();
    auto auto_i = m.begin(); 

这两种方式实质一样,可以看出,auto的优越性。

  • 右值引用
    可以用于 移动复制。。。STL中已经自动实现了。
    && 右值引用
    & 左值引用

在任何MFC应用程序中只有一个CWinApp对象,它用于控制应用程序的初始化,应用程序的启动,主消息循环的运行,应用程序的终止。用AppWizard向导创建一个应用程序框架之后,应用程序框架自动生成了唯一的应用程序对象theAPP。从表面上看,它仅是某个类的一个实例,实际上,它内部隐藏了许多细节,如隐藏了程序最开始执行的winMain()函数。

CWinApp类有3个重要的成员函数,分别是InitInstance() Run(),ExitInstance()。其中 InitInstance成员函数是必须被重载的成员函数,APPWizard向导生成的应用程序框架中的类便重载了该函数。
这里写图片描述

Run()函数是用来处理消息循环的,不建议用户去重载他。
ExitInstance()函数是用做收尾工作的,应用程序通过调用该函数来结束运行,用户可以重载该函数以完成特殊的清除要求,如释放内存。

通过文档模板CDoCTemplate(单文档 CSingleDocTemplate ; 多文档 CMultiDocTemplate)将框架窗口类,文档类和视图类联系起来。
CHelloWorldDoc 文档类 继承于CDocument
CMainFrame 框架类 继承于CFrameWnd
CHelloWorldView 视图类 继承于 CView

CFrameWnd主框架窗口类负责标题栏,菜单栏,工具栏及状态栏的生成。
CMainFrame是CHelloWordView的基类,视图窗口View显示在主窗口MainFrame的客户区中。

视图是显示文档数据的界面,它主要占据主框架窗口的客户区,视图类不仅把程序文档数据显示出来,而且还能接受用户的输入和编辑。试图对象是通过消息与主框架,文档对象互操作的。
文档对象是存储程序数据的地方,一般说,把要存储的数据放到文档对象中,即把要存储的数据作为文档对象的成员变量,进而实现文档的串行化,并允许视图类编辑这些成员变量。一个文档包括从图形文件到可编程控制的任何内容。

注意:因为窗口在内存中创建,而内存是经常变化的,所以窗口地址可能是经常变化的,因此,窗口句柄并非直接指向窗口对象,而是指向跟踪窗口对象地址的另一个指针。

删除一个窗口的操作如下:
pwnd->DestoryWindow()
delete pwnd;

在Win32应用程序中采用的是消息循环机制,用一系列的switch-case语句来处理消息,而在MFC中,对消息的处理采用的是 消息映射机制

消息循环的机制过程是: 将消息传给窗口回调函数去处理,由操作系统调用窗口函数,即把消息路由给操作系统,操作系统再调用窗口回调函数进行处理。

  • Windows消息的种类:

    1. 键盘消息
      WM_CHAR 该消息的处理函数OnChar()
      WM_KEYDOWN 用户按了一个非系统键
      WM_KEYUP 在非系统键被释放时产生的消息

    2. 鼠标消息
      WM_MOUSEMOVE WM_LBUTTONDOWN 系列(单击双击 up down click)的都是

    3. 窗口消息
      WM_CREATE 窗口被创建
      WM_DESTROY 窗口被销毁
      WM_CLOSE 窗口被关闭
      WM_MOVE 窗口被移动
      WM_SIZE
      WM_PAINT 窗口发生了重绘

创建一个窗口对象的时候,在创建过程中收到的消息就是 WM_CREATE消息。对这个消息的处理过程一般用来设置一些显示窗口前的初始化工作,如设置窗口的大小,背景颜色等。

4.焦点消息
WM_SETFOCUS 窗口得到焦点
WM_KILLFOCUS 窗口失去焦点

5.定时器消息:WM_TIMER

6.命令消息:WM_COMMAND
每当用户选择一个菜单命令,单击一个按钮或者需要告诉系统应当执行什么操作的时候,则发送一条命令消息WM_COMMAND。所有命令消息都包含一个共同的参数,那就是该命令消息需要操作的资源ID值。

执行消息循环的函数 是wndAPP的Run()方法。
可以重载OnIdle()函数,以使应用程序能够执行任何后台任务。

virtual BOOL OnIdle(LONG lCount); // return TRUE if more idle processing

类中是如何加入静态消息映射表,用户是怎么添加消息映射的?MFC是通过提供一对宏来实现的:DECLARE_MESSAGE_MAP() BEGIN_MESSAGE_MAP() 和END_MESSAGE_MAP()。
DECLARE_MESSAGE_MAP() 在类的头文件中,用户声明在源文件中存在消息映射。

BEGIN 和END 消息映射在类的实现文件中使用,分别标识消息映射的开始和消息映射的结束。

afx_msg void OnHide();//消息映射的函数声明

#define WM_HIDE WM_USER+100
ON_MESSAGE(WM_HIDE,OnHide)//消息映射的对应

一个视图对象有且只有一个与之相关联的文档对象,它所包含的GetDocument()函数允许应用程序在视图中得到与之相联系的文档对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值