程序设计实践_Windows基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1程序设计实践徐前方xuqianfang@bupt.edu.cnWindows编程基础知识2内容提要1、Windows编程概述2、基本概念3、Windows程序基本结构4、程序示例31Windows编程概述Windws编程在微软的Windows操作系统下编程使用的工具微软公司和其他公司(Boland等)在该操作系统下提供了了很多可视化的开发系统平台,如VC++、VB、BC、Delphi等。我们使用VC++41Windows编程概述可视化开发系统(资源和工具的集成)源程序编辑器编译器调试工具•语法检查•程序修改•运行监视应用程序Help和Setup开发工具函数库和系统函数开发工具资源管理器各种窗口和控件的编辑器例程库及Help其他功能51Windows编程概述一个简单的Windows程序#includewindows.hintCALLBACKWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPSTRlpCmdLine,intnCmdShow){//产生一个问候小窗口MessageBox(NULL,HelloWorld!,SayHello,MB_OK);return1;}61Windows编程概述Windows程序特点图形用户界面(窗口)统一、友好独立于设备的图形操作(GUI)支持多任务机制(多线程)事件驱动的程序设计(消息队列机制)程序和资源分开、资源共享支持应用程序间的数据交换(剪贴板等)71Windows编程概述开发面向对象应用程序的方法传统方法:使用Windows提供的API交互式方法:使用Microsoft提供的MFC类库API(ApplicationProgrammingInterface)Windows系统和Windows应用程序间的标准程序接口主要分三类:窗口管理函数,图形设备函数,系统服务函数MFC类库集成了大量已经预先定义好的类81Windows编程概述基于DOS与基于Windows应用程序区别基于DOS:使用顺序的过程驱动方法例:计算平均成绩启动输入姓名输入第一次测试成绩输入第二次测试成绩输入第三次测试成绩计算平均成绩结束程序能直接控制程序事件或过程的顺序91Windows编程概述基于DOS与基于Windows应用程序区别基于Windows:使用事件驱动方法例:计算平均成绩程序由事件的发生来控制启动消息处理结束输入姓名输入第一次成绩输入第二次成绩输入第三次成绩计算平均成绩101Windows编程概述Windows应用程序重要概念:窗口的概念事件驱动的概念句柄消息11内容提要1、Windows编程概述2、基本概念窗口事件驱动句柄消息3、Windows程序基本结构4、程序示例122基本概念Windows应用程序重要概念:窗口事件驱动句柄消息132基本概念——窗口窗口——Windows程序界面的主要组成控制菜单框窗口边界工作区下拉菜单水平滚动条垂直滚动条最大化按钮最小化按钮标题栏142基本概念——窗口窗口功能系统对应用程序管理的基本单位应用程序与用户之间交互的接口环境Window应用程序基本的操作单元Windows应用程序编程设计窗口:WNDCLASS创建窗口:createWindowWindows应用程序运行窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与交换的过程背景颜色、窗口号、光标、图标、名字等152基本概念Windows应用程序重要概念:窗口事件驱动句柄消息162基本概念——事件驱动事件——系统运行时发生的事情事件的产生方式通过输入设备,如键盘和鼠标;通过屏幕上可视的对象,如菜单、工具栏按钮、滚动条和对话框上的控件;来自Windows内部,如当一个后面的窗口显示到前面来时。事件的结果系统以消息的形式记录事件的结果即消息172基本概念——事件驱动Windows是基于消息的事件驱动Windows应用程序是按照“事件→消息→处理”非顺序的机制运行的。例:将消息传递给窗口函数的相应过程处理消息队列Windows将产生的消息某一事件按下鼠标182基本概念Windows应用程序重要概念:窗口事件驱动句柄消息192基本概念——句柄句柄是整个Windows编程的基础句柄的作用:Windows程序中,有各种各样的资源(窗口、图标、光标等),操作系统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号。操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,可将句柄分为不同类型句柄是一个4字节长的数值用于标识应用程序中不同的对象和同类对象中不同的实例202基本概念——句柄常用句柄类型HWND窗口句柄HINSTANCE当前实例句柄HCURSOR光标句柄HFONT字体句柄HPEN画笔句柄HBRUSH画刷句柄HDC设备环境句柄HICON图标句柄HMENU菜单句柄HFILE文件句柄句柄所标识对象实例窗口按钮图标滚动条输出设备控件文件程序进程等等…...212基本概念——句柄数据类型别名intx,y;x=30;y=30;//x和y表示坐标,宽度和高度等改进typedefintWIDTHtypedefintHEIGHTWIDTHx;HEIGHTy;可读性不好222基本概念——句柄数据类型别名Windows应用程序中的数据量非常大,为了提高应用程序的可读性,Windows给许多基本数据类型定义了别名,例如:typedefvoid*HANDLE;typedefunsignedlongDWORD;typedefintBOOL;typedefunsignedcharBYTE;typedefunsignedshortWORD;232基本概念Windows应用程序重要概念:窗口事件驱动句柄消息242基本概念——消息消息——应用程序与系统及其它应用程序进行信息交换的数据结构消息的结构typedefstructtagMSG{HWNDhwnd;//窗口句柄UINTmessage;//消息号(WM_XXX),区别不同消息的常量WPARAMwParam;//消息的附加信息LPARAMlParam;//消息的附加信息DWORDtime;//消息创建的时间POINTpt;//消息创建时的屏幕光标位置}MSG;252基本概念——消息消息的分类WM——窗口消息BM——按钮控制消息CB——组合框控制消息DM——默认下压式按钮控制消息EM——编辑控制消息LB——列表框控制消息SBM——滚动条控制消息262基本概念——消息常见的消息272基本概念——消息消息队列Windows为所有的应用程序维护一个消息队列应用程序必须从消息队列中获取消息,然后分派给某个窗口。消息循环应用程序从消息队列中检索消息,再把它分派给适当的窗口,然后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。282基本概念——消息窗口过程每个窗口都有一个窗口过程来接收传递给窗口的消息,它的任务就是获取消息然后响应。窗口过程是一个回调函数,处理了一个消息后,它通常要返回一个值给Windows。292基本概念——消息消息系统Windows系统消息队列是否需要处理?提取消息处理消息默认窗口函数事件消息是否应用程序应用程序消息队列302基本概念——消息消息处理过程(产生-响应)系统中发生了某个事件Windows把这个事件翻译为消息,然后把它放到消息队列中。应用程序从消息队列中接收到这个消息,把它存放在MSG中。应用程序把消息传递给一个适当的窗口过程。窗口过程响应这个消息并进行处理。31内容提要1、Windows编程概述2、基本概念3、Windows程序基本结构程序入口函数窗口过程函数4、程序示例323Windows程序基本结构程序入口函数WinMain函数原型窗口初始化(1、窗口类定义,2、注册窗口类,3、创建窗口,4、显示窗口)消息循环窗口过程函数函数原型消息响应1、函数原型2、窗口初始化3、消息循环4、窗口过程函数333Windows程序基本结构——WinMain函数原型WinMain函数原型intWINAPIWinMain(HINSTANCEhInstance,//当前实例句柄HINSTANCEhPrevInst,//先前实例句柄LPSTRlpszCmdLine,//指向应用程序命令行参数的指针intnCmdShow//初始窗口显示方式的整数值标识)同一应用程序可能同时存在多个窗口,系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识343Windows程序基本结构——WinMain函数初始化WinMain函数初始化窗口类的定义:设置光标、图标、背景等注册窗口类创建窗口显示和更新窗口353Windows程序基本结构——WinMain函数初始化窗口类的定义——设计窗口类typedefstruct_WNDCLASS{UINTstyle;//窗口变化时重画方式WNDPROClpfnWndProc;//窗口过程类型intcbClsExtra;//类的附加信息intcbWndExtra;//窗口附加信息HANDLEhInstance;//当前应用程序实例号HICONhIcon;//图标句柄HCURSORhCursor;//加载的光标类型HBRUSHhbrBackground;//窗口的背景画刷句柄LPCTSTRlpszMenuName;//设置菜单LPCTSTRlpszClassName;//窗口类名字}WNDCLASS;363Windows程序基本结构——WinMain函数初始化窗口类的定义WNDCLASSwintest;wintest.cbClsExtra=0;//类的附加信息,通常为0wintest.cbWndExtra=0;//窗口的附加信息,通常为0wintest.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);wintest.hCursor=LoadCursor(NULL,IDC_CROSS);//光标句柄wintest.hIcon=LoadIcon(NULL,IDI_ERROR);//图标句柄wintest.hInstance=hInstance;//当前应用程序实例号wintest.lpfnWndProc=WndProc;//窗口过程wintest.lpszClassName=“winTest”;//窗口类名字wintest.lpszMenuName=NULL;//菜单名字wintest.style=CS_HREDRAW|CS_VREDRAW;//水平/垂直重画373Windows程序基本结构——WinMain函数初始化wintest.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);常用窗口样式标识说明BLACK_BRUSH黑色画刷DKGRAY_BRUSH暗灰色画刷GRAY_BRUSH灰色画刷笔LTGRAY_BRUSH亮灰色画刷NULL_BRUSH空画刷WHITE_BRUSH白色画刷HOLLOW_BRUSH虚画刷383Windows程序基本结构——WinMain函数初始化wintest.hCursor=LoadCursor(NULL,IDC_CROSS);常用窗口样式标识说明IDC_APPSTARTING标准的箭头和小沙漏IDC_CROSS十字光标IDC_ARROW标准的箭头IDC_HELP标准的箭头和问号IDC_IBEAM工字光标IDC_NO禁止圈IDC_SIZEALL四向箭头指向东、西、南、北IDC_UPARROW垂直箭头IDC_WAIT沙漏393Windows程序基本结构——WinMain函数初始化wintest.hIcon=LoadIcon(NULL,IDI_ERRO

1 / 66
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功