基础第2章Windows编程基础课件

上传人:我*** 文档编号:145050517 上传时间:2020-09-15 格式:PPT 页数:36 大小:809.50KB
返回 下载 相关 举报
基础第2章Windows编程基础课件_第1页
第1页 / 共36页
基础第2章Windows编程基础课件_第2页
第2页 / 共36页
基础第2章Windows编程基础课件_第3页
第3页 / 共36页
基础第2章Windows编程基础课件_第4页
第4页 / 共36页
基础第2章Windows编程基础课件_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《基础第2章Windows编程基础课件》由会员分享,可在线阅读,更多相关《基础第2章Windows编程基础课件(36页珍藏版)》请在金锄头文库上搜索。

1、Visual C+程序设计基础,授课教师:庄 严 Email: 办公地点:信息楼A312,第一章 Visual C+编程基础,Windows应用程序,操作系统,计算机硬件之间的相互关系,1. 2 Windows 程序内部运行机制,Windows应用程序是“以消息为基础,以事件驱动”的,即一个Windows程序启动之后,实际上就是进行一个循环,不断地等待消息到来,然后处理消息,直到一个“退出”消息,退出程序。,Windows 程序内部运行机制,箭头表示应用程序可以通知操作系统执行某个具体的动作,如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样

2、的声音。 这个关系好比有个机器人能够完成行走的功能,但是,如果人不告诉它往哪个方向上走,机器人是不会主动行走的。这里的机器人就是操作系统,人就是应用程序。,Windows应用程序,操作系统,计算机硬件之间的相互关系,关于API,那么应用程序如何通知操作系统执行某个功能? 在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。 操作系统所能够完成的每一个特殊功能通常都有一个函数与其对应,就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作

3、系统提供给应用程序编程的接口(Application Programming Interface),简称Windows API。 如CreateWindow就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。,关于消息及消息队列,向上的箭头表示操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。 好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作

4、系统)马上感知到这一事件,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件作出反应的过程就是消息响应。,什么是消息?,消息实际上是一个无符号的整数,类型UINT,也就是unsigned int。 typedef unsigned int UINT;/把unsigned int类型定义成UINT,以后再碰到UINT类型,就是指unsigned int 不同的整数值代表不同的消息,VC6以一组宏定义了这些消息 如: #define WM_SETFOCUS 0 x0007 #define WM_KILLFOCUS 0 x0008

5、. WM_KEYDOWN WM_WM_LBUTTONDOWN 这些宏以WM_开头,即Windows Message消息的意思。一个消息除了用整数值标识其类型以外,通常还关联了他其几种数据,一个完整的消息是用一个MSG结构体来描述的。,操作系统是怎样将感知到的事件传递给应用程序 的?,是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN(Microsoft Developer Network),为帮助开发人员使用MS产品和技术写应用程序的一系列在线或离线服务,Windows资料的重要来源。 MSG结构定义如下: typede

6、f struct tagMSG HWND hwnd; /和哪个窗口相关 UINT message; /具体消息的内容 WPARAM wParam; /消息的附加参数 LPARAM lParam; /消息的附加参数(同上) DWORD time; /消息的投递时间 POINT pt; /消息投递时光标的位置 MSG;,关于句柄,句柄(HANDLE),资源的标识。 操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一

