6. 说明应用程序、文档模板、边框窗口、视图和文档等的创建关系。 p.121(创建的前后顺序)
答:①应用程序是全局对象,在启动程序之前构造;
②应用程序创建文档模板; ③文档模板创建文档和边框窗口; ④边框窗口创建视图。
7. MFC应用程序的执行分为哪三个阶段?每个阶段主要做什么? 答:MFC应用程序的执行分为三个阶段: (1)应用程序启动和初始化阶段:
MFC程序在该阶段(主要在应用程序类的InitInstance()中)创建MFC对象和Windows对象、建立各种对象之间的关系,并把窗口显示在屏幕上; (2)与用户交互阶段:
MFC程序在该阶段会产生各种消息,经主程序的消息循环发送到操作系统,操作系统找到相应类中该消息对应的消息处理回调函数,执行用户程序的各种交互响应功能; (3)程序退出和清理阶段:
MFC程序在该阶段,关闭窗口、销毁所创建的Windows对象和MFC对象。
8. 以一个SDI界面的应用程序Test为例,说明该MFC程序由哪几个类构成,简述其启动、运行、退出的工作过程。
答:以一个SDI界面的应用程序Test为例,该MFC应用程序由应用程序类CTestApp、框架窗口类CMainFrame、文档类CTestDoc、视图类CTestView组成,其启动、运行、退出过程如下图所示,同样经历上题所述的三个阶段。
在阶段(1)应用程序启动和初始化阶段:
①先实例化CTestApp类的应用程序全局对象theApp;
②然后启动执行WinMain() ,该函数在隐藏的MFC框架程序中;
③在WinMain()中,该函数先取得本应用程序对象的指针 pApp,此后会执行AFX内部初始化AfxWinInit()、应用程序全局初始化InitApplication(),然后,执行该应用程序实例对象自己特定的初始化InitInstance(),用户在此可重载该虚拟函数,做诸如创建文档模板、框架窗口、文档、视图, 建立它们之间的关联、显示窗口、更新窗口等窗口程序初始化工作;
④然后,在WinMain()中执行消息循环Run(),等待接收消息。 在阶段(2)与用户交互阶段:
用户操作程序运行时会产生各种消息,由主程序WinMain()中执行的消息循环Run(),会接收、转换、发送这些消息到操作系统,操作系统找到相应类中这个消息对应的消息处理回调函数,执行各种消息的处理,作出与用户交互的响应。
在阶段(3)程序退出和清理阶段:
①如用户单击主窗口的关闭按钮,会产生ID_APP_EXIT消息,相应执行消息处理函数CWinApp::OnAppExit(),会向主窗口发送WM_CLOSE消息;
②主窗口收到WM_CLOSE消息,相应执行消息处理函数CFrameWnd::OnClose(),在该函数中会处理各类边框窗口的关闭,还涉及到关闭相关的文档、销毁相关的窗口,关闭窗口后,发送WM_QUIT消息;
③在WinMain()中执行的消息循环Run()中收到WM_QUIT消息后,则执行 退出处理函数ExitInstance(),用户可重载此函数, 如删除自己的对象(注意: MFC可以自动删除标准对象,如文档、视图和窗口框架等),退出消息循环,进而退出整个MFC应用程序。
9. 消息循环的过程是什么? p.124-125, 及图4.7
在主进程的消息循环中,调用PeekMessage()函数来获取消息,若没有消息,则进行空闲Idle处理(执行OnIdle空闲处理函数),然后用PumpMessage()函数来转换消息和发送消息给操作系统,若消息是WM_QUIT消息,则调用ExitInstance()函数后退出消息循环。
10. 应用程序的退出过程是什么? p.126
答:下面以单击主窗口的关闭按钮为例,来说明应用程序退出的过程。
1)用户单击主窗口的关闭按钮,导致发送MFC发送标准命令消息ID_APP_EXIT,于是MFC
调用相应的CWinApp::OnAppExit()消息处理函数来完成对该命令消息的缺省处理,主要是向主窗口发送WM_CLOSE消息。
2)主窗口处理WM_CLOSE消息,于是MFC调用相应的CFrameWnd::OnClose()消息处理函
数,在该函数中处理各类边框窗口的关闭,还涉及到关闭相关的文档、销毁相关的窗口,关闭窗口后,发送WM_QUIT消息。
3)消息循环中收到WM_QUIT消息后,退出消息循环,进而退出整个应用程序。
第五章 MFC WinSocket类的编程
1.使用CAsyncSocket类的一般步骤是什么?
答:CAsyncSocket类是异步套接字类。使用的一般步骤如下: 序号 1 服务器(Server) //构建一个套接字 CAsyncSocket sockSrvr; 2 客户机(Client) //构建一个套接字 CAsyncSocket sockClient; //创建SOCKET句柄,绑定到指定的端//创建SOCKET句柄,使用默认口 sockSrvr.Create(nPort); 参数 sockClient.Create(); 3 //启动监听,时刻准备接受连接请求 sockSrvr.Listen(); 4 //请求连接到服务器 sockClient.Connect(strAddr,nport); 5 //构造一个新的空的套接字 CasyncSocket sockRecv; //接收连接 sockSrvr.Accept(sockRecv); 6 //接收数据 sockSrvr.Receive(pBuf,nLen); //发送数据 sockClient.Send(pBuf,nLen); //接收数据 sockClient.Receive(pBuf,nLen); //关闭套接字对象 sockClient.Close(); 7 //发送数据 sockSrvr.Send(pBuf,nLen); 8 //关闭套接字对象 sockSrvr.Close();
2.CAsyncSocket类可以接受并处理哪些消息事件?当这些网络事件发生时,MFC框架作何处理?(消息机制)
答:MFC套接字对象可以接受并处理的六种网络事件: (1)FD_READ事件通知:通知输入缓冲区中有数据可读。 (2)FD_WRITE事件通知:通知输出缓冲区已腾空,可以写数据。
(3)FD_ACCEPT事件通知:通知服务器端的监听套接字有连接请求可以接受。 (4)FD_CONNECT事件通知:通知客户端的请求连接的套接字,连接的要求已被处理。 (5)FD_CLOSE事件通知:通知套接字已关闭。 (6)FD_OOB事件通知:通知将有带外数据到达
处理:按照Windows的消息驱动机制,MFC框架应当把消息发送给相应的套接字对象,并调用作为该对象成员函数的事件处理函数。事件与处理函数是一一映射的。
在afxSock.h文件中的CAsyncSocket类的声明中,定义了与这六个网络事件对应的事件处理函数:
对应FD_READ事件,处理函数为OnReceive(); 将接收数据。 对应FD_WRITE事件,处理函数为OnSend(); 将发送数据。
对应FD_ACCEPT事件,处理函数为OnAccept(); 服务器端将接受待决的连接请求。 对应FD_CONNECT事件,处理函数为OnConnect(); 此时客户端将可使用该连接来传输
数据。
对应FD_CLOSE事件,处理函数为OnClose(); 将做该套接字被关闭时本方应做的结束善
后工作。
对应FD_OOB事件,处理函数为OnOutOfBandData();将会在逻辑上独立的带外通道上接
收带外数据。
3.CSocket类如何通过CArchive对象来进行数据传输?
答:使用CSocket类的最大优点在于,应用程序可以在连接的两端通过CArchive对象来进行数据传输。CSocket类是同步套接字类,提供阻塞调用。同时用CSocket类时,必须使用流式套接字。具体做法是:
(1)创建CSocket类套接字对象
(2)创建基于CSocketFile类的文件对象,并关联到套接字对象(使用已创建的CSocket类对象的指针)。
(3)创建用于输入和输出的CArchive对象,并关联到CSocketFile类文件对象(使用已创建的CSocketFile类对象的指针)。
(4)利用CArchive对象来发送和接收数据。
4.说明CSocket类的编程模型。
答:下面给出针对流式套接字的CSocket类的编程模型: 服务器端:
(1)CSocket sockServ; // 创建空的服务器端监听套接字对象。 (2)sockServ.Create( nPort );
// 用众所周知的端口,创建监听套接字对象的底层套接字句柄。 (3)sockServ.Listen(); // 启动对于客户端连接请求的监听。 (4)CSocket sockRecv; // 创建空的服务器端连接套接字对象。 sockServ.Accept( sockRecv);
// 接收客户端的连接请求,并将其他的任务转交给连接套接字对象。 (5)CSocketFile* file ;
file = new CSocketFile( &sockRecv); //创建文件对象并关联到连接套接字对象。 (6)CArchive* arIn, arOut;
arIn = CArchive(&file, CArchive::load); // 创建用于输入的归档对象, arOut = CArchive( &file, CArchive::store); // 创建用于输出的归档对象。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库《网络程序设计》期末总复习_最新版 苏大(3)在线全文阅读。
相关推荐: