程序设计实践-Windows基础_第1页
程序设计实践-Windows基础_第2页
程序设计实践-Windows基础_第3页
程序设计实践-Windows基础_第4页
程序设计实践-Windows基础_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1程序设计(chn x sh j)实践Windows编程基础知识共六十七页2内容提要(ni rn t yo)1、Windows编程概述2、基本概念3、Windows程序基本结构(jigu)4、程序示例共六十七页31 Windows编程概述(i sh)Windws编程 在微软的Windows操作系统下编程使用的工具微软公司和其他公司(Boland等)在该操作系统下提供了了很多可视化的开发系统(xtng)平台,如VC+、VB 、 BC、Delphi等。我们使用VC+共六十七页41 Windows编程概述(i sh)可视化开发系统(资源(zyun)和工具的集成)源程序编辑器编译器调试工具语法检查程序

2、修改运行监视应用程序Help和Setup开发工具函数库和系统函数开发工具资源管理器各种窗口和控件的编辑器例程库及Help其他功能共六十七页51 Windows编程概述(i sh)一个(y )简单的Windows程序#include int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) / 产生一个问候小窗口 MessageBox ( NULL, Hello World!, Say Hello, MB_OK ); return 1;共六十七页61 Win

3、dows编程概述(i sh)Windows程序特点图形用户界面(窗口)统一、友好独立(dl)于设备的图形操作(GUI)支持多任务机制(多线程)事件驱动的程序设计(消息队列机制)程序和资源分开、资源共享支持应用程序间的数据交换(剪贴板等)共六十七页71 Windows编程概述(i sh)开发面向对象应用程序的方法传统(chuntng)方法:使用Windows提供的API交互式方法:使用Microsoft提供的MFC类库API (Application Programming Interface)Windows系统和Windows应用程序间的标准程序接口主要分三类:窗口管理函数,图形设备函数,系统

4、服务函数MFC类库集成了大量已经预先定义好的类共六十七页81 Windows编程概述(i sh)基于DOS与基于Windows应用程序区别基于DOS:使用顺序(shnx)的过程驱动方法例:计算平均成绩启动输入姓名输入第一次测试成绩输入第二次测试成绩输入第三次测试成绩计算平均成绩结束程序能直接控制程序事件或过程的顺序共六十七页91 Windows编程概述(i sh)基于DOS与基于Windows应用程序区别基于Windows:使用(shyng)事件驱动方法例:计算平均成绩程序由事件的发生来控制启动消息处理结束输入姓名输入第一次成绩输入第二次成绩输入第三次成绩计算平均成绩共六十七页101 Wind

5、ows编程概述(i sh)Windows应用程序重要概念(ginin):窗口的概念事件驱动的概念句柄消息共六十七页11内容提要(ni rn t yo)1、Windows编程概述2、基本概念窗口事件驱动句柄消息3、Windows程序基本结构(jigu)4、程序示例共六十七页122 基本概念Windows应用程序重要概念(ginin):窗口事件驱动句柄消息共六十七页132 基本概念窗口(chungku)窗口(chungku)Windows程序界面的主要组成控制菜单框窗口边界工作区下拉菜单水平滚动条垂直滚动条最大化按钮最小化按钮标题栏共六十七页142 基本概念窗口(chungku)窗口功能系统对应用

6、程序管理的基本单位应用程序与用户之间交互(jioh)的接口环境Window应用程序基本的操作单元Windows应用程序编程设计窗口:WNDCLASS创建窗口:createWindowWindows应用程序运行窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与交换的过程背景颜色、窗口号、光标、图标、名字等共六十七页152 基本概念Windows应用程序重要(zhngyo)概念:窗口事件驱动句柄消息共六十七页162 基本概念事件驱动事件系统运行时发生的事情事件的产生方式通过(tnggu)输入设备,如键盘和鼠标;通过屏幕上可视的对象,如菜单、工具栏按钮、滚动条和对话框上的控件;来自Windows

