VC++2010开发权威指南

来源:互联网 发布:上海仪电 云计算测试 编辑:程序博客网 时间:2024/04/28 14:48
  • 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+100ON_MESSAGE(WM_HIDE,OnHide)//消息映射的对应

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

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子学习不好怎么办我们有绝招 英语不会做题怎么办呢? 小学二年级孩子厌学怎么办 狗狗拉肚子不吃东西怎么办 小孩做作业时容易发呆怎么办 一上高速就犯困怎么办 孩子初中数学学不好怎么办 高三注意力不集中怎么办 考砸了家长打我怎么办? 高三学生困疲劳怎么办 高三晚上很困怎么办 孩子上高三压力大不想上学怎么办 高三的孩子压力大怎么办 高三复读压力大怎么办 孩子一年级做数学粗心怎么办 一年级的孩子数学总粗心怎么办 天生手脚笨的人怎么办 高三的孩子厌学怎么办 二年级小孩学习笨怎么办 孩子高二不想上怎么办 高三孩子玩手机怎么办 孩子考试粗心丢题怎么办 工作中总出错是怎么办 工作上做错事了怎么办 惹她不开心了怎么办 惹到别人不开心怎么办 孩子高三不愿意写作业怎么办? 小孩特别懒不爱学习怎么办 小孩上三年级不爱学习怎么办 一年级孩子做题粗心怎么办 一年级的孩子做题粗心怎么办 一年级娃娃做题粗心怎么办 有同学抄作业该怎么办 同学要抄我作业怎么办 同桌抄我作业我该怎么办 孩子想换同桌老师不同意怎么办 尴尬的事情心里难受怎么办 孩子撒谎不完成作业怎么办 孩子撒谎不交作业怎么办 孩子不爱写作业撒谎怎么办 大便又粗又硬怎么办