C的Windows编程基础实用.pptx
《C的Windows编程基础实用.pptx》由会员分享,可在线阅读,更多相关《C的Windows编程基础实用.pptx(105页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、窗口和程序窗口是Windows本身以及Windows 环境下的应用程序的基本界面单位。很多人都误以为只有具有标题栏、状态栏、最大化、最小化按钮这样标准的方框才叫窗口。其实窗口的概念很广,例如按钮和对话框等也是窗口,只不过是一种特殊的窗口。第1页/共105页窗口窗口(Window)由句柄唯一标识。Windows程序的基本操作单元。系统管理应用程序的基本单位。应用程序与用户交互的接口环境。应用程序的运行就是窗口内部、窗口之间、窗口与系统之间数据处理与交换的过程。一个Windows程序至少有一个窗口。第2页/共105页窗口的组成应用程序应用程序的主窗口的主窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口窗口
2、第3页/共105页窗口的组成窗口是屏幕上的一个矩形区域应用程序在该区域中显示数据并等待鼠标点击Windows应用系统的用户界面可以包含许多窗口每个窗口都有不同的特点,但都是互相联系的第4页/共105页三种类型的窗口在这么多窗口中,基本类型只有三种:重叠(Overlapped)窗口弹出(Popup)窗口子(Child)窗口在它们之间并没有太多内在的差异,但是使用不同的窗口风格,它们的外观是不同的第5页/共105页三种类型的窗口重叠窗口通常用于建立应用程序主窗口。事实上,有时也叫做“主”窗口或者“框架”窗口弹出窗口通常以对话框和消息框的形式与用户对话子窗口通常用在视图(View)中,如在文本编辑器
3、中的文本显示,也用在控件中,如在对话框中的OK按钮而对那些看起来像按钮或控件的子窗口,也称为“控件”窗口第6页/共105页三种窗口组成的应用程序属于桌面的重叠窗属于桌面的重叠窗口,也称主窗口口,也称主窗口主窗口的子窗口主窗口的子窗口主窗口的主窗口的子窗口子窗口主窗口的主窗口的弹出窗口弹出窗口弹出窗口弹出窗口的子窗口的子窗口第7页/共105页三种类型的窗口主要区别重叠窗口和弹出窗口弹出窗口出现时可以没有标题(也称为标题栏)子窗口与重叠窗口、弹出窗口子窗口只能出现在另一个窗口中,并且子窗口的任何多余部分都被该窗口移去或剪切掉另外,子窗口是唯一不能有菜单条的窗口第8页/共105页程序通常说的程序都是
4、指一个能让计算机识别的文件。接触得最多的是以exe或者com作为扩展名的文件。第9页/共105页进程与线程进程就是应用程序的执行实例(或称一个执行程序),进程是程序动态的描述。一个以exe作为扩展名的文件,在没有被执行的时候称之为应用程序,当用鼠标双击执行以后,就被操作系统作为一个进程执行了。当关机或者在任务栏的图标上单击鼠标右键选“退出”时,进程便消亡,彻底结束了生命。进程经历了由“创建”到“消亡”的生命期,而程序自始至终存在于你的硬盘上,不管计算机是否启动。第10页/共105页Windows任务管理器进程第11页/共105页线程线程是进程的一个执行单元。同一个进程中的各个线程对应于一组CP
5、U指令、一组CPU寄存器以及一个堆栈。进程本来就具有动态的含义,是通过线程来体现的。第12页/共105页Windows应用程序,操作系统,计算机硬件之间的相互关系 应用程序 操作系统 输入输出设备 消息队列 向下的箭头1表示操作系统能够操纵输出设备,以执行特定的功能,如让声卡发出声音,让显卡画出图形。向上的箭头2表示操作系统能够感知输入设备状态的变化,如鼠标移动,键盘按下,并且能够知道鼠标移动的具体位置,键盘按下的哪个字符。这就是操作系统和计算机硬件之间的交互关系,应用程序开发者通常不需知道其具体实现细节。第13页/共105页API与SDKAPI是英文Application Programmi
6、ng Interface 的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口在编程时可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了SDK是英文Software Development Kit的缩写,意思是“软件开发工具包”微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等第14页/共105页关于API 向下的箭头表示应用程序可以通知操作系统执行某个具体的动作。如操作系统能够控制声卡发出声音,但它并不知道应该何时发出何种声音,需要应用程序告诉操作系统该发出什么样的声音。第15页/共105页关于API 应用程序是如何通知操作系
7、统执行某个功能的呢?在应用程序中要完成某个功能,都是以函数调用的形式实现的,同样,应用程序也是以函数调用的方式来通知操作系统执行相应的功能的。操作系统所能够完成的每一个特殊功能通常都有一个函数与其对应,也就是说,操作系统把它所能够完成的功能以函数的形式提供给应用程序使用,应用程序对这些函数的调用就叫做系统调用,这些函数的集合就是Windows操作系统提供给应用程序编程的接口Windows API。如CreateWindow就是一个API函数,应用程序中调用这个函数,操作系统就会按照该函数提供的参数信息产生一个相应的窗口。第16页/共105页事件及消息事件(Event)是对计算机操作的动作。每个
8、事件对应一个消息,即每个事件发生的效果是产生消息。消息(Message)是描述事件发生的信息。比如:按键事件按下键的消息、字符消息和键弹起的消息程序执行的顺序取决于事件发生的顺序,但是消息的产生并不要求有次序之分。第17页/共105页消息(Message)向上的箭头表示操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应。好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作系统)马上感知到这一事件
9、,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。对事件作出反应的过程就是消息响应。第18页/共105页消息(Message)消息是应用程序和计算机交互的途径,在计算机上几乎做每一个动作都会产生一个消息。鼠标被移动会产生WM_MOUSEMOVE消息;鼠标左键被按下会产生WM_LBUTTONDOWN的消息;鼠标右键按下便产生WM_RBUTTONDOWN消息等。第19页/共105页消息的功能功能帮助Windows实现多任务。通知应用程序某一事件已经发生,各应用程序给予响应。第20页/共105页消息的组成 操作系统是怎样将感知到的事件传
10、递给应用程序呢?这是通过消息机制(Message)来实现的。操作系统将每个事件都包装成一个称为消息的结构体MSG来传递给应用程序,参看MSDN。消息的组成:消息号字参数长字参数n消息号事先定义好。n字参数(wParam)长字参数(lParam)提供附加信息,含义和具体消息号相关。第21页/共105页典型的消息结构typedef struct tagMSG HWND hwnd;/接收窗口 UINT message;/消息标识 WPARAM wParam;/附加信息 LPARAM lParam;/附加信息 DWORD time;/发送时间 POINT pt;/鼠标位置 MSG,*PMSG;/vci
11、ncludewtypes.h第22页/共105页句柄(HANDLE)句柄(HANDLE):资源的标识。操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON),光标句柄(HCURSOR),窗口句柄(HWND),应用程序实例句柄(HINSTANCE)等等各种类型的句柄。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄。第23页/共105页句柄句柄是一个指针通过句柄就可以控制该句柄指向的对象编写程序总是要和各种句柄打交道的句柄(handle)是一个4字节长的整数值是系统用于表示应用程序中不同的对象和同类对象中不同的实例。如一个窗口、按钮、
12、图标、菜单等这些东西在系统中被视为不同类型的对象,用不同的句柄将他们区分开来。第24页/共105页常用的句柄句柄类型句柄类型说明说明句柄类型句柄类型说明说明HWND标识窗口句柄标识窗口句柄HDC标识设备环境句柄标识设备环境句柄HINSTANCE标识当前实例句柄标识当前实例句柄HBITMAP标识位图句柄标识位图句柄HCURSOR标识光标句柄标识光标句柄HICON标识图标句柄标识图标句柄HFONT标识字体句柄标识字体句柄HMENU标识菜单句柄标识菜单句柄HPEN标识画笔句柄标识画笔句柄HFILE标识文件句柄标识文件句柄HBRUSH标识画刷句柄标识画刷句柄第25页/共105页从变量的类型区分变量的用
13、途int x,y;x=30;y=30;/x和y既可以用来表示坐标点,也可以用来表示宽度和高度,还可以用来表示身高和体重。typedef int WIDTHtypedef int HEIGHTWIDTH x;HEIGHT y;/好处:我们从变量的类型上就可以知道x和y是用来表示宽度和高度。第26页/共105页消息驱动机制DOS程序是通过调用系统的函数来获得用户输入。Windows程序则是通过操作系统发送的消息来处理用户输入在Windows操作系统环境内系统产生的动作用户运行应用程序产生的动作事件产生的消息第27页/共105页消息驱动机制Windows程序接收消息分发消息处理消息与用户进行交互与用
14、户进行交互第28页/共105页消息的分类窗口管理消息、初始化消息、输入消息、系统消息等。VC定义不同的前缀用于消息宏定义识别消息类型。BM 按钮消息CB组合框消息DM 下压按钮控制消息EM编辑框消息LB列表框消息WM 窗口消息第29页/共105页不同消息类型的取值范围消息类型消息类型取值范围取值范围系统定义消息(系统定义消息(1)0 x00000 x03ff用户定义内部消息用户定义内部消息0 x04000 x07ff系统定义消息(系统定义消息(2)0 x80000 xbfff用户定义外部消息用户定义外部消息0 xc0000 xffff第30页/共105页Windows应用程序常用消息WM_LB
15、UTTONDOWNWM_KEYDOWNWM_CREATWM_CLOSEWM_DISTORYWM_QUITWM_PAINTWM_CHAR WM_COMMAND第31页/共105页Windows应用程序常用消息窗口管理消息初始化消息输入消息系统消息剪贴板消息控制处理消息控制通知消息滚动条通知消息非用户区消息MDI消息DDE消息应用程序自定义的消息第32页/共105页消息的传递Windows系统有一个存放消息的队列。每个应用程序也有一个消息队列。Windows系统先将收到的消息存放在系统队列中。然后再分发到相应的应用程序队列中。应用程序则从自身的队列中获取消息并进行处理。第33页/共105页消息的传
16、递事件事件事件系统消息队列应用程序队列应用程序队列应用程序队列应用程序应用程序应用程序第34页/共105页一个应用程序队列WindowsInputMessageSystem QueueApplication QueueWinMain()Message LoopWindows Function第35页/共105页两个应用程序队列WindowsInputMessageSystem QueueApplication QueueApplication QueueWinMain()Mesaage LoopWindows FunctionWinMain()Mesaage LoopWindows Funct
17、ion第36页/共105页结束一个应用程序WM_DESTROYWindowsWM_QUITApplication QueueWindows FunctionApplicationWinMain()Message Loop第37页/共105页创建消息循环Windows程序至少包含两个函数:1.WinMain():必有且仅有一个2.窗口函数:每个窗口对应一个窗口函数,以响应该窗口的消息通常每个Windows 应用程序至少对应一个窗口,每个窗口都要有一个窗口函数负责处理该窗口内所发生的事件第38页/共105页创建消息循环While(GetMessage(&msg,(HWND)NULL,0,0)Tra
18、nslateMessage(&msg);/转换某些键盘消息DispatchMessage(&msg);/将消息发送给窗口过程,例程中指WndProc何时退出?/当从应用程序消息队列中检取的消息是/WM_QUIT时,则退出循环第39页/共105页投递和发送消息PostMessage和SendMessagePostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行这是个异步消息投放函数,会造成消息的滞后性SendMessage必须等待其他程序处理消息完了之后才返回,继续执行这是个同步消息投放函数,不会造成消息的滞后性但如果消息处理失败,则会造成程序停止PostMessage的
19、返回值表示PostMessage函数执行是否正确SendMessage的返回值表示其他程序处理消息后的返回值第40页/共105页投递和发送消息图示WindowsSystem QueueApplication QueueWinMain()Mesaage LoopWindows FunctionPostMessage()SendMessage()Application第41页/共105页投递和发送消息示例PostQuitMessage(nExitCode)功能:发送WM_QUIT消息给系统,以通知系统应用程序要结束。WM_QUIT消息只能用PostMessage,因为该消息将导致应用程序释放消息环
20、,也就无法返回结果。SendDlgItemMessage()功能:向对话框控件发送消息 相当于先用GetDlgItem()得到控件句柄,再 SendMessage(),是一种组合的方便方式。第42页/共105页VC6.0下三种编程方式控制台编程(DOS编程)Win32 Console ApplicationWindows API编程:Win32 ApplicationMFC编程:MFC AppWizard(exe)第43页/共105页Visual C+开发环境标题栏标题栏菜单栏菜单栏工具栏工具栏项目工作项目工作区窗口区窗口文档窗口文档窗口工具栏工具栏输出窗口输出窗口输出窗口标签输出窗口标签状态
21、栏状态栏第44页/共105页开发环境的菜单功能 File菜单中的命令主要用来对文件和项目进行操作 Edit菜单中的命令是用来使用户便捷地编辑文件内容 View菜单中的命令主要用来改变窗口和工具栏的显示方式,激活调试时所用的各个窗口等Insert菜单中的命令主要用于项目及资源的创建和添加 第45页/共105页开发环境的菜单功能 Project菜单中的命令主要用于项目的一些操作 Build菜单中的命令主要用来应用程序的编译、连接、调试、运行 Tools菜单中的命令主要用于选择或定制开发环境中的一些实用工具 Windows菜单中的命令主要用于文档窗口的操作 Visual C+提供了大量详细的帮助信息
22、 第46页/共105页File-New-ProjectsMFCAPI控制台(DOS)File菜单第47页/共105页VC6.0可以创建的项目类型项目类型项目类型说明说明项目类型项目类型说明说明ATL COM AppWizard创建创建ATL应用程序应用程序Database Project创建数据库项目创建数据库项目Win32 Dynamic-Link Library创建创建Win32动态链接库动态链接库DevStudio Add-in Wizard创建自动化宏创建自动化宏Custom AppWizard创建自定义的创建自定义的AppWizardISAPI Extension Wizard创建创
23、建Internet服务器或服务器或过滤器过滤器Makefile创建创建Make文件文件MFC ActiveX ControlWizard创建创建ActiveX控件程序控件程序MFC AppWizard(dll)创建创建MFC动态链接库动态链接库MFC AppWizard(exe)创建创建MFC可执行程序可执行程序Win32 Application创建创建Win32应用程序应用程序Win32 Console Application创建创建Win32控制台应用控制台应用程序程序Cluster Resource Type Wizard通过它可以创建两种项通过它可以创建两种项目类型(目类型(Resou
24、rce DLL和和Cluster Administrator Extension DLL)Utility Project通过它可以创建一个效通过它可以创建一个效用项目,该项目只作为用项目,该项目只作为其他子项目的一个包容其他子项目的一个包容器,减少子项目的编联器,减少子项目的编联时间,但它本身并不包时间,但它本身并不包含任何文件含任何文件Win32 Static Library创建创建Win32静态库静态库第48页/共105页File-New-Files第49页/共105页开发环境的工具栏 标准工具栏 类向导工具栏 小型编译连接工具栏工具栏的显示与隐藏、浮动与停泊 “Customize”对话框
25、方式(Tools-Customize)快捷菜单方式(任何工具栏处右击鼠标)第50页/共105页2.1 Windows程序结构第51页/共105页2.1.1 简单的Windows应用程序实例创建(演示)用AppWizard创建 理解程序框架 添加程序代码 编译运行 第52页/共105页2.1.1 简单的Windows应用程序 例Ex_HelloMsg:一个最简单的Windows应用程序。#include int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)Messa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 编程 基础 实用
限制150内