7、内部,如当一个后面的窗口显示到前面来时。事件的结果系统以消息的形式记录事件的结果即消息共六十七页172 基本概念事件驱动Windows是基于消息(xio xi)的事件驱动Windows应用程序是按照“事件消息处理”非顺序的机制运行的。例:将消息传递给窗口函数的相应过程处理消息队列Windows将产生的消息WinMain函数某一事件(shjin)按下鼠标共六十七页182 基本概念Windows应用程序重要概念(ginin):窗口事件驱动句柄消息共六十七页192 基本概念句柄句柄是整个Windows编程的基础(jch)句柄的作用:Windows程序中,有各种各样的资源(窗口、图标、光标等),操作系

8、统在创建这些资源时会为它们分配内存,并返回标识这些资源的标识号。操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,可将句柄分为不同类型句柄是一个4字节长的数值用于标识应用程序中不同的对象和同类对象中不同的实例共六十七页202 基本概念句柄常用句柄类型HWND窗口句柄HINSTANCE当前实例(shl)句柄HCURSOR光标句柄HFONT字体句柄HPEN画笔句柄HBRUSH画刷句柄HDC设备环境句柄HICON图标句柄HMENU菜单句柄HFILE文件句柄 句柄所标识对象(duxing)实例窗口按钮图标滚动条输出设备控件文件程序进程等等.共六十七页212 基本概念句柄数据类型

9、别名(bimng)int x,y;x=30; y=30; /x和y表示坐标,宽度和高度等改进typedef int WIDTHtypedef int HEIGHTWIDTH x;HEIGHT y;可读性不好(b ho)共六十七页222 基本概念句柄数据类型别名(bimng)Windows应用程序中的数据量非常大,为了提高应用程序的可读性,Windows给许多基本数据类型定义了别名,例如:typedef void * HANDLE;typedef unsigned long DWORD;typedef int BOOL;typedef unsigned char BYTE;typedef uns

10、igned short WORD;共六十七页232 基本概念Windows应用程序重要概念:窗口(chungku)事件驱动句柄消息共六十七页242 基本概念消息(xio xi)消息(xio xi)应用程序与系统及其它应用程序进行信息交换的数据结构消息的结构typedef struct tagMSG HWND hwnd; /窗口句柄 UINT message;/消息号(WM_XXX),区别不同消息的常量 WPARAM wParam; /消息的附加信息 LPARAM lParam; /消息的附加信息 DWORD time; /消息创建的时间 POINT pt; /消息创建时的屏幕光标位置MSG;共

11、六十七页252 基本概念消息(xio xi)消息的分类WM 窗口消息BM 按钮控制(kngzh)消息CB 组合框控制消息DM 默认下压式按钮控制消息EM 编辑控制消息LB 列表框控制消息SBM 滚动条控制消息共六十七页262 基本概念消息(xio xi)常见(chn jin)的消息共六十七页272 基本概念消息(xio xi)消息队列Windows为所有(suyu)的应用程序维护一个消息队列应用程序必须从消息队列中获取消息,然后分派给某个窗口。消息循环应用程序从消息队列中检索消息,再把它分派给适当的窗口,然后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。共六十七页282 基本概

