网络软件设计消息幻灯片.ppt
《网络软件设计消息幻灯片.ppt》由会员分享,可在线阅读,更多相关《网络软件设计消息幻灯片.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、网络软件设计消息网络软件设计消息第1页,共42页,编辑于2022年,星期二2窗口窗口n n窗口窗口n n窗口的类型和要素窗口的类型和要素n n窗口背后的计算窗口背后的计算第2页,共42页,编辑于2022年,星期二3窗口窗口n n窗口窗口l l与人交互的场所与人交互的场所uu图形化图形化图形化图形化l l窗口与应用程序窗口与应用程序uu配置参数配置参数配置参数配置参数uu不断交互不断交互不断交互不断交互uu结果显示结果显示结果显示结果显示l l窗口与进程窗口与进程uu一一对应一一对应一一对应一一对应uu一个进程打开多个窗口一个进程打开多个窗口一个进程打开多个窗口一个进程打开多个窗口uu一个窗口对
2、应多个进程一个窗口对应多个进程一个窗口对应多个进程一个窗口对应多个进程(多个进程通过一个窗口与人交互多个进程通过一个窗口与人交互多个进程通过一个窗口与人交互多个进程通过一个窗口与人交互)第3页,共42页,编辑于2022年,星期二4窗口类型与要素窗口类型与要素n n窗口类型窗口类型l lConsoleuu文字类型文字类型文字类型文字类型l lWindowuu菜单菜单菜单菜单+用户区域用户区域用户区域用户区域l lDialogl lMessage Boxn n窗口要素窗口要素l l框架框架l l菜单菜单l l按钮按钮l l滚动条滚动条第4页,共42页,编辑于2022年,星期二5窗口背后的计算窗口背
3、后的计算n n窗口程序各不相同窗口程序各不相同l l本质区别是任务不同,计算不同本质区别是任务不同,计算不同l l窗口的每个要件都有相应的程序支撑窗口的每个要件都有相应的程序支撑uu任务的计算程序在哪里?任务的计算程序在哪里?任务的计算程序在哪里?任务的计算程序在哪里?uu计算程序如何将窗口各部分统筹起来?计算程序如何将窗口各部分统筹起来?计算程序如何将窗口各部分统筹起来?计算程序如何将窗口各部分统筹起来?uu窗口计算的程序框架将是怎样的?窗口计算的程序框架将是怎样的?窗口计算的程序框架将是怎样的?窗口计算的程序框架将是怎样的?第5页,共42页,编辑于2022年,星期二6Win32程序开发流程
4、程序开发流程.DLG.DLG.BMP.BMP.ICO.ICO.CUR.CUR.FON.FON.RC.RC.H.H.C.C.OBJ.OBJ.LIB.LIBC runtimeC runtimeDLL ImportDLL Import.DEF.DEFRC compilerRC compilerText EditorText EditorDialog EditorDialog EditorImage EditorImage EditorFont EditorFont EditorC CompilerC CompilerLINKERLINKER.EXE.EXE.RES.RES开始之前开始之前第6页,共4
5、2页,编辑于2022年,星期二7库函数库函数n n库函数的作用库函数的作用库函数的作用库函数的作用l l用户不必关心窗口要件的代码用户不必关心窗口要件的代码用户不必关心窗口要件的代码用户不必关心窗口要件的代码n n动态链接库动态链接库动态链接库动态链接库l l在执行时,才进行链接在执行时,才进行链接在执行时,才进行链接在执行时,才进行链接l l增加程序的可移植性增加程序的可移植性增加程序的可移植性增加程序的可移植性l l节约内存节约内存节约内存节约内存n nWindowsWindows常用的库函数常用的库函数常用的库函数常用的库函数l lC RuntimesC RuntimesC C库函数库函
6、数库函数库函数uuLIBC.LIBLIBC.LIBuuMSVCRT.LIBMSVCRT.LIBl lWindows APIWindows APIuuGDI32.DLLGDI32.DLLuuUSER32.DLLUSER32.DLLuuKERNEL32.DLLKERNEL32.DLLuu其它其它其它其它开始之前开始之前注意:在运行程序时会遇注意:在运行程序时会遇注意:在运行程序时会遇注意:在运行程序时会遇到一些库缺失的错误,到一些库缺失的错误,到一些库缺失的错误,到一些库缺失的错误,只需将这些库找到只需将这些库找到只需将这些库找到只需将这些库找到放到放到放到放到windowswindows系统目录
7、下系统目录下系统目录下系统目录下第7页,共42页,编辑于2022年,星期二8头文件头文件n nwindows.hn nstdafx.hn n其它其它开始之前开始之前注意:当编译时出现找不到函数体错误时,注意:当编译时出现找不到函数体错误时,注意:当编译时出现找不到函数体错误时,注意:当编译时出现找不到函数体错误时,需要包含正确的头文件。需要包含正确的头文件。需要包含正确的头文件。需要包含正确的头文件。如果不知道该包含哪一个时,如果不知道该包含哪一个时,如果不知道该包含哪一个时,如果不知道该包含哪一个时,1 1、可以在、可以在、可以在、可以在VCVC的的的的includeinclude目录下查找
8、目录下查找目录下查找目录下查找2 2、注意头文件的包含顺序、注意头文件的包含顺序、注意头文件的包含顺序、注意头文件的包含顺序第8页,共42页,编辑于2022年,星期二9Windows 程序结构程序结构n n以消息(事件)为基础,以消息(事件)驱动以消息(事件)为基础,以消息(事件)驱动以消息(事件)为基础,以消息(事件)驱动以消息(事件)为基础,以消息(事件)驱动(message basedmessage based,event drivenevent driven)l l为什么窗口程序是事件驱动的为什么窗口程序是事件驱动的uu窗口程序的主要任务是人机交互窗口程序的主要任务是人机交互窗口程序的
9、主要任务是人机交互窗口程序的主要任务是人机交互 除非人主动结束任务。除非人主动结束任务。除非人主动结束任务。除非人主动结束任务。人不断进行各种输入,计算机不断响应人不断进行各种输入,计算机不断响应人不断进行各种输入,计算机不断响应人不断进行各种输入,计算机不断响应程序以程序以程序以程序以whilewhile循环为主体框架循环为主体框架循环为主体框架循环为主体框架 形成形成形成形成“输入输入输入输入”“响应响应响应响应”的程序结构的程序结构的程序结构的程序结构l l窗口程序是怎样进行消息驱动的窗口程序是怎样进行消息驱动的uu各种类型的各种类型的各种类型的各种类型的“输入输入输入输入”,以消息格式
10、存在,以消息格式存在,以消息格式存在,以消息格式存在 GetMessageGetMessage()取走一个消息()取走一个消息()取走一个消息()取走一个消息uu需要响应消息和事件需要响应消息和事件需要响应消息和事件需要响应消息和事件对事件的响应,即事件驱动对事件的响应,即事件驱动对事件的响应,即事件驱动对事件的响应,即事件驱动 DispatchMessageDispatchMessage()处理消息()处理消息()处理消息()处理消息第9页,共42页,编辑于2022年,星期二10Windows 程序结构程序结构n n程序基本结构(算法)程序基本结构(算法)mainmain()()()()wh
11、ile(GetMessage(&msg)while(GetMessage(&msg)ProcessMessage(&msg);ProcessMessage(&msg);主函数主函数主函数主函数消息处理函数消息处理函数消息处理函数消息处理函数ProcessMessage(msg)ProcessMessage(msg)switch(msg)switch(msg)case MSG1:case MSG1:case MSG2:case MSG2:事件事件事件事件第10页,共42页,编辑于2022年,星期二对比对比Windows消息驱动框架与消息驱动框架与select框架框架n n两个框架都具备相同的事件
12、驱动的基本架构两个框架都具备相同的事件驱动的基本架构11mainmain()()()()while(GetMessage(&msg)while(GetMessage(&msg)ProcessMessage(&msg);ProcessMessage(&msg);ProcessMessage(msg)ProcessMessage(msg)switch(msg)switch(msg)case MSG1:case MSG1:case MSG2:case MSG2:send();send();process buf1;process buf1;prepare buf2;prepare buf2;whil
13、e(recv()0)while(recv()0)FD_SET(s,&readfds);FD_SET(s,&readfds);while(select(0,)=0)while(select(0,)=0)if(FD_ISSET(s,&readfds)if(FD_ISSET(s,&readfds)FD_SET(ss,&readfds);FD_SET(ss,&readfds);FD_SET(s,&readfds);FD_SET(s,&readfds);FD_SET(ss,&readfds);FD_SET(ss,&readfds);第11页,共42页,编辑于2022年,星期二12一个具体的窗口程序一个具
14、体的窗口程序WinMainWinMain()()()()初始化;初始化;初始化;初始化;while(GetMessage(&msg)while(GetMessage(&msg)TranslateMessage();TranslateMessage();DispatchMessage();DispatchMessage();系统系统系统系统消息消息消息消息队列队列队列队列WndProc(msg)WndProc(msg)switch(msg)switch(msg)case MSG1:case MSG1:case MSG2:case MSG2:应用应用应用应用程序程序程序程序消息消息消息消息队列队列
15、队列队列mousemousedriverdriverkeyboardkeyboarddriverdriverSendMessage()SendMessage()USERUSERModuleModulemessage frommessage fromOther windowOther windowPostMessage()PostMessage()system第12页,共42页,编辑于2022年,星期二13程序入口点程序入口点 WinMainn nWinMainWinMainWinMain()()()()初始化;初始化;初始化;初始化;创建和显示窗口;创建和显示窗口;创建和显示窗口;创建和显示窗
16、口;建立基于消息的事件驱动机制建立基于消息的事件驱动机制建立基于消息的事件驱动机制建立基于消息的事件驱动机制 WinMainWinMain()()()()RegisterClass();RegisterClass();CreateWindow();CreateWindow();ShowWindow();ShowWindow();UpdateWindow();UpdateWindow();while(GetMessage(&msg)while(GetMessage(&msg)TranslateMessage();TranslateMessage();DispatchMessage();Dispa
17、tchMessage();第13页,共42页,编辑于2022年,星期二14Windows 程序的主要构成程序的主要构成n nWinMainWinMain()程序入口点()程序入口点()程序入口点()程序入口点l l注册窗口注册窗口注册窗口注册窗口 RegisterClass RegisterClass()()()()l l生成并显示窗口生成并显示窗口生成并显示窗口生成并显示窗口 CreateWindow()ShowWindow()CreateWindow()ShowWindow()l l进入消息处理循环进入消息处理循环进入消息处理循环进入消息处理循环简称消息循环简称消息循环简称消息循环简称消息
18、循环n nWndProcWndProc()窗口函数(功能实现)()窗口函数(功能实现)()窗口函数(功能实现)()窗口函数(功能实现)l l区分消息区分消息区分消息区分消息 switch switchl l根据消息触发相应处理根据消息触发相应处理根据消息触发相应处理根据消息触发相应处理l l调用调用调用调用DefWindowProcDefWindowProc()()()()不处理的消息、和需要系统进一步处理的消息不处理的消息、和需要系统进一步处理的消息不处理的消息、和需要系统进一步处理的消息不处理的消息、和需要系统进一步处理的消息如如如如WM_CLOSEWM_CLOSE,使用者关闭了窗口。应用
19、程序获得这个消息后,释,使用者关闭了窗口。应用程序获得这个消息后,释,使用者关闭了窗口。应用程序获得这个消息后,释,使用者关闭了窗口。应用程序获得这个消息后,释放了自己的资源,然后让系统进一步执行关闭窗口的动作放了自己的资源,然后让系统进一步执行关闭窗口的动作放了自己的资源,然后让系统进一步执行关闭窗口的动作放了自己的资源,然后让系统进一步执行关闭窗口的动作思考:怎样根据功能要求思考:怎样根据功能要求思考:怎样根据功能要求思考:怎样根据功能要求生成消息,并把这个消息生成消息,并把这个消息生成消息,并把这个消息生成消息,并把这个消息传递给窗口函数?传递给窗口函数?传递给窗口函数?传递给窗口函数?
20、第14页,共42页,编辑于2022年,星期二15注册窗口类注册窗口类n nRegisterClass()在注册之前可以设置窗口属性,系统会给出一些缺省值,我们重点关心在注册之前可以设置窗口属性,系统会给出一些缺省值,我们重点关心在注册之前可以设置窗口属性,系统会给出一些缺省值,我们重点关心在注册之前可以设置窗口属性,系统会给出一些缺省值,我们重点关心其中的其中的其中的其中的lpfnWndProclpfnWndProc参数参数参数参数WNDCLASS wc;WNDCLASS wc;wc.stvle=;wc.stvle=;wc.lpfnWndProc wc.lpfnWndProc (WNDPROC
21、WNDPROC)WndProc;WndProc;提示系统收到消息后,调该函数处理消息提示系统收到消息后,调该函数处理消息提示系统收到消息后,调该函数处理消息提示系统收到消息后,调该函数处理消息wc.hIcon=wc.hIcon=wc.Cursor=wc.Cursor=wc.hbrBackground=wc.hbrBackground=第15页,共42页,编辑于2022年,星期二16窗口程序的可能结构窗口程序的可能结构WindowsWindows系统系统系统系统消息的处理消息的处理消息的处理消息的处理产生消息产生消息显示显示显示显示在窗口中显示在窗口中显示第16页,共42页,编辑于2022年,星
22、期二17窗口产生窗口产生n nCreateWindow()()n nShowWindow()()n nUpdateWindow()()第17页,共42页,编辑于2022年,星期二18消息循环消息循环while(GetMessage(&msg)while(GetMessage(&msg)TranslateMessage(&msg);/TranslateMessage(&msg);/消息转换消息转换消息转换消息转换 DispatchMessage(&msg);DispatchMessage(&msg);n nGetMessageGetMessage具有阻塞机制具有阻塞机制具有阻塞机制具有阻塞机制l
23、 l当消息队列中没有消息时,程序非忙等,而是让权等待当消息队列中没有消息时,程序非忙等,而是让权等待当消息队列中没有消息时,程序非忙等,而是让权等待当消息队列中没有消息时,程序非忙等,而是让权等待n nDispatchMessageDispatchMessagel l不是直接调用消息处理函数(不是直接调用消息处理函数(不是直接调用消息处理函数(不是直接调用消息处理函数(WndProcWndProc)l l通过通过通过通过USERUSER模块协助,才将消息传递到模块协助,才将消息传递到模块协助,才将消息传递到模块协助,才将消息传递到WndProcWndProcl lWndProcWndProc的
24、调用指示在注册窗口类时,已向系统指明的调用指示在注册窗口类时,已向系统指明的调用指示在注册窗口类时,已向系统指明的调用指示在注册窗口类时,已向系统指明为什么不直接调用?方便系统抓取消息为什么不直接调用?方便系统抓取消息为什么不直接调用?方便系统抓取消息为什么不直接调用?方便系统抓取消息第18页,共42页,编辑于2022年,星期二19窗口函数窗口函数n nWndProc()WndProc(HWND hWnd,UINT message,WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)WPARAM wParam,LPARAM lP
25、aram)HWND hWnd:HWND hWnd:窗口句柄,在与窗口有关的控制中使用窗口句柄,在与窗口有关的控制中使用窗口句柄,在与窗口有关的控制中使用窗口句柄,在与窗口有关的控制中使用UINT messageUINT message:消息(类型):消息(类型):消息(类型):消息(类型)WPARAM wParamWPARAM wParam:传递的参数:传递的参数:传递的参数:传递的参数LPARAM lParamLPARAM lParam:传递的参数传递的参数传递的参数传递的参数在基于消息的机制中,仅有消息是不够的在基于消息的机制中,仅有消息是不够的在基于消息的机制中,仅有消息是不够的在基于消
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络软件 设计 消息 幻灯片
限制150内