VC MFC学习课件第二章
合集下载
vc++、MFC基础教程_
1.2.2 菜单栏和工具栏
• 菜单栏位于集成开发环境的顶部。菜单栏由9个菜单项组成:File(文 件)、Edit(编辑)、View(视图)、Insert(插入)、Project(工 程)、Build(编译)、Tools(工具)、Windows(窗口)、Help (帮助)。每一个菜单项都有一个下拉式菜单,其中的菜单项用于完 成特定的功能。 • 工具栏位于菜单栏的下面。工具栏可以称作是美化的菜单栏,其由许 多按钮构成。其中的按钮用于完成特定的功能。工具栏可以任意拖动, 也可以成为一个浮动窗口。
1.2.1 工作区窗口和输出窗口
• Resource View:显示当前工作区中所有的资源。这些资源包括快捷 键、对话框、图标、菜单、字符条编辑器、工具栏和版本信息。双击 其中的ID号,会显示相应的资源信息。 • File View:显示属于当前工程的所有文件,包括C/C++源文件、头文 件、资源文件等。 • 输出窗口与工作区一样,分为多个选择卡。其中最常用的选项卡被放 在了最外面,分别为Build、Debug、Find in Files 1和Find in Files 2。
ppt简介
• 共14章、442页,涵盖了vc的基础介绍,以及mfc程序的创建,控件 的使用、多线程、多媒体编程、网络编程、动态链接库的使用等等, 是那些喜欢MFC但是不知道从何学起的MFC爱好者的最佳的基础教 材!
第1章 Visual C++集成开发环境
• Visual C++是一个功能强大的可视化应用程序开发工具。其凭借强大 功能,受大了广大程序员的欢迎。当今流行的Visual C++的开发工具 是6.0版本。下面来介绍Visual C++ 6.0的一些基本情况。
第2章MFC应用程序概述.ppt
mdTarget类
命令类CCmdTarget是CObject的子类,它是MFC 库中所有具有消息映射属性的类的公共基类。从 CCmdTarget派生的类能在程序运行时动态创建对象 和处理命令消息。
VC++应用编程
3.CWinApp类
应用程序类CWinApp是CWinThread的子类,封 装了初始化、运行、终止应用程序的代码。可以 由此派生自己的应用类。
CLi2_1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here MessageBox("这是一个单文档应用程序!",
"消息框", MB_ICONEXCLAMATION|MB_OKCANCEL); }
不支持任何复合文档
应用程序作为复合文档容器,包含 可以链接或嵌入的ActiveX对象
应用程序仅仅可以创建能够嵌入到 其他应用程序中的文档,但是不能 作为一个单独运行的应用程序
应用程序可以单独运行,同时也可 以作为一个对象嵌入到其他应用程 序中
应用程序能够作为容器包含嵌入或 链接的ActiveX对象,同时也能够 作为一个可以嵌入到其他程序中的 对象
VC++应用编程
【例2.1】编写一个SDI单文档应用程序Li2_1,程序运行后, 通过消息框输出“这是一个单文档应用程序!”的提示信息。 (1) 选择File菜单下的New菜单项,系统弹出New对话框。 单击
工程名 输入
保存文件路径
默认
VC++应用编程
(2) MFC AppWizard-Step 1对话框主要用于选择应用程序 类型。AppWizard可以创建3种类型的应用程序框架。
命令类CCmdTarget是CObject的子类,它是MFC 库中所有具有消息映射属性的类的公共基类。从 CCmdTarget派生的类能在程序运行时动态创建对象 和处理命令消息。
VC++应用编程
3.CWinApp类
应用程序类CWinApp是CWinThread的子类,封 装了初始化、运行、终止应用程序的代码。可以 由此派生自己的应用类。
CLi2_1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here MessageBox("这是一个单文档应用程序!",
"消息框", MB_ICONEXCLAMATION|MB_OKCANCEL); }
不支持任何复合文档
应用程序作为复合文档容器,包含 可以链接或嵌入的ActiveX对象
应用程序仅仅可以创建能够嵌入到 其他应用程序中的文档,但是不能 作为一个单独运行的应用程序
应用程序可以单独运行,同时也可 以作为一个对象嵌入到其他应用程 序中
应用程序能够作为容器包含嵌入或 链接的ActiveX对象,同时也能够 作为一个可以嵌入到其他程序中的 对象
VC++应用编程
【例2.1】编写一个SDI单文档应用程序Li2_1,程序运行后, 通过消息框输出“这是一个单文档应用程序!”的提示信息。 (1) 选择File菜单下的New菜单项,系统弹出New对话框。 单击
工程名 输入
保存文件路径
默认
VC++应用编程
(2) MFC AppWizard-Step 1对话框主要用于选择应用程序 类型。AppWizard可以创建3种类型的应用程序框架。
VisualC++MFC编程精品PPT课件
第一步:启动Visual C++,选择工程方法, 项目类型选择MFC AppWizard (exe),输 入工程的名字(如VcApp),选择项目放置 的位置,然后单击“确定”按钮。
第二步:设置应用程序的特性。
这些设置包括六个问题,每一个问题都 有不同的选项供选择。一个问题选择完后, 通过“下一步”(Next)选择下一个问题, 直到六个问题选择完毕。还可பைடு நூலகம்通过“上一 步”(Back)返回上一个问题重新选择。下面 继续上面的例子,在单击“确定”按钮后, 弹出第一个问题窗口,如下图所示。
(1)BOOL CDC::Polyline(CONST POINT *lppt, int cPoints);
(2)BOOL CDC::PolyPolyline(CONST POINT * lppt,
COUST DWORD *lpdwPolyPoints,DWORD cCount);
在Polyline()函数中,lppt是指向折线顶点数组的 指针,而cPoints是折线顶点数组中的顶点数。例如, 绘制一条具有4个顶点的折线,程序如下:
Bezier曲线是最常见的非规则曲线之一。 Bezier曲线属于三次曲线,需要四个控制 顶点来确定一条Bezier曲线,其中曲线通 过第一点和最后一点,并且第一条边和最
后一条边是曲线在起点和终点处的切线, 从而确定了曲线的走向。PolyBezier()函 数可以画出一条或多条Bezier曲线,其函 数原型说明如下:
DC的作用就是提供程序与物理设备或者虚拟 设备之间的联系,除此之外,DC还要处理绘图属 性的设置,如文本的颜色等。程序员可以通过调 用专门的GDI函数修改绘图属性,如 SetTextColor()函数。
CDC类是GDI封装在MFC中最大的一个类。下表列 出了CDC中的一些常用绘图函数。
MFC应用程序设计基础v2
从物理角度看,它是一个庞大的类库、包含可控制计 算机系统方方面面的类库,它对应的是Windows系统目录 下的一系列mfc*.dll文件;从逻辑角度看,它是一个面向对 象的应用程序框架,程序员可以使用这一框架创建 Windows应用程序。
MFC的组织是以C++类的层次形式组织在一起,几个高 层类提供一般功能,而低层类实现更具体的功能,每一个 低层类都是从高层类派生而来,因此继承了高层类的功能。
*1.5 使用C++和MFC的好处
从本书的第一篇,我们已经看出了面向对象程序设计的好 处,如可复用性、代码和数据紧密地绑定等。类是面向对象程序 设计的核心概念,程序中不仅可以使用自己建立的类,还可以使 用系统所提供的类,一个好的类库可以大大减少编码的数量。 MFC成功之处在于,它是一个类库、一个包罗计算机系统方方面 面的类库、一个集MicroSoft各路软件高手之大成的类库。通过 从MFC继承自己所需要的类,可以充分利用基类所具有的各种功 能。
MFC采用面向对象的设计方法,将Windows API中的相关 部分组合到C++类或对象中。例如CWnd类封装了大部分有关 窗口处理的API 函数。作为编程人员,不必记忆大量API 函数, 需要作的只是实例化CWnd类的一个实例,并调用相应的成员 函数即可。
1.3 MFC的目标
建立MFC库的目的是为了简化Windows应用程序的 编制,MFC开发小组的工作是将此目的和程序设计原理 结合起来。Microsoft在建立MFC库遵循了一些基本原则, 也是他们的设计目标:
MFC处理很多与Windows相关的常见任务,例如在后 台做消息处理以及对消息进行路由选择,无需程序员在每一 个开发的Windows应用程序中编写相同的消息处理循环, MFC已经实现了这一消息循环,并对大多数常见的消息提供 了易学易用的消息响应函数。例如OnPain()就是CWnd类的 一个成员函数,是对WM_PAINT消息进行响应的一个虚成员 函数。
MFC的组织是以C++类的层次形式组织在一起,几个高 层类提供一般功能,而低层类实现更具体的功能,每一个 低层类都是从高层类派生而来,因此继承了高层类的功能。
*1.5 使用C++和MFC的好处
从本书的第一篇,我们已经看出了面向对象程序设计的好 处,如可复用性、代码和数据紧密地绑定等。类是面向对象程序 设计的核心概念,程序中不仅可以使用自己建立的类,还可以使 用系统所提供的类,一个好的类库可以大大减少编码的数量。 MFC成功之处在于,它是一个类库、一个包罗计算机系统方方面 面的类库、一个集MicroSoft各路软件高手之大成的类库。通过 从MFC继承自己所需要的类,可以充分利用基类所具有的各种功 能。
MFC采用面向对象的设计方法,将Windows API中的相关 部分组合到C++类或对象中。例如CWnd类封装了大部分有关 窗口处理的API 函数。作为编程人员,不必记忆大量API 函数, 需要作的只是实例化CWnd类的一个实例,并调用相应的成员 函数即可。
1.3 MFC的目标
建立MFC库的目的是为了简化Windows应用程序的 编制,MFC开发小组的工作是将此目的和程序设计原理 结合起来。Microsoft在建立MFC库遵循了一些基本原则, 也是他们的设计目标:
MFC处理很多与Windows相关的常见任务,例如在后 台做消息处理以及对消息进行路由选择,无需程序员在每一 个开发的Windows应用程序中编写相同的消息处理循环, MFC已经实现了这一消息循环,并对大多数常见的消息提供 了易学易用的消息响应函数。例如OnPain()就是CWnd类的 一个成员函数,是对WM_PAINT消息进行响应的一个虚成员 函数。
mfc课件
从计算机软件设计的角度, 从计算机软件设计的角度 , 引入类和对象 的概念,将客观世界和主观世界中的实体和问题 的概念, 直接映射到计算机世界的程序空间. 直接映射到计算机世界的程序空间.这就是面向 基本出发点. 对象方法的基本出发点 对象方法的基本出发点.
客观世界 真实空间) (真实空间) 主观世界 问题空间) (问题空间)
对象= "对象
数据结构+算法, 算法, 数据结构 算法 程序=对象 对象…+对象" 对象+对象 程序 对象 对象 对象 程序=数据结构 数据结构+算法 取代了"程序 数据结构 算法"的传统程序设计 模式.因而引起了一场程序设计观念的革命. 模式.因而引起了一场程序设计观念的革命.
2.1.3 面向对象程序设计实现语言 OOPL(Object Oriented Programming Language
2.3 面向对象系统的特性
2.3.1 封装性 2.3.2 继承性 2.3.3 多态性
2.3.1 封装性(Encapsulate)
封装(encapsulation)就是把每个对象的数据(属 就是把每个对象的数据( 封装(
性)和操作(行为)包装在一个类中,并尽可能隐 和操作(行为)包装在一个类中, 藏对象的内部细节.一般限制直接访问对象的属性, 藏对象的内部细节.一般限制直接访问对象的属性, 而应通过操作接口访问, 而应通过操作接口访问,这样使程序中模块之间关 系更简单,数据更安全. 系更简单,数据更安全.对程序的修改也仅限于类 的内部,使得由于修改程序所带来的影响局部化. 的内部,使得由于修改程序所带来的影响局部化. 封装性是保证软件部件具有优良的模块性的基础. 封装性是保证软件部件具有优良的模块性的基础.
MFC课件第二章
class Point { public: int x; int y; Point( ) { x=0;y=0; } Point(int a,int b) { x=a; y=b; } ~Point( ) {}
void output( ) { cout<<x<<endl<<y<<endl; } void output( int a, int b) { x=a; y=b; } }; void main( ) { Point pt1(4,4); pt1.output( 10,10); pt1.output( ); }
CString::operator + friend CString operator +( const CString& string1, const CString& string2 ); friend CString operator +( const CString& string, TCHAR ch ); friend CString operator +( TCHAR ch, const CString& string ); friend CString operator +( const CString& string, LPCTSTR lpsz );
小技巧
在以后的MFC编程中,如果在成员函数中想调用同 类中的某个成员,可以使用VC++提供的自动列出 成员函数功能,使用this->,VC++将列出该类中 的所有成员,我们可以从列表中选择我们想调用 的成员。
自动列出成员函数功能, 自动列出成员函数功能,可以提高编写速度, 减少拼写错误。我们经常不能完全记住某个函 数的完整拼写,但却能够从列表中辨别出该函 数,自动列出成员函数的功能在这时就显得更 加有用了。事实上,我们通常都不可能记住也没 有必要记住所有的函数,只要将常用的函数记 住,其他不常用的函数只要记住其大概的写法 和功能,在调用该函数时可以从自动列出成员 函数中选取,这样可以大大节省我们的学习时 间。
《MFCC教程》PPT课件
数据类型
描述
BOOL
布尔值,取值范围TRUE和FALSE
BSTR
32位字符指针
BYTE
8位无符号整数
COLORREF
用作颜色值的32位数值
DWORD
32位无符号整数,或者段的地址和与之相关的偏移量
LONG
32位有符号整数
LPARAM
32位值,作为窗口函数或回调函数的参数
LPCSTR
指向字符串常量的32位指针
Windows程序以窗口的形式存在,在不同窗口之 间传递消息是Windows和应用程序进行交流的主 要形式。程序具体功能由不同的窗口函数实现。
1.2 句柄
• 在Windows中,用句柄(Handle)标识应用程 序中不同的对象和同类对象中不同的实例,如一 个具体的窗口、按钮、输出设备、画笔和文件等。 通过句柄可以获得相应的对象信息。常用的句柄 类型有: HWND 、 HINSTANCE 、 HDC 、 HCURSOR、HICON、HMENU等。
is not A or a !","KEYDOWN",NULL);
2MFC的基本原理和使用方法
利用Windows API开发程序的用户有这样的体 会,即使开发一个简单的Windows应用程序也需 要对Windows的编程原理有很深刻的认识,需要 手工编写冗长的代码。由于程序的出错率是随着代 码长度的增加呈几何级数增长的,而且当程序长度 逐渐膨胀时,调试程序会变得越来越困难。因此, 传统的Windows应用程序设计需要程序员有极大 的耐心和丰富的编程经验。
先定义一个句柄,然后调用MFC类的成员函数Attach()将 句柄与一个MFC类对象联系在一起,此时的句柄就成为 该MFC类对象的句柄。在退出对象作用域之前,调用成 员函数Detach()将句柄和对象进行分离。如下所示: CWnd myWnd; HWND hWnd; myWnd.Attach(hWnd); ...... myWnd.Detach();
《用Visual-C开发GIS系统》第2章-MFC应用程序设计的开发工具PPT课件
ResourceView(资源视图)是对程序的资源进行可
.ቤተ መጻሕፍቲ ባይዱ
9
视化管理的工具。利用它调用AppStudio可以对 程序所拥有的各种资源(菜单、工具条、对话 框、加速键、热键等)进行可视化管理。
FileView(文件视图)是管理一个开发项目所包含 的所有文件的工具。通过它可以用来管理一个 开发项目所包含的源文件。
.
20
.
21
.
22
.
23
.
24
⑦ 在图2-7所示的MFC AppWizard-Step 5 of 6对话框中, 用户需要对是否在生成的程序源代码中加入注释进 行选择。在本例中,选择“Yes, please”(加入注释) 选项。另外有一个选项是选择在产生的应用程序中 如何应用MFC,有两种选择:“As a shared DLL”(作 为共享动态链接库)和“As a statically linked library”(作为静态链接库)。选择“As a shared DLL” 选项,单击Next按钮,就会进入图2-8所示的MFC AppWizard-Step 6 of 6对话框。
.
16
2.1.2 利用MFC AppWizard产生MFC应用程序的步骤
在这一节中,应用MFC AppWizard生成一个叫做Draw的应 用程序。以下是利用AppWizard产生MFC应用程序框架 的步骤:
首先,进入VC++的工作区,运行工作区上的“File”菜单 下的“New”命令,打开New对话框,然后进行如下步 骤的操作:
.
13
图2 AppWizard创建.框架程序对话框
14
表2-1 AppWizard创建的应用程序类型
.ቤተ መጻሕፍቲ ባይዱ
9
视化管理的工具。利用它调用AppStudio可以对 程序所拥有的各种资源(菜单、工具条、对话 框、加速键、热键等)进行可视化管理。
FileView(文件视图)是管理一个开发项目所包含 的所有文件的工具。通过它可以用来管理一个 开发项目所包含的源文件。
.
20
.
21
.
22
.
23
.
24
⑦ 在图2-7所示的MFC AppWizard-Step 5 of 6对话框中, 用户需要对是否在生成的程序源代码中加入注释进 行选择。在本例中,选择“Yes, please”(加入注释) 选项。另外有一个选项是选择在产生的应用程序中 如何应用MFC,有两种选择:“As a shared DLL”(作 为共享动态链接库)和“As a statically linked library”(作为静态链接库)。选择“As a shared DLL” 选项,单击Next按钮,就会进入图2-8所示的MFC AppWizard-Step 6 of 6对话框。
.
16
2.1.2 利用MFC AppWizard产生MFC应用程序的步骤
在这一节中,应用MFC AppWizard生成一个叫做Draw的应 用程序。以下是利用AppWizard产生MFC应用程序框架 的步骤:
首先,进入VC++的工作区,运行工作区上的“File”菜单 下的“New”命令,打开New对话框,然后进行如下步 骤的操作:
.
13
图2 AppWizard创建.框架程序对话框
14
表2-1 AppWizard创建的应用程序类型
VC MFC编程.ppt
鼠标编程
在图形操作系统中,鼠标是最重要的输入 设备之一。Windows系统为用户提供了统 一的鼠标编程接口,而不必过多了解其底 层的知识。Windows是基于消息传递、事 件驱动的操作系统,当用户移动鼠标、按 下或释放鼠标键时都会产生鼠标消息。应 用程序可以接收10种鼠标消息,下表列出 了这些鼠标消息和它们的描述。
CDC *pDC=GetDC();
pDC->TextOut(20,60,"RButton Down!");
CView::OnRButtonDown(nFlags, point);
}
void CMouseView::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pDC=GetDC();
pDC->TextOut(20,40,"RButton UP!");
CView::OnRButtonUp(nFlags, point);
}
void CMouseView::OnMouseMove(UINT nFlags, CPoint poir message handler code here and/or call default
分别对应上表中10个鼠标消息。在鼠标处 理函数中,point参数代表鼠标热点处的坐 标位置,point.x为横坐标,point.y为纵 坐标。默认坐标原点(0,0)位于窗口的 左上角。
nFlags参数中包含了鼠标按钮和键盘组合使用标志,用来描述鼠标按 钮和键盘上的Shift键和Ctrl键的组合状态。nFlag参数取值范围:
VC++[]使用MFC创建应用程序框架操作步骤ppt课件
#include “MySocket.h”
• 在CTalkcDlg对话框类的talkcDlg.cpp中添加对于控件变量 的初始化代码:
OnButtonConnect OnSendMsg
精选课件ppt
29
图 为对话框类添加控件事件的处理函数
这一步会在talkcDlg.h中自动添加这三个事件处理函数的声明, 在talkcDlg.cpp中生成消息映精选射课件的pp代t 码,和这三个函数的框30架 代码。
6.为CTalkcDlg对话框类添加其它的成员函数和成员变量
Control
CButton
IDC_EDIT_SERVNAME
m_strServName Value
CString
IDC_EDIT_SERVPORT
m_nServPort
Value
int
IDC_EDIT_MSG
m_strMsg
Value
CString
IDC_LIST_SENT
m_listSent
Control
成员变量:CMySocket m_sConnectSocket; //用来与服 务器端连接的套接字。
成员函数:void OnClose(); 信。
// 用来处理与服务器端的通
void OnConnect();
void OnReceive();
精选课件ppt
31
7.手工添加的代码
• 在 CTalkcDlg 对 话 框 类 的 talkcDlg.h 中 添 加 对 于 MySocket.h的包含命令,来获得对于套接字支持:
(3)出现MFC AppWizard设置的第二步对话框(MFC AppWizards – Step 2 of 4),如图所示,在Windows Sockets复选框上打上选择标记, 表示应用程序将支持WinSock套接字。接受其它的默认设置。跳过后面的步骤, 直接点击Finsh按钮。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
19
7. WM_QUIT:由PostQuitMessage函数发出的消息 : 函数发出的消息 退出应用程序时发出的消息 wParam:含退出代码 标识程序退出运行时的有关信息 :含退出代码,标识程序退出运行时的有关信息 1Param:未用 : 8. WM_PAINT 用户区移动或显示 用户窗口改变大小 程序通过滚动条滚动窗口 下拉式菜单关闭并需要恢复被覆盖的部分 Windows清除对话框等对象,并需要恢复被覆盖的部分 20 清除对话框等对象, 清除对话框等对象 均产生 WM_PAINT 消息
12
(3) 句柄
句柄是一个 字节长的数值 句柄是一个4字节长的数值,用于标识应 是一个 字节长的数值, 对象和 用程序中不同的对象 用程序中不同的对象和同类对象中不同的 实例
应用程序通过 使用指针容易破坏 句柄访问相应 句柄访问相应 原对象的结构 的对象信息 常用句柄类型及其说明
窗口 按钮 图标 滚动条 输出设备 控制 文件
补充WPARAM和LPARAM
• Win 3.x中,WPARAM是16位的,而LPARAM是32位的, 两者有明显的区别。因为地址通常是32位的,所以 LPARAM 被用来传递地址,这个习惯在Win32 API中 仍然能够看到。在Win32 API中,WPARAM和LPARAM 都是32位,所以没有什么本质的区 别。Windows的 消息必须参考帮助文件才能知道具体的含义。如果 是自定义的消息,愿意怎么使这两个参数都行。但 是习惯上,我们愿意使用LPARAM传 递地址,而 WPARAM传递其他参数。
15
(4) 消息
VC中存在几种系统定义的消息分类,不同的前缀符号经常用于 中存在几种系统定义的消息分类, 中存在几种系统定义的消息分类 消息宏识别消息附属的分类,系统定义的消息宏前缀如下: 消息宏识别消息附属的分类,系统定义的消息宏前缀如下: BM CB DM EM LB SBM WM 表示按钮控制消息 表示组合框控制消息 表示默认下压式按钮控制消息 表示编辑控制消息 表示列表框控制消息 表示滚动条控制消息 表示窗口消息 窗口管理消息 初始化消息 输入消息 系统消息 剪贴板消息 控制处理消息 控制通知消息 滚动条通知消息 非用户区消息 MDI消息 消息 DDE消息 消息 16 应用程序自定义的消息
编写一个Windows应用程序首先应创建一个或多个窗口,随后应用 应用程序首先应创建一个或多个窗口, 编写一个 应用程序首先应创建一个或多个窗口 程序的运行过程即是窗口内部 窗口与窗口之间 窗口与系统之间 窗口内部、 之间、 程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统11 之间 进行数据处理与数据交换的过程。 数据处理与数据交换的过程 进行数据处理与数据交换的过程。
9
(1) 窗口
一个应用程序的窗口一般包含下列成分: 一个应用程序的窗口一般包含下列成分: 控制菜单框 下拉菜单 标题栏 工作区 垂直滚动条 窗口边界 水平滚动条
10
最大化按钮 最小化按钮
系统管理 应用程序 的基本单位
应用程 序与用 户之间 交互的 接口环 境
Win应用程序 应用程序 基本的操作单元
typedef struct tagMSG 窗口句柄, 窗口句柄,为null,则可检索所有驻留在消息队列中的消息 , {HWND hwnd; 消息值, UINT message;消息值,由Windows.h头文件中的宏定义来标识 头文件中的宏定义来标识 包含有关消息的附加信息,不同消息其值有所不同 WPARAM wParam; 包含有关消息的附加信息 不同消息其值有所不同 LPARAM lParam; typedef struct tagPOINT DWORD time; 指定消息送至队列的时间 x; {LONG x; 指定消息发送时屏幕光标的位置, POINT pt;指定消息发送时屏幕光标的位置, 其数据类型POINT也是一个结构体 LONG y; 14 POINT; } POINT; }MSG;
三、Windows中的事件驱动程序设计 中的事件驱动程序设计
启动 输入姓名 输入第一次测试成绩 输入第二次测试成绩 输入第三次测试成绩 计算平均成绩 结束 结束 消息处理 启动 输入姓名 输入第一次成绩 输入第二次成绩 输入第三次成绩 计算平均成绩
为应用程序提 为应用程序提 供Windows系 系 特殊函数及 统特殊函数及 数据结构 Win应用程序 应用程序 可以利用标准 大量API函数 大量 函数 调用系统功能
窗口管理函数 实现窗口的创 建、移动和修 改功能
API
API函数 函数 的功能
系统服务函数 :实现与操作 系统有关的多 种功能
系统与 是Win系统与 系统 Win应用程序 应用程序 间的标准程序 间的标准程序 接口
采用交互式方法时,可视化开发平台给出了许多选用的对象, 采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员 对象 可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”, 可选择所需对象并确定其属性,由此搭建起应用程序的“大框架” 对象并确定其属性 7 并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程 并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程 序
附加信息与具体 附加信息与具体 消息号的值有关, 消息号的值有关, 在Win中消息用 中消息用 结构体MSG表示 结构体 表示
消息号: 消息号:由事先定义好的消息名标识 消 息 字参数(wParam) :用于提供消息的附加 用于提供消息的附加 字参数 信息 长字参数(lParam) :用于提供消息的附 用于提供消息的附 长字参数 加信息
3
重要性
• 高端人才的需求 • 是学好其他课程的基础
4
怎样学好VC
• 注意听讲,讲课内容一般是学习的要点和难 点 • 多练习,写程序是成为程序高手的唯一捷径 • 多看网上资料,有些网上讲的更透彻
5
一、Windows编程基础 编程基础
程序调试工具 包括源程序语 法检查、 法检查、可执 行程序修改和 运行监视等 可选择并构成具体 语句或源程序结构 的例程库及Help 的例程库及 资源管理器 包括图形化窗 口及组成元素 的多种对象的 编辑器
都是“面向对象” 都是“面向对象” 对象 的程序设计语言
编写Windows 编写 程序相当一部分工 对象和 作是在创建对象 作是在创建对象和 对象属性赋值 为对象属性赋值
对象特征:具有规范形态和操作模式 对象特征: 特征 编程方法 传统编写法-->API 传统编写法 交互式方法-->MFC 交互式方法
图形设备(GDI) 图形设备 函数: 函数:实现与 设备无关的图 形操作功能 8
利用Windows API函数编写Windows应用程序 函数编写Windows应用程序必 利用Windows API函数编写Windows应用程序必 须首先了解以下内容: 须首先了解以下内容: (1)窗口的概念 (1)窗口的概念 (2)事件驱动的概念 (2)事件驱动的概念 (3)句柄 (3)句柄 (4)消息 (4)消息
2. WM_KEYDOWN:按下一个非系统键时产生的消息 非系统键时产生的消息 :按下一个非系统键 系统键是指实现系统操作的组合键,例如 与某个功 系统键是指实现系统操作的组合键,例如Alt与某个功 是指实现系统操作的组合键 能键的组合以实现系统菜单操作等。 能键的组合以实现系统菜单操作等。
如F1的虚拟键码 的虚拟键码 windows.h文 在windows.h文 件中定义为VK_F1 件中定义为VK_F1 wParam:按下键的虚拟键码,用以标识按下或释放的键 :按下键的虚拟键码, 虚拟键码 lParam:记录了按键的重复次数、扫描码、转移代码、先前键的状态 :记录了按键的重复次数、扫描码、转移代码、 等信息。 等信息。
第2讲 Windows 应用程序基础 讲
1
参考教材
• • • • • 深入浅出MFC (第2版) 侯俊杰著 华中科技大学出版社 定价: ¥ 80.0 适合于深刻理解MFC的架构
2
参考教材
• • • • • • Visual C++ 6 . 0技术内幕(中文版.第5版) David J. Kruglinski著 希望图书创作室 译 北京希望电子出版社 定价: ¥ 95.0 适合于初学者了解每一种编程编程方法
可视化开发 系统集成了一系 列系统可用资源 和开发工具
应用程序Help 应用程序Help Setup开发 和Setup开发 工具包 系统函数库和 系统函数开发 6 工具
源程序编辑 器和编译器
Windows的 的 程序设计语言 对象是 对象是Windows 的规范部件
VC VB VJ 窗口 菜单 按钮 对话框 程序模块
(2)生的信息 (如按下鼠标或键盘 如按下鼠标或键盘) 如按下鼠标或键盘
Windows程序设计是针对事件或消息的处理进行 程序设计是针对事件或消息的处理进行 程序设计是针对事件 Windows程序的执行顺序取决于事件发生的顺序,程序的 程序的执行顺序取决于事件发生的顺序, 程序的执行顺序取决于事件发生的顺序 执行顺序是由顺序产生的消息驱动的,但是消息 消息驱动的 消息的产生往 执行顺序是由顺序产生的消息驱动的,但是消息的产生往 往并不要求有次序之分。 往并不要求有次序之分。 事件驱动编程方法对于编写交互式程序很有用处, 事件驱动编程方法对于编写交互式程序很有用处,它避免 编程方法对于编写交互式程序很有用处 了死板的操作模式
wParam包含一整 包含一整 数值以标识鼠标键 的按下状态
此外,相似的消息还有: 此外,相似的消息还有: WM_LBUTTONUP:放开鼠标左键时产生; :放开鼠标左键时产生; WM_RBUTTONDOWN:单击鼠标右键时产生; :单击鼠标右键时产生; WM_RBUTTONUP:放开鼠标右键时产生; :放开鼠标右键时产生; WM_LBUTTONDBLCLK:双击鼠标左键时产生; :双击鼠标左键时产生; 17 WM_RBUTTONDBLCLK:双击鼠标右键时产生。 :双击鼠标右键时产生。
7. WM_QUIT:由PostQuitMessage函数发出的消息 : 函数发出的消息 退出应用程序时发出的消息 wParam:含退出代码 标识程序退出运行时的有关信息 :含退出代码,标识程序退出运行时的有关信息 1Param:未用 : 8. WM_PAINT 用户区移动或显示 用户窗口改变大小 程序通过滚动条滚动窗口 下拉式菜单关闭并需要恢复被覆盖的部分 Windows清除对话框等对象,并需要恢复被覆盖的部分 20 清除对话框等对象, 清除对话框等对象 均产生 WM_PAINT 消息
12
(3) 句柄
句柄是一个 字节长的数值 句柄是一个4字节长的数值,用于标识应 是一个 字节长的数值, 对象和 用程序中不同的对象 用程序中不同的对象和同类对象中不同的 实例
应用程序通过 使用指针容易破坏 句柄访问相应 句柄访问相应 原对象的结构 的对象信息 常用句柄类型及其说明
窗口 按钮 图标 滚动条 输出设备 控制 文件
补充WPARAM和LPARAM
• Win 3.x中,WPARAM是16位的,而LPARAM是32位的, 两者有明显的区别。因为地址通常是32位的,所以 LPARAM 被用来传递地址,这个习惯在Win32 API中 仍然能够看到。在Win32 API中,WPARAM和LPARAM 都是32位,所以没有什么本质的区 别。Windows的 消息必须参考帮助文件才能知道具体的含义。如果 是自定义的消息,愿意怎么使这两个参数都行。但 是习惯上,我们愿意使用LPARAM传 递地址,而 WPARAM传递其他参数。
15
(4) 消息
VC中存在几种系统定义的消息分类,不同的前缀符号经常用于 中存在几种系统定义的消息分类, 中存在几种系统定义的消息分类 消息宏识别消息附属的分类,系统定义的消息宏前缀如下: 消息宏识别消息附属的分类,系统定义的消息宏前缀如下: BM CB DM EM LB SBM WM 表示按钮控制消息 表示组合框控制消息 表示默认下压式按钮控制消息 表示编辑控制消息 表示列表框控制消息 表示滚动条控制消息 表示窗口消息 窗口管理消息 初始化消息 输入消息 系统消息 剪贴板消息 控制处理消息 控制通知消息 滚动条通知消息 非用户区消息 MDI消息 消息 DDE消息 消息 16 应用程序自定义的消息
编写一个Windows应用程序首先应创建一个或多个窗口,随后应用 应用程序首先应创建一个或多个窗口, 编写一个 应用程序首先应创建一个或多个窗口 程序的运行过程即是窗口内部 窗口与窗口之间 窗口与系统之间 窗口内部、 之间、 程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统11 之间 进行数据处理与数据交换的过程。 数据处理与数据交换的过程 进行数据处理与数据交换的过程。
9
(1) 窗口
一个应用程序的窗口一般包含下列成分: 一个应用程序的窗口一般包含下列成分: 控制菜单框 下拉菜单 标题栏 工作区 垂直滚动条 窗口边界 水平滚动条
10
最大化按钮 最小化按钮
系统管理 应用程序 的基本单位
应用程 序与用 户之间 交互的 接口环 境
Win应用程序 应用程序 基本的操作单元
typedef struct tagMSG 窗口句柄, 窗口句柄,为null,则可检索所有驻留在消息队列中的消息 , {HWND hwnd; 消息值, UINT message;消息值,由Windows.h头文件中的宏定义来标识 头文件中的宏定义来标识 包含有关消息的附加信息,不同消息其值有所不同 WPARAM wParam; 包含有关消息的附加信息 不同消息其值有所不同 LPARAM lParam; typedef struct tagPOINT DWORD time; 指定消息送至队列的时间 x; {LONG x; 指定消息发送时屏幕光标的位置, POINT pt;指定消息发送时屏幕光标的位置, 其数据类型POINT也是一个结构体 LONG y; 14 POINT; } POINT; }MSG;
三、Windows中的事件驱动程序设计 中的事件驱动程序设计
启动 输入姓名 输入第一次测试成绩 输入第二次测试成绩 输入第三次测试成绩 计算平均成绩 结束 结束 消息处理 启动 输入姓名 输入第一次成绩 输入第二次成绩 输入第三次成绩 计算平均成绩
为应用程序提 为应用程序提 供Windows系 系 特殊函数及 统特殊函数及 数据结构 Win应用程序 应用程序 可以利用标准 大量API函数 大量 函数 调用系统功能
窗口管理函数 实现窗口的创 建、移动和修 改功能
API
API函数 函数 的功能
系统服务函数 :实现与操作 系统有关的多 种功能
系统与 是Win系统与 系统 Win应用程序 应用程序 间的标准程序 间的标准程序 接口
采用交互式方法时,可视化开发平台给出了许多选用的对象, 采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员 对象 可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”, 可选择所需对象并确定其属性,由此搭建起应用程序的“大框架” 对象并确定其属性 7 并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程 并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程 序
附加信息与具体 附加信息与具体 消息号的值有关, 消息号的值有关, 在Win中消息用 中消息用 结构体MSG表示 结构体 表示
消息号: 消息号:由事先定义好的消息名标识 消 息 字参数(wParam) :用于提供消息的附加 用于提供消息的附加 字参数 信息 长字参数(lParam) :用于提供消息的附 用于提供消息的附 长字参数 加信息
3
重要性
• 高端人才的需求 • 是学好其他课程的基础
4
怎样学好VC
• 注意听讲,讲课内容一般是学习的要点和难 点 • 多练习,写程序是成为程序高手的唯一捷径 • 多看网上资料,有些网上讲的更透彻
5
一、Windows编程基础 编程基础
程序调试工具 包括源程序语 法检查、 法检查、可执 行程序修改和 运行监视等 可选择并构成具体 语句或源程序结构 的例程库及Help 的例程库及 资源管理器 包括图形化窗 口及组成元素 的多种对象的 编辑器
都是“面向对象” 都是“面向对象” 对象 的程序设计语言
编写Windows 编写 程序相当一部分工 对象和 作是在创建对象 作是在创建对象和 对象属性赋值 为对象属性赋值
对象特征:具有规范形态和操作模式 对象特征: 特征 编程方法 传统编写法-->API 传统编写法 交互式方法-->MFC 交互式方法
图形设备(GDI) 图形设备 函数: 函数:实现与 设备无关的图 形操作功能 8
利用Windows API函数编写Windows应用程序 函数编写Windows应用程序必 利用Windows API函数编写Windows应用程序必 须首先了解以下内容: 须首先了解以下内容: (1)窗口的概念 (1)窗口的概念 (2)事件驱动的概念 (2)事件驱动的概念 (3)句柄 (3)句柄 (4)消息 (4)消息
2. WM_KEYDOWN:按下一个非系统键时产生的消息 非系统键时产生的消息 :按下一个非系统键 系统键是指实现系统操作的组合键,例如 与某个功 系统键是指实现系统操作的组合键,例如Alt与某个功 是指实现系统操作的组合键 能键的组合以实现系统菜单操作等。 能键的组合以实现系统菜单操作等。
如F1的虚拟键码 的虚拟键码 windows.h文 在windows.h文 件中定义为VK_F1 件中定义为VK_F1 wParam:按下键的虚拟键码,用以标识按下或释放的键 :按下键的虚拟键码, 虚拟键码 lParam:记录了按键的重复次数、扫描码、转移代码、先前键的状态 :记录了按键的重复次数、扫描码、转移代码、 等信息。 等信息。
第2讲 Windows 应用程序基础 讲
1
参考教材
• • • • • 深入浅出MFC (第2版) 侯俊杰著 华中科技大学出版社 定价: ¥ 80.0 适合于深刻理解MFC的架构
2
参考教材
• • • • • • Visual C++ 6 . 0技术内幕(中文版.第5版) David J. Kruglinski著 希望图书创作室 译 北京希望电子出版社 定价: ¥ 95.0 适合于初学者了解每一种编程编程方法
可视化开发 系统集成了一系 列系统可用资源 和开发工具
应用程序Help 应用程序Help Setup开发 和Setup开发 工具包 系统函数库和 系统函数开发 6 工具
源程序编辑 器和编译器
Windows的 的 程序设计语言 对象是 对象是Windows 的规范部件
VC VB VJ 窗口 菜单 按钮 对话框 程序模块
(2)生的信息 (如按下鼠标或键盘 如按下鼠标或键盘) 如按下鼠标或键盘
Windows程序设计是针对事件或消息的处理进行 程序设计是针对事件或消息的处理进行 程序设计是针对事件 Windows程序的执行顺序取决于事件发生的顺序,程序的 程序的执行顺序取决于事件发生的顺序, 程序的执行顺序取决于事件发生的顺序 执行顺序是由顺序产生的消息驱动的,但是消息 消息驱动的 消息的产生往 执行顺序是由顺序产生的消息驱动的,但是消息的产生往 往并不要求有次序之分。 往并不要求有次序之分。 事件驱动编程方法对于编写交互式程序很有用处, 事件驱动编程方法对于编写交互式程序很有用处,它避免 编程方法对于编写交互式程序很有用处 了死板的操作模式
wParam包含一整 包含一整 数值以标识鼠标键 的按下状态
此外,相似的消息还有: 此外,相似的消息还有: WM_LBUTTONUP:放开鼠标左键时产生; :放开鼠标左键时产生; WM_RBUTTONDOWN:单击鼠标右键时产生; :单击鼠标右键时产生; WM_RBUTTONUP:放开鼠标右键时产生; :放开鼠标右键时产生; WM_LBUTTONDBLCLK:双击鼠标左键时产生; :双击鼠标左键时产生; 17 WM_RBUTTONDBLCLK:双击鼠标右键时产生。 :双击鼠标右键时产生。