简要回顾 了解课程体系、课程目的和主要内容 掌握Windows编程涉及的一些主要概念 DOS程序和Windows程序的主要区别 窗口和程序

Slides:



Advertisements
Similar presentations
软件开发技术基础 第 3 章 操作系统及程序设计 讲授教师:卫颜俊. 主 要 内 容 主 要 内 容 操作系统及其功能 进程管理应用程序设计 内存管理应用程序设计 设备与文件管理应用程序设计 人机接口管理应用程序设计.
Advertisements

主讲:王幸民 理学院计算机基础教学部.
C语言程序设计 主讲教师 :张群燕 电话:
授课教师:江星玲 1.
第一章 C语言概述 计算机公共教学部.
过程性保存文本格式的实现 计算概论小课题 王元康.
开放教育入学培训 —— 计算机培训: 基础知识
计算机高级程序设计 第五章.
计算机图形学 授课教师:陈荣钦 短号: 单位:数信学院.
基于VC++的数字图像特效处理系统的设计与实现
吉林大学远程教育课件 Windows A P I编 程 (第四十五讲) 主讲人 : 翟慧杰 学 时:48.
提高打字技能 —— 键盘规范操作.
第一章 認識Visual C 環境架構 1-1 認識Visual C Visual Studio 概觀
陈 峦 副教授 研究院大楼316# 电子科技大学 能源科学与工程学院
Chapter 1 用VC++撰寫程式 Text book: Ivor Horton.
第二十九章 DLL / LIB函式庫開發 當我們開發程式到一個階段之後,我們一定會希望各個Component的程式碼可以分開的越清楚越好。而這一章最主要就是要告訴各位讀者,我們常在Windows系統中看到的dll或是lib的檔案該怎麼實作?做出這樣的library我們又該如何運用?為什麼使用dll或是lib有利於我們開發程式?以上這些疑問都將會在這一章中得到解答。
CAA 第一章 安装 1 安装CATIA。在安装CATIA时,要把它装到根目录下,文件夹名称不能含有空格,(在此命名为CATIA)安装完后,用crack文件下JS0GROUP.dll拷贝到d:\CATIA\B14\intel_a\code\bin下的覆盖。 2 安装vc。装vc时选自定义,把里面的所有组件都选上。
Visual C++ Windows Programming
第4讲 Windows编程基础 此为封面页,需列出课程编码、课程名称和课程开发室名称。
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
程序设计期末复习 黎金宁
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第5章 文本与字体 2018/12/3 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/3 Huang Weitong.
第1章 Windows应用程序框架的 创建与消息处理
第3章 Windows 应用程序基础 2018/12/6 第2讲 Windows 应用程序基础 VC++面向对象与可视化程序设计.
第十一讲 MFC常用控件的使用(3) 严宣辉 数学与计算机科学学院
MFC WinSock类的编程 为简化套接字网络编程,更方便地利用Windows的消息驱动机制,微软的基础类库(Microsoft Foundation Class Libary,简称MFC),提供了两个套接字类,在不同的层次上对Windows Socket API函数进行了封装,为编写Windows.
网络游戏开发语言基础 ——Windows程序设计
第5章 文本与字体 2018/12/31 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2018/12/31 Huang Weitong.
Windows 编程技术 2005年9月 2018/12/31.
今天上課流程表 一 復習 當機急救法 。 二 怪客故事(二) 三 校園打字機— 高級 60秒, 零錯字。
第4章 MFC编程 4.1 MFC概述 4.2 MFC和Win CObject类 4.4 消息映射的实现
第 10 章 Windows用户界面 10.1 Windows消息与命令 10.2 单文档与多文档程序 10.3 对话框与常用组件
2019/1/17 Java语言程序设计-程序流程 教师:段鹏飞.
MS Windows XP 作業系統使用操作簡介.
Visual C++ Windows Programming
Instructor:Po-Yu Kuo 教師:郭柏佑
第2章 绘制多谐振荡器电路原理图 教学目的及要求: 1.熟悉电路中的各种元器件之间建立连接 2.熟悉网络标记的含义,会正确放置网络标记
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
第十五讲 MFC与消息处理 MFC简介 Windows编程机制 MFC应用程序框架原理 创建应用程序框架 消息及其分类 消息映射机制
版权所有 复制必究 第 6 章 MFC原理与方法.
劉崇汎 崑山科技大學 電腦與通訊系 DLL的建立與引用 劉崇汎 崑山科技大學 電腦與通訊系
第十二讲 菜单、工具栏和状态栏 严宣辉 数学与计算机科学学院
《面向对象程序设计与Visual C++6.0教程》
Visual C++ Windows Programming
Windows 程式設計 (使用 C++ / C#)
上机环境介绍 杨斌
_05MessageMap的原理 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
MFC及其应用.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第八次上課流程表 *** 大頭貼 1. 請到 大頭貼網站 製作圖檔 2. 將圖片存到桌面(按右鍵---另存圖片)
Word 2003 學習導引手冊 第二章 輸入文稿與設定格式 作者 丁安強 博碩-Word 2003 學習導引手冊 Ch02.
第5章 文本与字体 2019/4/25 面向对象与可视化 程序设计 --Visual C++ 编程 主讲教师: 唐 龙教授 (计算机科学与技术系) 黄维通博士 (计算机与信息管理中心) 清 华 大 学 2001年2月 2019/4/25 Huang Weitong.
C++语言程序设计教程 第2章 数据类型与表达式 第2章 数据类型与表达式 制作人:杨进才 沈显君.
功能表的建立 製作.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
Visual C++ Windows Programming
第二章 Java语法基础.
第二章 类型、对象、运算符和表达式.
第10章媒体控制接口 10.1 MCI设备类型 10.2 MCI编程步骤 10.3使用MCIWnd窗口类.
#include <iostream.h>
第二章 Java基本语法 讲师:复凡.
数数据的基本操作 电子工业出版社.
1.4WIN32中的宽字符.
第2章 Java语言基础.
MFC的六大核心 机制3 动态创建 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
熟悉VC++开发环境.
Word 2010 文書處理技巧 圖資中心資訊組 李訓榮.
手工编写第一个 MFC程序 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Presentation transcript:

简要回顾 了解课程体系、课程目的和主要内容 掌握Windows编程涉及的一些主要概念 DOS程序和Windows程序的主要区别 窗口和程序 进程与线程 句柄、常用句柄 API与SDK 事件及消息(消息驱动/产生/传递/消息循环)

MFC的基本结构 2

主要内容 Visual C++开发环境的熟悉和使用 Ex_HelloWin程序进一步讲解 MFC的基本结构 MFC应用程序框架 窗口输入消息处理

Visual C++开发环境 标题栏 菜单栏 工具栏 工具栏 项目工作区窗口 文档窗口 输出窗口 输出窗口标签 状态栏

开发环境的菜单功能 File菜单中的命令主要用来对文件和项目进行操作 Edit菜单中的命令是用来使用户便捷地编辑文件内容 View菜单中的命令主要用来改变窗口和工具栏的显示方式,激活调试时所用的各个窗口等 Insert菜单中的命令主要用于项目及资源的创建和添加

开发环境的菜单功能 Project菜单中的命令主要用于项目的一些操作 Build菜单中的命令主要用来应用程序的编译、连接、调试、运行 Tools菜单中的命令主要用于选择或定制开发环境中的一些实用工具 Windows菜单中的命令主要用于文档窗口的操作 Visual C++ 提供了大量详细的帮助信息

开发环境的工具栏 标准工具栏 类向导工具栏 小型编连工具栏 工具栏的显示与隐藏、浮动与停泊 “Customize”对话框方式(Tools--Customize) 快捷菜单方式(任何工具栏处右击鼠标)

项目和项目工作区—目录结构 在VC中,项目中所有的源文件都是采用文件夹的方式进行管理的 将项目名作为文件夹名,在此文件夹下包含源程序代码文件(.cpp,.h)、项目文件(.dsp)以及项目工作区文件(.dsw)等 下面列出了其他一些文件类型的的含义: .opt 关于开发环境的参数文件,如工具条位置等信息 .aps(AppStudio File) 资源辅助文件,二进制格式 .clw ClassWizard信息文件 .dsp(DeveloperStudio Project) 项目文件 .plg 编译信息文件 .hpj(Help Project) 帮助文件项目

项目和项目工作区—目录结构 .mdp(Microsoft DevStudio Project) 旧版本的项目文件 .bsc 用于浏览项目信息 .map 执行文件的映像信息纪录文件 .pch(Pre-Compiled File) 预编译文件,可以加快编译速度,但是文件非常大 .pdb(Program Database) 记录程序有关的一些数据和调试信息 .exp 记录DLL文件中的一些信息,只有在编译DLL才会生成 .ncb 无编译浏览文件(no compile browser)

项目和项目工作区—目录结构 还有相应的Debug或Release、Res等子文件夹 VC应用程序向导创建项目时,系统会自动为项目创建Win32 Debug的运行程序,并使用相应的缺省配置 Win32 Release版本的区别在于 Debug版本的运行程序有相应的调试信息码 Release版本的运行程序没有 Release版本的运行程序经过代码的优化,其程序的运行速度被最大加速

项目和项目工作区 在开发环境中,VC是通过左边的项目工作区窗口来对项目进行各种管理 项目工作区窗口包含三个页面 ClassView页 ResourceView页 FileView页

项目和项目工作区 ClassView页 用以显示项目中的所有的类信息 假设打开的项目名为Ex_Sdi,单击项目区窗口底部的ClassView,则显示出“Ex_Sdi classes”的树状结点 在它的前面是一个图标和一个套在方框中的符号“+”,单击符号“+”或双击图标,Ex_Sdi中的所有类名将被显示 如CMainFrame、CEx_SdiApp、CEx_SdiDoc、CEx_SdiView等

项目和项目工作区 ResourceView页 FileView页 包含了项目中所有资源的层次列表。每一种资源都有自己使用的图标 创建一个新目录项,可在添加目录项的地方右击,选择“New Folder”,输入目录项名称和相关的文件扩展名,单击“OK”

资源 资源的分类 (1) 快捷键列表 (2) 工具栏按钮 (3) 鼠标指针 (4) 对话框 (5) HTML (6) 图标 (7) 菜单 (8) 字符串列表 (9) 版本信息

标识符 标识符的命名规则: 在标识符名称中允许使用字母a~z、A~Z、0~9以及下划线 标识符名称不区分大小写字母 不能以数字开头,如8BIT是不合法的标识符名 字符个数不得超过247个

资源基本操作 创建资源 (1) 从“Insert”菜单选取“Resource”;或用快捷键Ctrl+R打开对话框 [New]用来创建一个由Resource Type列表中指定类型的新资源 [Custom]按钮用来创建Resource Type列表中没有的新类型的资源 [Import]按钮用于将外部已有的位图、图标、光标或其他定制的资源添加到当前应用程序中 (2)  从Resource Type列表中选择一种资源类型,而后按[New]按钮 (3) 在项目工作区窗口的ResourceView页面中,看到了刚才选中的资源的缺省标识符,而且相应的资源编辑器自动打开

资源基本操作 打开资源 如果需要对已有资源进行查看或修改,可以首先切换到项目工作区窗口的ResourceView标签页,然后选中要打开的资源,双击鼠标左键或者按Enter键,这时相应的资源编辑器也会相应自动打开 保存资源 当设计或修改好一个资源后,用File菜单的Save菜单命令或利用快捷键Ctrl+S将其保存在当前资源文件中

资源基本操作 删除、复制资源 如删除一个已有的资源,首先切换到项目工作区窗口的ResourceView标签页,然后选中要打开的资源,按Del键或者利用Edit菜单下的Delete菜单项可实现删除 复制资源的过程与删除类似,选中要复制的资源,按住Ctrl键不放,并拖动鼠标左键或利用Edit菜单中的Copy和Paste菜单命令进行操作,同其他软件的复制过程相同

资源文件的管理 资源文件一经创建,其中所包含的资源也就随之而定,与资源相对应的标识符也被保存在Resource.h头文件中。 资源编辑器 一般,在一个资源文件.RC中所保存的所有资源已经满足的需要了,尽管如此,VC仍然允许用多个文件来存放资源 用View菜单中的Resource Includes菜单命令打开“Resource Includes”对话框时,可以看到Compile-time directives编辑框中已经含有#include "res\Ex_Sdi.rc2"。 资源编辑器 所有Windows资源都可以用VC提供的资源编辑器来编辑

一个控制台应用程序 实例创建(演示) 用AppWizard创建 理解程序框架 添加程序代码 编译运行

命名规则 函数命名规则 变量命名规则 函数名 = 动词 + 名词 动词和名词的第一个字母必须大写 例 GetMessage 变量命名规则 小写字母前缀表示变量的类型,其余的部分描述变量的功能 例 nCount

命名规则—示例 数据类型 定义 Win 32 变量名 BOOL int 32 位符号数 bOk INT int 32 位符号数 nCount UINT unsigned int 32 位无符号数 uMsg LONG long 32 位符号数 lTotalSize

养成良好的编码习惯 操作数与操作符之间请空一格 若花括号可有可无,还是请写上 在花括号内部的代码要比花括号缩进一个TAB 如果你的代码已经很乱了,使用一组神奇的快捷键:Alt + F8 不要过份依赖这个快捷键,事实证明,总想偷懒的人不会有好结果 另一组快捷键可能也会用上:Shift + Tab

程序调试 修正语法错误(F4) 设置断点(F9) 启用/结束调试(F5 / Shift + F5) 控制程序运行(F10 & F11) 查看和修改变量的值 QuickWatch窗口的使用 Watch窗口的使用 Variables窗口的使用

主要内容 Visual C++开发环境的熟悉和使用 Ex_HelloWin程序进一步讲解 MFC的基本结构 MFC应用程序框架 窗口输入消息处理

Ex_HelloWin程序讲解(P92) Windows 应用程序结构 至少包含两个函数 WinMain ( ) : 必有且仅有一个 窗口函数 : 每个窗口对应一个窗口函数,以响应该窗口的消息

Win32程序需要什么函数库 Windows程序可调用的函数: C Runtimes : 我们熟悉的printf , strcpy 等都属于这一类函数 Windows APIs : 由Windows本身三大模块(GDI32.DLL/USER32.DLL/KERNEL32.DLL)提供,在系统启动时自动加载

Win32程序需要什么头文件 最省力的方法:#include <windows.h> 该头文件非常庞大,大概有5000行之巨 不过如今已经将此文件分割成多个小文件可供编程者自行选用 如果你并不想仔细研究到底你的程序该用哪几个头文件,没有人会阻止你偷懒 若想使用三大模块之外提供的API函数,就得载入对应的头文件

WinMain( )函数需完成的功能 定义窗口类 注册窗口类 建立窗口类的窗口 显示窗口 运行消息循环

WinMain( )函数的原型 int WINAPI WinMain (HINSTANCE hThisInst, //当前实例 该句柄唯一地标识了该程序 为了与早期的版本兼容,这里未用,其值总是NULL int WINAPI WinMain (HINSTANCE hThisInst, //当前实例 HINSTANCE hPrevInst, //前一个实例 PSTR pszCmdLine, //指向命令行指针 int nCmdShow ) //显示方式 程序运行时的显示方式(正常、最大化、最小化等) 运行程序的命令行参数串

窗口类  WNDCLASS UINT style; //窗口类风格 WNDPROC lpfnWndProc; //窗口函数 int cbWndExtra; //窗口额外信息 int cbClsExtra; //类结构额外信息 HINSTANCE hInstance; //实例句柄

窗口类  WNDCLASS HICON hIcon; //图标句柄 HCURSOR hCursor; //光标句柄 HBRUSH hbrBackground; //窗口背景画刷句柄 LPCSTR lpszMenuName; //主菜单资源句柄 LPCSTR lpszClassName; //窗口类名字

hIcon 加载函数 HICON LoadIcon ( HINSTANCE hInst, LPCSTR lpszName)

hCursor 加载函数 HCURSOR LoadCursor ( HINSTANCE hInst, LPCSTR lpszName)

注册窗口类 ATOM RegisterClass (CONST WNDCLASS *lpWClass) 功能: 登记窗口类 功能: 登记窗口类 返回: 窗口类的唯一值 参数: 窗口类地址

创建窗口 HWND CreateWindow ( LPCSTR lpClassName, //窗口类名 LPCSTR lpWinName, //标题 DWORD dwstyle, //风格 int x,int y, //位置

创建窗口 int nWidth,int nHeight, //窗口长宽 HWND hParent, //父窗口句柄 HMENU hMenu, //菜单 HINSTANCE hThisInst, //实例 LPVOID lpszAdditional) //附加信息

窗口显示函数 BOOL ShowWindow ( HWND hwnd, int nCmdShow) 功能: 显示或隐藏窗口 功能: 显示或隐藏窗口 返回值: 可见状态 : 返回非零 ; 隐藏状态 : 返回零 nCmdShow可取的值: SW_HIDE 删除窗口 SW_MINIMIZ 极小化成一个图标 SW_MAXIMIZE 极大化成一个图标 SW_RESTORE 恢复成正常窗口

更新用户区域 BOOL UpdateWindow ( HWND hwnd ) 返回:更新成功返回真 参数:窗口句柄

获取消息 BOOL GetMessage ( LPMSG lpMsg, //存放消息 HWND hwnd, //获取该窗口的消息,若为NULL, 则获取该应用程序的所有消息 UINT uMsgMin, //消息范围 UINT uMsgMax); 遇WM_QUIT消息为零

消息处理 BOOL TranslateMessage (LPMSG lpMsg) 功能:将虚拟键消息转换成字符消息 BOOL DispatchMessage (LPMSG lpMsg) 功能:驱动Windows,把消息传递给相应的窗口函数

窗口过程函数 窗口函数负责处理从系统接收的输入消息和窗口管理消息 CALLBACK回调函数 它由 Windows 直接调用

回调函数简介 回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件 通常情况下,回调函数采用标准Windows API的调用方式,即__stdcall DLL编制者也可以自已定义调用方式,但客户程序也必须遵守相同的规定 在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中弹出

窗口过程函数消息处理 PostQuitMessage(nExitCode) 功能:发送WM_QUIT消息给系统, 以通知系统应用程序要结束 DefWindowProc(hwnd,message, wParam,lParam) 消息缺省处理函数

2 1 8 3 5 4 7 6 WinMain ( hInst, hPrev, … ) { MSG msg; ReigsterClass (…); CreateWindow (…); ShowWindow (…); UpdateWindow (…); While ( GetMessage (&msg…)) { TranslateMessage (…); DispatchMessage (…); } return msg.wParam; WM_CREATE 消息队列 2 1 8 WM_QUIT 3 WndProc ( hWnd, msg, wParam, lParam ) { switch ( msg ) { case WM_CREATE : … case WM_PAINT : case WM_KEYDOWN : case WM_DESTROY : PostQuitMessage(0); break; default : return( DefWindowProc ( ... ) ); } return (0); WM_CLOSE 5 4 7 WM_DESTROY case WM_CLOSE : DestroyWindow (...); 6

主要内容 Visual C++开发环境的熟悉和使用 Ex_HelloWin程序进一步讲解 MFC的基本结构 MFC应用程序框架 窗口输入消息处理

MFC的含义 MFC—Microsoft Foundation Class Library, 微软基本类库 为了帮助用户处理那些经常使用又复杂繁琐的各种Windows操作 MFC把传统的Windows编程规范中的大多数内容封装成各种类 使程序员从繁杂的编程中解脱出来,提高了编程和代码效率 VC还提供了大量向导和可视化编辑工具,使用户不需要添加太多的代码就能实现不同风格和用途的应用程序

MFC AppWizard 是VC提供的一个非常有用的向导,称之为MFC应用程序向导 能为用户快速、高效、自动地生成一些常用的标准程序结构和编程风格 这些类型基本上能满足各个层次用户的不同需要 重点关注MFC AppWizard(exe)应用程序框架

应用程序框架 定义了应用程序的轮廓,为用户提供了标准的实现接口 Windows应用程序的建立都是基于这个框架展开的

MFC应用程序框架 包含用户最常用、最基本的三种应用程序类型 单文档应用程序(Windows记事本) 多文档应用程序 基于对话框的应用程序 功能较简单、负责程度适中 每次只能打开和处理一个文档 多文档应用程序 允许同时打开和处理多个文档 基于对话框的应用程序 最简单、最紧凑,没有菜单、工具栏、状态栏 不能处理文档,速度快、代码少,开发调试时间短

纵览MFC General Purpose Classes Windows API Classes Application Framework Classes High Level Abstraction Afx Global Functions MFC Macro 例子:正弦波

General Purpose Classes 提供字符串、数组类、链表类… 适用于DOS和Windows CObject:万类之首,MFC绝大部分的类均派生于此 数据处理类(collection classes) CArray/CList CByteArray/CStringList 杂项类(不派生于CObject) CRect/CPoint/CSize CTime/CTimeSpan/CString

General Purpose Classes CArray <TYPE,ARG_TYPE> className SetSize/GetSize SetAt/GetAt Add/Remove CList <TYPE,ARG_TYPE> className AddTail/InsertAfter/FindIndex GetHeadPosition/GetCount/GetNext CString 字符串的连接 数值 ↔ 字符串 CString与char*

Windows API Classes 最为经典的类群,这些类的成员函数都对应各个Windows API CCmdTarget 处理消息映射和传递 CWinThread 代表一个线程 CWinApp 代表整个程序 CWnd 所有窗口 GDI / CDC / CMenu MFC消息映射结构的基类。具有消息处理能力的类均应为该类的派生类 支持多个线程的并行执行。每个应用程序至少有一个线程(主线程)。此类封装了操作系统的调度功能 封装了Windows应用程序初始化、运行、终止应用程序的代码。基于框架建立的应用程序必须有一个且只有一个从此派生的类对象 各种窗口,包括对话框,子窗口、控制框等的通用基类,提供窗口处理中公共的窗口类注册、窗口创建与撤消等处理操作 图形类、设备类、菜单类的基类

Application Framework Classes CDocument 负责对象的保存和读取 CView 负责将内容呈现在显示装置上 CDocTemplate 负责管理上面两个类,在两者之间提供一个桥梁

High Level Abstraction CToolsBar CStatusBar CDialogBar CEditView CTreeView

MFC类层次图 CObject CCmdTarget CWnd CDocument CFrameWnd CWinApp CView CWinThread CFrameWnd CWinApp CView

Afx Global Functions int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 ); AfxRegisterClass …

MFC Macro DECLARE_DYNAMIC IMPLEMENT_DYNAMIC DECLARE_DYNCREATE IMPLEMENT_DYNCREATE DECLARE_MESSAGE_MAP BEGIN_MESSAGE_MAP ON_COMMAND ON_MESSAGE END_MESSAGE_MAP

MFC程序结构 两句话概括MFC如何封装API: 程序的起始点是 CMyWinApp theApp; 终点不可见 CWinApp取代WinMain 程序运行时,Windows自动调用该函数 CFrameWnd取代WndProc 程序的起始点是 CMyWinApp theApp; 终点不可见

MFC的诞生 Application object产生,从而获得对象内存 MFC会自动执行到CMyWinApp::InitInstance,在里面会创建一个CMyFrameWnd对象 CMyFrameWnd构造函数调用Create产生主窗口 回到CMyWinApp::InitInstance中ShowWindows并执行UpdateWindow,发出WM_PAINT MFC执行CMyWinApp::Run函数,进入消息循环

程序执行过程 WinMain(入口) 初始化应用程序 CMyWinApp::InitApplication 初始化实例 创建窗口 显示窗口 进入消息循环 结束应用程序 CMyWinApp::InitApplication CMyWinApp ::InitInstance CMyFrameWnd ::CMyFrameWnd CWnd::Create CWnd::ShowWindow CWnd::UpdateWindow CWinApp::Run CWindApp::ExitInstance

MFC的死亡 和纯Win32的死亡方式一样 只不过MFC把实现全部隐藏起来

消息映射 在类的头文件中: 在类的实现文件中: 这一切都可以由Classwizard代劳 DECLARE_MESSAGE_MAP() 消息处理函数声明 在类的实现文件中: 消息映射宏 消息处理函数实现 这一切都可以由Classwizard代劳 将发给对象的消息映射到类方法上,使相应的窗口或控件自动地处理消息

afx_msg void ClassMethod( ) 消息映射的实现 类声明头文件:在处理消息的窗口类中声明消息响应宏和消息响应函数原型: DECLARE_MESSAGE_MAP( ) afx_msg void ClassMethod( ) 类实现源文件:声明消息映射图 BEGIN_MESSAGE_MAP//(派生类,基类) ON_MessageName(ID,ClassMethod) // 各种消息映射宏 END_MESSAGE_MAP( )

消息映射项和处理方法 消息响应函数原型: 消息映射宏: 消息响应函数的搜索路径: 自下而上,直到 CCmdTarget afx_msg void ClassMethod( ) 消息映射宏: ON_MessageName(ID,ClassMethod) 消息响应函数的搜索路径: 自下而上,直到 CCmdTarget

VC能帮我们做什么 MFC Wizard: 快速生成一个MFC框架 Class Wizard: 快速插入消息映射图 (快捷键是CTRL+W / View菜单)

窗口输入消息处理 输入消息分类 鼠标消息: 用户区与非用户区 键盘消息: 系统键消息与非系统键消息

鼠标输入消息 afx_msg void OnMouse_ (UINT nFlags,Cpoint point) afx_msg void On_Button_ (UINT nFlags,CPoint point) nFlags: 标识同时按下的虚拟键 point: 光标所在的位置

键盘输入消息 afx_msg void On_(UINT nChar, UINT nRepCnt,UINT nFlags) nChar: 输入字符的ASCII nRepCnt: 重复击键的次数 nFlags: 虚拟键码...

内容回顾 Visual C++开发环境的熟悉和使用 Ex_HelloWin程序进一步讲解 MFC的基本结构 MFC应用程序框架 窗口输入消息处理

作业及下节课内容 作业 下节课主要内容 P118第7题,继续深刻理解 Ex_HelloWin 程序每一步的具体含义 熟练使用 Visual C++ 开发环境 P118第6题,尝试使用 Visual C++ 开发环境实现一个基于对话框的应用程序 下节课主要内容 基于对话框的应用程序 模式/无模式对话框