7、个窗口指定的一个唯一的标识号即窗口句柄。,http:/www.sunxin.org,从变量的类型区分变量的用途,int x,y; x=30; y=30; /x和y既可以用来表示坐标点,也可以用来表示宽度和高度,还可以用来表示身高和体重。 typedef int WIDTH typedef int HEIGHT WIDTH x; HEIGHT y; /好处:我们从变量的类型上就可以知道x和y是用来表示宽度和高度。,http:/www.sunxin.org,WinMain函数,Windows程序的入口函数 int WINAPI WinMain( HINSTANCE hInstance, / han

8、dle to current instance HINSTANCE hPrevInstance, / handle to previous instance LPSTR lpCmdLine, / command line int nCmdShow / show state ); 入口点函数,由操作系统调用,参数都是由操作系 统赋值 一个运行起来的程序就是一个“实例” 教材P.30,http:/www.sunxin.org,写第一个Windows程序-窗口的创建,编写WinMain函数(可在MSDN查到) 设计一个窗口类(WNDCLASS) 注册窗口类(RegisterClass) 创建窗口 (

9、CreateWindow) 显示及更新窗口(ShowWindow UpdateWindow) 编写消息循环(While(GetMessage(.) ) 编写窗口过程函数 ( 查看WNDCLASS 的lpfnWndProc成员变量),设计窗口类,typedef struct _WNDCLASS UINT style; /窗口样式 WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpsz

10、MenuName; LPCTSTR lpszClassName; WNDCLASS;,http:/www.sunxin.org,窗口类成员(1),UINT style; 窗口的样式,常用样式如下: CS_HREDRAW 窗口水平方向宽度变化时,重绘窗口(文字、图形被擦除刷新) CS_VREDRAW 窗口垂直方向宽度变化时,重绘窗口(文字、图形被擦除刷新) CS_NOCLOSE 禁用系统菜单的Close命令,即窗口没有关闭按钮。 CS_DBCLKS 用户在窗口中双击鼠标时,向窗口过程发送双击消息。 Style成员的其他消息参见MSDN,窗口类的类型,在我们的程序中经常要用到一类变量,这个变量里的

11、每一位(bit)都对应某一种特性。当该变量的某位为1时,表示有该位对应的那种特性,当该位为0时,即没有该位所对应的特性。当变量中的某几位同时为1时,就表示同时具有几种特性的组合。一个变量中的哪一位代表哪种意义,不容易记忆,所以我们经常根据特征的英文拼写的大写去定义一些宏,该宏所对应的数值中仅有与该特征相对应的那一位(bit)为1,其余的bit都为0。我们使用goto definition就能发现CS_VREDRAW=0 x0001,CS_HREDRAW=0 x0002,CS_DBLCLKS =0 x0008,CS_NOCLOSE=0 x0200。他们的共同点就是只有一位为1,其余位都为0。如果

12、我们希望某一变量的数值既有CS_VREDRAW特性,又有CS_HREDRAW特性,我们只需使用二进制OR(|)操作符将他们进行或运算相组合,如style=CS_VREDRAW | CS_HREDRAW | CS_NOCLOSE。如果我们希望在某一变量原有的几个特征上去掉其中一个特征,用取反()之后再进行与( LRESULT long CALLBACK _stdcall 函数调用过程中,会使用栈,_stdcall和_cdecl 是2种不同的函数调用约 定,定义了函数参数入栈的顺序以及产生参数修饰名的方法。关于这些 约定可以参看MSDN。VC+环境默认的编译选项是_cdecl ,如printf。

13、Win32 API函数都遵循_stdcall约定,显示声明_stdcall, CALLBACK是 帮助我们识别这是一个回调函数。,窗口类成员,int cbClsExtra; 类附件内存,用于存储类的附加信息 int cbWndExtra; 窗口附件内存,用于存储窗口的特有数据 这两个参数一般都设置为0,MessageBox,function MessageBox(hWnd: HWND; Text, Caption: PChar; Type: Word): Integer; hWnd:对话框父窗口句柄,对话框显示在Delphi窗体内,可使用窗体的Handle属性,否则可用0,使其直接作为桌面窗口

14、的子窗口。 Text:欲显示的信息字符串。 Caption:对话框标题字符串。 Type:对话框类型常量。该函数的返回值为整数,用于对话框按钮的识别。,用法,1. MessageBox(这是一个最简单的消息框!); 2. MessageBox(这是一个有标题的消息框!,标题); 3. MessageBox(这是一个确定 取消的消息框!,标题, MB_OKCANCEL ); 4. MessageBox(这是一个警告的消息框!,标题, MB_ICONEXCLAMATION ); 5. MessageBox(这是一个两种属性的消息框!,标题, MB_ICONEXCLAMATION|MB_OKCANC

15、EL ); 6. if(MessageBox(一种常用的应用,标题 ,MB_ICONEXCLAMATION|MB_OKCANCEL)=IDCANCEL)return;,Visual C+、Win32 API和MFC,Win95以上的版本的操作系统都是32位的操作系统,即CPU能同时处理的数据的位数是32位。Win32指的是针对32位处理器设计的Windows操作系统。 VC+6.0是一个以C+语言为基础的集成可视化编程环境。Win32 API是32位Windows操作系统以C/C+形式提供的一组应用程序接口。VC和Win32 API搭配可以开发出Windows应用程序(不用Win32 API

16、也可以),MFC是对Win32 API的封装,简化了开发过程,但程序的灵活性、代码效率都较低。,API 与 SDK,SDK(Software Development Kit) 软件开发包,如,开发一个监控系统,你在购买摄像头的时候厂商会提供SDK开发包,以便编程控制。SDK实际上就是一个资源集合,包括API函数库,帮助文档、使用手册等资源。 API和SDK是一种广泛使用的专业术语,并没有专指某一种特定的API和SDK,如,语音卡API、语音卡SDK、Java API、Java SDK等。 可以把API相像成一个程序库,提供各式各样与windows系统服务有关的函数,在windows下运行的程序最终都是通过调用API函数来完成工作的,可以把Win32 API看成最底层的服务。 如:CreateFi

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号