12、念消息(xio xi)窗口过程每个窗口都有一个窗口过程来接收传递(chund)给窗口的消息,它的任务就是获取消息然后响应。窗口过程是一个回调函数,处理了一个消息后,它通常要返回一个值给Windows。共六十七页292 基本概念消息(xio xi)消息(xio xi)系统共六十七页302 基本概念消息(xio xi)消息处理过程(产生-响应)系统中发生了某个事件Windows把这个事件翻译为消息,然后把它放到消息队列中。应用程序从消息队列中接收到这个消息,把它存放在MSG中。应用程序把消息传递给一个适当的窗口(chungku)过程。窗口过程响应这个消息并进行处理。共六十七页31内容提要(ni r

13、n t yo)1、Windows编程概述(i sh)2、基本概念3、Windows程序基本结构程序入口函数窗口过程函数4、程序示例共六十七页323 Windows程序(chngx)基本结构程序入口函数WinMain函数原型(yunxng)窗口初始化(1、窗口类定义,2、注册窗口类,3、创建窗口,4、显示窗口)消息循环窗口过程函数函数原型消息响应1、函数原型2、窗口初始化3、消息循环4、窗口过程函数共六十七页333 Windows程序(chngx)基本结构 WinMain函数原型WinMain函数(hnsh)原型int WINAPI WinMain ( HINSTANCE hInstance,

14、/当前实例句柄 HINSTANCE hPrevInst, /先前实例句柄 LPSTR lpszCmdLine, /指向应用程序命令行参数的指针 int nCmdShow /初始窗口显示方式的整数值标识)同一应用程序可能同时存在多个窗口,系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识共六十七页343 Windows程序(chngx)基本结构WinMain函数初始化WinMain函数初始化窗口类的定义:设置(shzh)光标、图标、背景等注册窗口类创建窗口显示和更新窗口共六十七页353 Windows程序基本(jbn)结构 WinMain函数初始化窗口(chungku)类的定义设计窗口

15、类typedef struct _WNDCLASS UINT style; /窗口变化时重画方式 WNDPROClpfnWndProc; /窗口过程类型 int cbClsExtra; /类的附加信息 int cbWndExtra; /窗口附加信息 HANDLE hInstance; /当前应用程序实例号 HICON hIcon; /图标句柄 HCURSOR hCursor; /加载的光标类型 HBRUSH hbrBackground; /窗口的背景画刷句柄 LPCTSTR lpszMenuName; /设置菜单 LPCTSTR lpszClassName; /窗口类名字 WNDCLASS;

16、共六十七页363 Windows程序(chngx)基本结构 WinMain函数初始化窗口(chungku)类的定义WNDCLASS wintest;wintest.cbClsExtra=0; /类的附加信息,通常为0wintest.cbWndExtra=0; /窗口的附加信息,通常为0wintest.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);wintest.hCursor=LoadCursor(NULL,IDC_CROSS); /光标句柄wintest.hIcon=LoadIcon(NULL,IDI_ERROR); /图标句柄winte

17、st.hInstance=hInstance; /当前应用程序实例号wintest.lpfnWndProc=WndProc; /窗口过程wintest.lpszClassName=“winTest”; /窗口类名字wintest.lpszMenuName=NULL; /菜单名字wintest.style=CS_HREDRAW | CS_VREDRAW; /水平/垂直重画共六十七页373 Windows程序基本(jbn)结构 WinMain函数初始化wintest.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);共六十七页383 Windows

