




已阅读5页,还剩53页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows 程序设计初步,一. Windows 系统的特征,标准的用户界面 多任务 设备独立性 动态链接 强大的内存管理,二. 基本术语,窗口 (window) 由句柄唯一标识 对话框 (Dialog) 人机交互 图标 (Icon) 代表某项操作或程序的图符 位图 (Bitmap) 用位模式形成的图像 菜单(Menu) 命令 工具栏 (ToolBar) 常用的菜单项 状态栏 (StateBar) 操作状态或操作提示,二. 基本术语(续),句柄 : 用来标识资源的32位无符号整数 HANDLE 一般句柄 HINSTANCE 实例句柄 HWND 窗口句柄 HMENU 菜单句柄 HICON 图标句柄 HCURSOR 光标句柄 HBITMAP 位图句柄,三. Windows 编程的特点,1. 消息驱动体系 DOS 编程方式属过程驱动。 Windows 编程方式属消息驱动 (程序的工作是产生消息,传递消息和处理消息)。,事件,事件是对计算机操作的动作 。每个事件对应一个消息,即每个事件发生的效果是产生消息。,消息,消息的功能: (1)帮助Windows实现多任务 (2)通知应用程序某一事件已经发生,各应用程序给予响应,消息的表示,消息本身内容 UINT message 32位无符号整数 附加信息 WPARAM wParam LPARAM lParam,消息的定义,typedef struct tagMSG HWND hwnd; /接收窗口 UINT message; /消息标识 WPARAM wParam; /附加 LPARAM lParam; /附加 DWORD time; /入队时间 POINT pt; /光标位置 MSG; /vcincludewtypes.h,消息的种类 vcincludewinuser.h,标准Windows消息 除WM_COMMAND外,所有以WM_ 为前缀的消息,由窗口和视图处理。 控制消息 由控件和子窗口发给父窗口的消息。 命令消息 来自用户接口对象。如:菜单、工具条和加速键等。,标准的Windows消息可以分为三类,即键盘消息、鼠标消息和窗口消息。下面分别加以说明。 键盘消息 当键盘的某个键被按下时,将产生WM_CHAR消息,这个消息带有字符代码值、重复次数和先前状态码三个参数。WM_CHAR消息的处理函数为OnChar( ),此函数的原型为: afx_msg void Onchar(UINT nChar,UINT nRepCnt,UINT nFlags); 其中:nChar是所按键的字符代码值; nRepCnt是重复的次数,它表示用户按键时重复击键的次数; nFlags表示扫描码、先前键状态和键转换状态等,其参数值功能描述见表4.1所示。,表1 nFlags参数值功能描述,鼠标消息 在Windows中处理鼠标的操作基本上有三种: 单击(Click) 2. 双击(Double Click) 3.拖动(Drag) 所有这些鼠标的操作,都会产生相应的消息。鼠标移动时产生WM_MOUSEMOVE消息,鼠标左键按下时产生WM_LBUTTONDOWN消息,鼠标右键按下时产生WM_RBUTTONDOWN消息,鼠标左键双击时产生WM_LBOTTONDBLCLK消息等等。 所有这些鼠标消息的处理函数都有相似的原型,它们都有两个参数。我们以处理鼠标左键按下的消息函数OnLButtonDown( )为例来进行说明。此函数的原型如下: afx_msg void OnLButtonDown(UINT nFlags,Cpoint point); 其中:参数point是鼠标事件发生时鼠标光标所在的位置,它是相对于窗口左上角的水平坐标和垂直坐标而言的。,参数nFlag指明鼠标按钮的状态以及鼠标事件发生时键盘上某些键的状态,每一状态都可以由nFlag的一位来表示。我们可以从表4.2中所列的位屏蔽中得到每一位。 4.2 nFlags参数每位的含义 其中,MK_CONTROL、MK_LBUTTON、MK_MBUTTON、MK_MBUTTON、MK_RBUTTON和MK_SHIFT都是预定义的宏。,窗口消息 所有窗口的变化,包括窗口内容重绘WM_PAINT、窗口最大化WM_MAXIMIZE、窗口最小化WM_MINIMIZE、窗口重定义大小WM_RESIZE、窗口滚动WM_HSCROLL、WM_VSCROLL、窗口定时WM_TIMER等消息所带参数各不相同。 在这里我们来详细讨论一下WM_PAINT消息。当调用成员函数UpdateWindow( )或 RedrawWindow( )要求重新绘制窗口内容时,应用程序将收到WM_PAINT消息。当窗口最小化后再还原或被其他窗口遮盖后又重新显示时,则当前窗口中的内容必须重新绘制,消息WM_PAINT就是为实现这个功能的。,当向Windows应用程序发送WM_PAINT消息,应用程序检索到此消息后,就重新显示窗口中的内容。WM_PAINT消息的处理函数为 OnPaint( )。 函数原型为: afx_msg void OnPaint( ); 如果想详细了解所有的标准的Windows消息,可以参阅Visual C+ 6.0联机帮助中的有关内容。 4.4.2 控件消息 控件是一个小的子窗口,属于其他窗口(如对话框等),能够接受操作并象父窗口发送消息。常见的控件有按钮、列表框、编辑框、复合框、滚动条等。 在Visual C+ 6.0中,对控件的操作都是通过生成相应的控件类来进行。这些控件类仅能发送少量特定的消息,这些消息就叫做控件消息。发送控件消息的控件在Visual C+中,使用唯一ID号来进行标识,使用控件类来操纵。 控件消息分为两类: 1. 从控件传给消息,通常这类消息的前缀的最后一个字符为N; 2. 由系统发送给控件的消息,这类消息的前缀的最后一个字符为M。 例如,当用户对编辑框中的文本进行修改时,编辑框将发送给父窗口一条包含控件通知码EN_CHANGE的WM_COMMAND消息。窗口的消息处理函数将以某种适当的方式对通知消息作出响应,如检索编辑框中的文本。 与其他标准的Windows消息一样,控件消息也是由窗口对象和视图对象进行处理。,命令消息 命令消息主要包括由用户界面对象发送的M_COMMAND消息,用户界面对象是指菜单、工具栏、快捷键等。它和控件消息的区别在于:控件消息只能由特定控件向Windows系统传送,而命令消息是由用户界面发送的,它可以被更多的对象处理。在文档对象、视图对象、窗体对象、控件对象中都能处理这种消息。 1. 用户界面对象 菜单、工具栏、快捷键等都是可以产生命令的用户界面对象。每个这样的对象都分配了一个ID号,通过给对象和命令分配同一个ID号,将用户界面对象和命令联系在一起。例如,选择程序中的【文件】菜单下的【打开】菜单项,则产生一条ID_FILE_OPEN命令,然后通过消息映射调用函数OnFileOpen()来进行处理。,2. 命令ID 在MFC编程中,命令完全由命令ID来进行描述,命令ID分配给产生此命令的用户界面对象。通常情况下,命令ID是由它所表示的用户界面对象的功能来命名的。MFC预定义了一些命令ID,如ID_EDIT_CUT、ID_FILE_SAVE 等,而其他命令ID则要由编程人员自己定义。 3. 命令目标 当用户界面对象被单击后,将调用处理函数来执行所产生的命令。Windows把非命令消息的消息直接发送给窗口,窗口中用于处理这些消息的处理函数将被调用。而对于命令消息,将把命令发送给多个目标,也就是命令目标,其中通常有一个要调用此命令的处理函数。,消息的产生,用户产生消息 Windows 本身产生消息 应用程序本身产生消息 其他应用程序产生消息,消息的传递,Windows系统有一个存放消息的队列,每个应用程序也有一个消息队列。Windows系统先将收到的消息存放在系统队列中;然后再分发到相应的应用程序队列中。应用程序则从自身的队列中获取消息并进行处理。,事件,事件,事件,系统消息队列,应用程序队列,应用程序队列,应用程序队列,应用程序,应用程序,应用程序,消息的处理,每个窗口对应一个窗口函数,负责处理该窗口的所有消息. 窗口函数具有4个参数: HWND 型 窗口句柄 UINT 型 消息内容 WPARAM 型 附加信息 LPARAM 型 附加信息,2. 窗口,通常每个Windows 应用程序至少对应一个窗口,每个窗口都要有一个窗口函数负责处理该窗口内所发生的事件。,3. Windows 应用程序接口,(Application Programming Interface) API 是由Windows操作系统提供的函数定义、参数定义和消息格式的集合。可供应用程序使用。,API分类,窗口管理接口函数 图形设备接口函数 系统服务接口函数,三种编程方法,基于C语言和SDK工具: 直接使用API,易于理解工作原理。 基于C+和MFC类库 :以基本类库作为应用程序的接口。 基于Appwizard 的程序设计环境,即自动生成应用程序框架。,什么叫SDK? 当微软每次推出一个重要的Windows版本,一般都会同时推出一个SDK(Software Development Kit),SDK中包括开发该版本Windows所需要的函数和常数定义、API函数说明文档、相关的工具和示例。SDK一般都使用C语言,但不包括编译器。SDK可以在微软的站点下载,也可以在MSDN专业版和企业版的光盘中找到。安装SDK后,使用VC+编写和编译程序就可以了。VC+中包括了SDK中的所有头文件、帮助、示例和工具,所以如果你使用的是VC+,你一般就不需要SDK了。只有当你的VC+版本比较低,如你使用的是VC+ 5.0,而想利用Win98中提供的新功能时,才需要安装SDK。从Windows 98起,Windows SDK叫Platform SDK。Platform SDK包括最新的Windows API(如Windows 2000的新函数)的有关声明、例子,值得下载。,4. 命名规则,函数命名规则 函数名 = 动词 + 名词 动词和名词的第一个字母必须大写 例 GetMessage 变量命名规则 小写字母前缀表示变量的类型,其余 的部分描述变量的功能 例 nCount,数据类型 定义 Win 32 变量名 BOOL int 32 位符号数 bOk INT int 32 位符号数 nCount UINT unsigned int 32 位无符号数 uMsg LONG long 32 位符号数 lTotalSize,四. Windows 应用程序结构,至少包含两个函数: WinMain ( ) : 必有且仅有一个。 窗口函数 : 每个窗口对应一个窗口函数,以响应该窗口的消息。,WinMain ( )函数需完成的功能,定义窗口类 注册窗口类 建立窗口类的窗口 显示窗口 运行消息循环,WinMain( )函数的原型,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 /窗口类名字,hCursor 加载函数,HCURSOR LoadCursor ( HINSTANCE hInst, LPCSTR lpszName) hInst: 鼠标光标所在的模块 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,把消息传递给相应的窗口函数。,窗口函数,窗口函数负责处理从系统接收 的输入消息和窗口管理消息。 它由 Windows 直接调用。,PostQuitMessage(nExitCode) 功能:发送WM_QUIT消息给系统, 以通知系统应用程序要结束 DefWindowProc(hwnd,message, wParam,lParam) 消息缺省处理函数,例1 利用MFC Appwizard 创建Windows应用程序,在C+中,事物之间的关系是通过类的派生和类的成员函数的重载来反映的。而在Visual C+ 6.0中,类同样是最重要的元素。如一个字符串可以是类Cstring的对象,一个窗口可以是类CWnd的对象,一个对话框可以是类Cdialog的对象等等。 Visual C+ 6.0中的MFC AppWizard(应用程序向导)可以使用户自动生成一些常用的标准程序结构和编程风格。例如一般的Windows应用程序结构、DLL应用程序结构、单文档(SDI)应用程序结构、多文档(MDI)应用程序结构等。,下面详细介绍利用MFC AppWizard创建一个Windows应用程序的步骤: 第零步 启动Visual C+ 6.0,选择【File】菜单下的【New】菜单项,选择【Projects】标签,选择【MFC AppWizard(exe)】项目类型,在【Project name】中输入,项目名MyExp,定位于“D:temp”文件夹中,单击【OK】按钮。 第一步 选择【Single document】应用类型,即单文档应用程序,其他使用默认值,单击【Next】按钮。 第二步 让用户选择程序中是否加入数据库支持,在此使用默认值【None】,单击【Next】按钮。 第三步 让用户选择在程序中加入复合文档,自动化或ActiveX控件的支持,在此使用默认值,单击【Next】按钮。 第四步 让用户选择应用程序的一些特性,在此使用默认值,单击【Next】按钮。 第五步 让用户选择应用程序主窗口的风格、在源文件中是否加入注释、使用怎样的MFC类库,在此使用默认值,单击【Next】按钮。,第六步 用户可以对MFC AppWizard提供的缺省类名、基类名、头文件名、源文件名进行修改,使用默认值,单击【Finish】按钮。则会显示出用户在前面几个步骤中作出的选择内容,单击【OK】按钮,系统开始创建应用程序,并回到Visual C+ 6.0的主界面。 运行过的应用程序MyExp可以脱离Visual C+ 6.0单独运行,运行该文档可以双击“D:tempDebug”下的MyExp.exe文件。和所有的Windows应用程序一样,MyExp也包含标题栏、菜单栏、工具栏、状态栏等窗口元素。,MFC应用程序的类和文件,例1类说明 AppWiZard在生成应用程序时,共派生了5个类单击“MyExp classes”左侧的“+”展开所有的类,即可显示出应用程序MyExp的5个类,其中: CAboutDlg: 关于About对话框的对话框类 CMainFrame: 主框架窗口类 CMyExpApp: 应用程序类 CMyExpDoc: 文档类 CMyExpView:视图类 在工程中,每个类都拥有自己的类定义文件(*.H)和类实现文件(*.CPP)。类定义文件主要保存各种类的定义;类实现文件主要保存各种类的成员函数的实现代码。,下面分别对这5个类进行说明: 关于About对话框的对话框类CAboutDlg CAboutDlg是工程MyExp的对话框类,它是由MFC类库中的CDialog类派生而来的。 主框架窗口类CMainFrame CMainFrame是工程MyExp的主框架窗口类,它的基类是CFrameWnd。头文件为MainFrm.h,实现文件为MainFrm.cpp。 主框架窗口类用于管理主程序的窗口,来显示窗口的标题栏、工具栏、状态栏等;同时还处理对窗口操作的消息,例如窗口最大化、最小化、改变窗口大小等一般操作。视图窗口是主框架窗口的子集,对于多文档界面(MDI)应用程序,主框架窗口是所有MDI子窗口的容器。,应用程序类CMyExpApp CMyExpApp是工程MyExp的应用程序类,它的基类是CWinApp。头文件为MyExp .h,实现文件为MyExp.cpp。 应用程序类管理程序的整体,控制应用程序的所有对象,包括文档、视图和边框窗口,并完成应用程序的初始化工作和程序退出时的清除工作。 注意:每个基于MFC的应用程序都必须有一个从CWinApp类派生的对象。 文档类CMyExpDoc CMyExpDoc是工程MyExp的文档类,它的基类是CDocument。头文件为MyExpDoc.h,实现文件为MyExpDoc.cpp。,文档类负责存放程序的数据并读取磁盘文件数据,或将磁盘文件数据写入磁盘文件中。文档类必须通过视图类实现与用户的交互。 视图类CMyExpView CMyExpView是工程MyExp的视图类,它的基类是CView。头文件为MyExpView.h,实现文件为MyExpView.cpp。 视图类主要负责管理视图窗口,显示文档类中的数据,可以显示在屏幕上,也可以输出到打印机或其他设备上;也负责处理用户数据,接受用户对数据的鼠标、键盘操作并传送给文档类对象。,例1 文件说明 App Wizard在自动生成工程时,除了生成上面介绍的各个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上半年三明市消防救援支队政府专职消防员招聘62人笔试备考题库附答案详解
- 2024-2025学年资料员之资料员基础知识通关题库含答案详解【典型题】
- 2024-2025学年银行岗位能力检测试卷及完整答案详解(名校卷)
- 2023年度注册公用设备工程师试题预测试卷含答案详解【基础题】
- 燃气职业技能鉴定过关检测试卷(典优)附答案详解
- 2025医学检验(士)题库试题含答案详解【典型题】
- 华森制药存货管理内部控制研究
- 篇章语言学对语言叠合法式的分析与研究
- 深基坑支护工程组织设计优化
- 花生智能化播种机性能优化设计与现场试验评估
- 医疗器械仓储操作流程
- 完整版QC七大手法培训课件
- API-650-1钢制焊接石油储罐
- 游泳救生员(初级)理论复习试题与答案
- 学生学习力评价量表
- 三年级上册美术课件-第1课 五星红旗我为你骄傲|辽海版
- 触电急救知识与方法PPT
- 中职心理健康教育第一课-PPT课件
- 文化引领学校特色化课程体系的建构
- 水岸山居调研
- 安全现场文明施工措施费用清单
评论
0/150
提交评论