您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > VC++6.0使用MFC创建应用程序框架操作步骤
CAsyncSocket类的应用实例•实现目标•应用实例是一个简单的聊天室程序,采用C/S模式,分为客户端程序和服务器端程序。•由于服务器只能支持一个客户,实际是一个点对点通信的程序。•客户端程序和服务器程序通过网络交换聊天的字符串内容,并在窗口的列表框中显示。•实例程序的技术要点:•如何从CAsyncSocket类派生出自己的WinSock类。•理解WinSock类与应用程序框架的关系。•重点学习流式套接字对象的使用。•处理网络事件的方法。•实例简单,但能说明网络编程的许多问题。下面结合它详细说明MFC编程的细节。创建客户端程序1.使用MFCAppWizard创建服务器端应用程序框架。2.为对话框界面添加控件对象3.为对话框中的控件对象定义相应的成员变量4.创建从CAsyncSocket类继承的派生类5.为CAsyncSocket类继承的派生类添加控件对象事件的响应函数6.为对话框类添加控件对象事件的响应函数7.为CTalkcDlg对话框类添加其它的成员函数和成员变量8.手工添加代码•创建客户端应用程序,采用对话框架构1.使用MFCAppWizard创建客户端应用程序框架。(1)在New对话框中,选择Projects卡,如图所示。选MFCAppWizard(exe),在ProjectName处填入工程名Talkc,在Location处选定存放此工程的目录。然后点击OK按钮。(2)出现MFCAppWizard设置的第一步对话框(MFCAppWizard–Step1),如图所示。从中选择Dialogbased的应用程序类型,语言支持选择中文(中国),使此工程能够正确地进行中文的输入、输出、显示及处理。然后点击NEXT按钮。(3)出现MFCAppWizard设置的第二步对话框(MFCAppWizards–Step2of4),如图所示,在WindowsSockets复选框上打上选择标记,表示应用程序将支持WinSock套接字。接受其它的默认设置。跳过后面的步骤,直接点击Finsh按钮。(4)出现新工程信息对话框(NewProjectInformation),说明了所创建的骨架工程的有关信息。如图所示。所创建的程序是一个基于对话框的Win32应用程序,将自动创建两个类:应用程序类CTalkcApp,对应的文件是talkc.h和talkc.cpp;对话框类CTalkcDlg,对应的文件是talkcDlg.h和talkcDlg.cpp。支持WindowsSocket使用共享的DLL实现MFC42.DLL。2.为对话框界面添加控件对象•在创建了应用程序骨架之后,可以布置程序的主对话框。•在MFC界面左方的工作区(workspace)中选择resourceView卡,从中选择Dialog,双击IDD_TALKC_DIALOG,右边会出现对话框,会出现控件面板。•利用控件面板可以方便地在程序的主对话框界面中添加相应的可视控件对象,如图所示。在主对话框中添加控件对话框中的控件属性按照下表修改控件属性。图Talkc程序的主对话框控件类型控件IDCaption静态文本statictextIDC_STATIC_SERVNAME服务器名称静态文本statictextIDC_STATIC_SERVPORT服务器端口静态文本statictextIDC_STATIC_MSG消息静态文本statictextIDC_STATIC_SENT发送的消息静态文本statictextIDC_STATIC_RECEIVED接收的消息编辑框editboxIDC_EDIT_SERVNAME编辑框editboxIDC_EDIT_SERVPORT编辑框editboxIDC_EDIT_MSG命令按钮buttonIDC_BUTTON_CONNECT连接命令按钮buttonIDC_BUTTON_CLOSE断开命令按钮buttonIDOK发送列表框listboxIDC_LIST_SENT列表框listboxIDC_LIST_RECEIVED表Talkc程序主对话框中的控件属性3.为对话框中的控件对象定义相应的成员变量•在窗口菜单中点查看/建立类向导,进入类向导(ClassWizard)对话框,如图。•选择成员变量卡(MemberVariables),用类向导为对话框中的控件对象定义相应的成员变量。确认ClassName是CTalkcDlg,在左边的列表框中选择一个控件,然后点“AddVariable”按钮,会弹出”AddMemberVariable”对话框,如图所示,然后按照表输入即可。图增加控件成员变量的对话框表客户端程序对话框中的控件对象对应的成员变量控件IDControlIDs变量名称MemberVariableName变量类别Category变量类型VariableTypeIDC_BUTTON_CONNECTm_btnConnectControlCButtonIDC_EDIT_SERVNAMEm_strServNameValueCStringIDC_EDIT_SERVPORTm_nServPortValueintIDC_EDIT_MSGm_strMsgValueCStringIDC_LIST_SENTm_listSentControlCListBoxIDC_LIST_RECEIVEDm_listRecetvedControlCListBox定义了一个枚举变量IDD,值为IDD_TALKC_DIALOG。这个对话框类就是通过这个IDD和对话框资源建立了联系。CTalkcDlg类的构造函数类向导生成的对话框控件和对应的控件变量的映射语句把控件ID与类的成员变量匹配起来4.创建从CAsyncSocket类继承的派生类(1)为了能够捕获并响应socket事件,应创建用户自己的套接字类,它应当从CAsyncSocket类派生,还能将套接字事件传递给对话框,以便执行用户自己的事件处理函数。选择菜单“插入/类…”,进入“NewClass”对话框,如图所示。图添加自己的套接字类•选择或输入以下信息:ClassType:选择MFCClassClassInfoumation下的Name:输入CMySocketClassInfoumation下的Baseclass:选择CAsyncSocket•点击“OK”按钮,系统会自动生成CMySocket类对应的包含文件MySocket.h和MySocket.cpp文件。•在VC界面的ClassView中就可以看到这个类。类CMySocket的定义CMySocket的构造函数CMySocket的析构函数(2)利用类向导ClassWizard为这个套接字类添加响应消息的事件处理成员函数。•点菜单View/ClassWizard...,进入类向导对话框,选择MessageMaps(消息映射)卡,确认Classname是CMySocket,从Messages(消息)栏中选择事件消息,然后点击AddFunction按钮,就会看到在MemberFunction栏中添加了相应的事件处理函数。•如图所示,此程序中需要添加OnConnect,OnClose和OnReceive三个函数。这一步会在CMySocket类的MySocket.h中自动生成这些函数的声明,在MySocket.cpp中生成这些函数的框架,以及消息映射的相关代码。可参看后面的程序清单。图为套接字类添加响应消息的事件处理成员函数(3)为套接字类添加一般的成员函数和成员变量•在VC++的界面中,在工作区窗口选择ClassView卡,用右键单击CMySocket类,会弹出快捷菜单,选择其中的AddMemberFunction可以为该类添加成员函数;选择AddMemberVariable可以为该类添加成员变量。对这个套接字类,添加一个私有的成员变量:对话框类的指针。private:CTalkcDlg*m_pDlg;图为套接字类添加一般的成员变量再添加一个成员函数:voidSetParent(CTalkcDlg*pDlg);这一步同样会在MySocket.h中生成变量或函数的声明,在MySocket.cpp中生成函数的框架代码。如果熟悉的话,这一步的代码也可以直接手工添加。(4)手工添加其他代码•在VC++的界面中,在工作区窗口选择FileView卡,双击要编辑的文件,在右面的窗口中就会展示该文件的代码,可以编辑添加。•对于MySocket.h,应在文件开头,添加对于此应用程序对话框类的声明。classCTalkcDlg;对于MySocket.cpp,有四处添加:①应在文件开头,添加包含文件说明。这是因为此套接字类用到了对话框类的变量。#include“TalkcDlg.h”②在构造函数中,添加对于对话框指针成员变量的初始化代码:CMySocket::CMySocket(){m_pDlg=NULL;}③在析构函数中,添加对于对话框指针成员变量的终止处理代码:CMySocket::~CMySocket(){m_pDlg=NULL;}④为成员函数setParent和事件处理函数OnConnect,OnClose和OnReceive添加代码。详见后面的程序清单。5.为对话框类添加控件对象事件的响应函数按照表,用类向导(ClassWizard)为对话框中的控件对象添加事件响应函数。主要是对于三个按钮的单击事件的处理函数,如图所示。其他函数是原有的。表为对话框中的控件对象添加事件响应函数控件类型对象标识ObjectIDs消息Messages函数Memberfunctions命令按钮IDC_BUTTON_CLOSEBN_CLICKEDOnButtonClose命令按钮IDC_BUTTON_CONNECTBN_CLICKEDOnButtonConnect命令按钮IDOKBN_CLICKEDOnSendMsg图为对话框类添加控件事件的处理函数这一步会在talkcDlg.h中自动添加这三个事件处理函数的声明,在talkcDlg.cpp中生成消息映射的代码,和这三个函数的框架代码。6.为CTalkcDlg对话框类添加其它的成员函数和成员变量成员变量:CMySocketm_sConnectSocket;//用来与服务器端连接的套接字。成员函数:voidOnClose();//用来处理与服务器端的通信。voidOnConnect();voidOnReceive();7.手工添加的代码•在CTalkcDlg对话框类的talkcDlg.h中添加对于MySocket.h的包含命令,来获得对于套接字支持:#include“MySocket.h”•在CTalkcDlg对话框类的talkcDlg.cpp中添加对于控件变量的初始化代码://TODO:Addextrainitializationhere//用户添加的控件变量的初始化代码BOOLCTalkcDlg::OnInitDialog(){m_strServName=“127.0.0.1;m_nServPort=1000;//服务端口=1000UpdateData(FALSE);//更新用户界面//设置套接字类的对话框指针成员变量m_sConnectSocket.SetParent(this);}8.添加事件函数和成员函数的代码主要在CTalkcDlg对话框类的talkcDlg.cpp中和CMySocket类的Mysocket.cpp中,添加用户自己的事件函数和成员函数的代码,要注意,这些函数的框架已经在前面的步骤中,由VC++的向导生成,只要将用户自己的代码填入其中即可。9.进行测试。测试应分步进行,在上面的步骤中,每作一步,都可以试着编译执行。3客户端程序的类与消息驱动图Talkc客户端程序的类与消息驱动的关系客户机端的类与消息驱动•程序运行后,经过初始化处理,向用户展示对话框,然后进入消息循环,通过消息引发相应类的事件处理函数的执行,从而完成程序的功能。•主要有两类消息:套接字类接收来自网络的消息;对话框类来自用户操作对话框的消息。•m_sConnectSocket变量所代表的CM
本文标题:VC++6.0使用MFC创建应用程序框架操作步骤
链接地址:https://www.777doc.com/doc-3824331 .html