18、程序基本(jbn)结构 WinMain函数初始化wintest.hCursor=LoadCursor(NULL,IDC_CROSS);共六十七页393 Windows程序(chngx)基本结构 WinMain函数初始化wintest.hIcon=LoadIcon(NULL,IDI_ERROR);共六十七页403 Windows程序基本结构(jigu) WinMain函数初始化注册(zhc)窗口类:向操作系统注册(zhc)窗口类型RegisterClass(&wintest);if(!RegisterClass( &wintest)/如果注册失败则发出警告 MessageBeep(0) ; re

19、turn FALSE ;共六十七页413 Windows程序基本(jbn)结构 WinMain函数初始化创建(chungjin)窗口HWND CreateWindow( LPCTSTR lpszClassName,窗口类名 LPCTSTR lpszTitle, 窗口标题名 DWORD dwStyle, 创建窗口的样式 int x,y, 窗口左上角坐标 int nWidth,nHeight, 窗口宽度和度高 HWND hwndParent, 该窗口的父窗口句柄 HMENU hMenu, 窗口主菜单句柄 HINSTANCE hInstance, 创建窗口的应用程序当前句柄 LPVOID lpPar

20、am 指向一个传递给窗口的参数值的指针)共六十七页423 Windows程序基本(jbn)结构 WinMain函数初始化创建(chungjin)窗口共六十七页433 Windows程序基本(jbn)结构 WinMain函数初始化创建(chungjin)窗口hwnd=CreateWindow(lpszClassName,/窗口类名 lpszTitle,/窗口实例的标题名 WS_OVERLAPPEDWINDOW,/窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT,/窗口左上角坐标为缺省值 CW_USEDEFAULT, CW_USEDEFAULT,/窗口的高和宽为缺省值 NULL

21、,/此窗口无父窗口 NULL,/此窗口无主菜单 hInstance,/创建此窗口的应用程序的当前句柄 NULL /不使用该值);#define WS_OVERLAPPEDWINDOW(WS_OVERLAPPED | /产生层叠窗口WS_CAPTION|/创建有标题栏窗口WS_SYSMENU| /创建有系统菜单窗口WS_THICKFRAME| /创建边框可调窗口WS_MINIMIZEBOX| /创建最小化窗口WS_MAXIMIZEBOX) /创建最大化窗口共六十七页443 Windows程序(chngx)基本结构 WinMain函数初始化显示和更新窗口显示窗口:显示指定窗口状态(zhungti)

22、ShowWindow(hwnd,SW_SHOWNORMAL);更新窗口:刷新并绘制用户区窗口UpdateWindow(hwnd);共六十七页453 Windows程序(chngx)基本结构 WinMain函数消息循环消息循环应用程序通常有一段代码称为消息循环,又称为消息泵,形式(xngsh)如下MSG msg;/从消息队列中提取消息while (GetMessage(&msg, NULL, NULL, NULL) TranslateMessage(&msg); /消息解释,如字符键的处理DispatchMessage(&msg); /将消息传送到指定窗口函数 / 以上出现的函数都是 Windo

23、ws API 函数共六十七页463 Windows程序基本(jbn)结构 WinMain函数消息循环消息循环中:函数GetMessage形式为:GetMessage( lpMSG, /指向MSG结构(jigu)的指针 hwnd, /窗口句柄,NULL表示任何窗口 nMsgFilteMin, /用于消息过滤的最小消息值 nMsgFilterMax /用于消息过滤的最大消息号值 )例:while( GetMessage(&Msg, NULL, 0, 0)表示接收所有消息共六十七页473 Windows程序基本结构 WinMain函数消息(xio xi)循环GetMessage返回值BOOL类型(l

24、ixng)若消息队列中有消息,则返回值总为真。当收到WM_QUIT消息,程序结束,退出循环MSG msg;/从消息队列中提取消息while (GetMessage(&msg, NULL, NULL, NULL) TranslateMessage(&msg); /消息解释,如字符键的处理DispatchMessage(&msg); /将消息传送到指定窗口函数共六十七页483 Windows程序基本(jbn)结构 WinMain函数消息循环TranslateMessage函数消息解释、对收到的消息进行转换例:WM_KEYDOWN和KEYUP转为WM_CHAR消息DispatchMessage函数负

25、责将消息分发给窗口过程(guchng)函数窗口过程函数赋值对消息进行处理共六十七页493 Windows程序基本结构 WinMain函数(hnsh)消息循环当建立应用程序时,操作系统为其分配一个消息队列,放入消息应用程序利用GetMessage从消息队列中取出具体消息,对其进行(jnxng)预处理(如利用TranslateMessage函数进行消息转换)应用程序调用DispatchMessage,将消息传给操作系统操作系统利用窗口类中指定的窗口过程函数,对消息进行处理消息队列应用程序窗口过程操作系统GetMessageDispatchMessage共六十七页503 Windows程序(chng

26、x)基本结构程序入口函数WinMain函数原型窗口初始化(窗口类定义、注册窗口类、 创建窗口、显示窗口)消息循环窗口过程(guchng)函数函数原型消息响应共六十七页513 Windows程序基本结构 窗口(chungku)过程函数WndProc窗口函数是程序和用户交互的主要处理部分WndProc函数由一个或多个switch语句组成每条case语句对应(duyng)一种消息当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。窗口过程函数WndProc包含了对各种可能接收到的消息的处理过程定义了应用程序对接收到的不同消息的响应共六十七页523 Windows程序基本结构

27、(jigu) 窗口过程函数函数(hnsh)原型LRESULT CALLBACK WndProc( HWND hwnd, 窗口句柄UINT messgae, 消息代码WPARAM wParam,消息代码附加参数LPARAM lParam,消息代码附加参数)共六十七页窗口函数(hnsh)的一般形式如下:LRESULT CALLBACK WndProc(HWND hwnd,UINT messgae, WPARAM wParam,LPARAM lParam ) switch(message) message为标识的消息 case break; case WM_DESTROY: PostQuitMess

28、age(0); default: return DefWindowProc(hwnd,message,wParam,lParam); return(0);在消息处理程序段中一般都有对WM_DESTROY的处理,该消息是关闭(gunb)窗口时发出的。它向应用程序发出WM_QUIT消息,请求退出处理函数:void PostQuitMessage(int nExitCode)为未定义处理过程的消息提供缺省处理共六十七页54内容提要(ni rn t yo)1、Windows编程概述2、基本概念3、Windows程序基本(jbn)结构4、程序示例共六十七页554 程序(chngx)示例基本的WINDOW

29、S应用程序例:编写一个简单(jindn)的windows程序,只有基本框架代码,没有具体功能。共六十七页564 程序(chngx)示例第一步:建立一个新的工程(1)启动Visual Studio,选择菜单项“文件”点击“新建-项目”,在弹出窗口中项目类型选择“win32”,继续(jx)选择“win32项目”,为项目起名“Draw”。共六十七页574 程序(chngx)示例第一步:建立一个新的工程(gngchng)(2)点击“确定”后,在弹出窗口中进行“应用程序设置”,选择“windows应用程序”,选中“空项目”,然后点击“完成”。共六十七页584 程序(chngx)示例第二步:设置(shzh

30、)字符集(1)在生成的解决方案名称上,单击鼠标右键,在弹出的菜单条上,选择“属性”共六十七页594 程序(chngx)示例第二步:设置字符集(2)在弹出的窗口(chungku)中,选择“配置属性”=“常规”点击“字符集”右侧下拉框选中“未设置”然后“确定”。共六十七页604 程序(chngx)示例第三步:为工程添加源文件/头文件。包含头文件:#include #include windows.husing namespace std;添加WinMain函数(hnsh)和窗口过程函数(hnsh)共六十七页614 程序(chngx)示例步骤窗口函数原型:窗口初始化:窗口类定义:注册(zhc)窗口类

31、:创建窗口:显示窗口:更新窗口:消息循环:窗口过程函数WinMain函数WNDCLASS wndclass ;wndclass.style=0;RegisterClass函数CreateWindow函数ShowWindow函数UpdateWindow函数while( GetMessage(&Msg, NULL, 0, 0)LRESULT CALLBACK WndProc函数共六十七页4、程序(chngx)示例#include/包含应用程序中所需的数据类型和数据结构的定义LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); /窗口函数说明(shum

32、ng)/- 以下初始化窗口类 -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; char lpszClassName = 窗口;/窗口类名 char lpszTitle= My_Windows;/窗口标题名共六十七页 /窗口(chungku)类的定义wndclass.style=0;/窗口类型为缺省类型wndclass.lpfnWndProc=WndProc;/定义窗口处理函数

33、wndclass.cbClsExtra=0;/窗口类无扩展wndclass.cbWndExtra=0;/窗口实例无扩展wndclass.hInstance=hInstance;/当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/窗口的最小化图标为缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;/窗口采用箭头光标wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);/窗口背景为白色wndclass.lpszMenuName=NULL;/窗口中无菜单wndclass.lpszClassName=lpszClassName ;/窗口类名为窗口共六十七页 /- 以下进行窗口类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论