局域网监控系统详细设计.doc_第1页
局域网监控系统详细设计.doc_第2页
局域网监控系统详细设计.doc_第3页
局域网监控系统详细设计.doc_第4页
局域网监控系统详细设计.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

详细设计说明书详细设计说明书1引言11.1编写目的11.2定义22总体设计22.1软件结构23程序描述33.1客户端设计33.1.1客户端模块概述33.1.2 客户端技术分析33.1.3客户端实现过程33.2公共类设计93.3系统登录模块设计103.3.1 系统登陆模块概述103.3.2 系统登录模块实现过程。103.4主窗体设计123.4.1 主窗体概述123.4.2 主窗体技术分析133.5操作员管理模块173.5.1操作员管理模块概述173.5.2 操作员管理模块技术分析183.6系统设置模块设计233.6.1 系统设置模块概述233.6.2 系统设置模块技术分析233.6.3 系统设置模块实现过程231引言1.1编写目的详细设计的编写主要面向于程序开发人员及测试人员,给予各部功能的详细说明及源码,以便于程序开发人员及测试人员进行相关工作。1.2定义套接字:套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端面点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。常用的TCP/IP协议的3种套接字类型如下所示。 流套接字(SOCK_STREAM): 流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。 数据包套接字(SOCK_DGRAM):数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据包套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。 原始套接字(SOCK_RAW):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据包套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据包套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。2总体设计2.1软件结构服务器端客户端系统设置操作员管理系统登录主窗体主窗体3程序描述3.1客户端设计3.1.1客户端模块概述 局域网监控系统分为客户端和服务器端两大模块,其中,客户端主要作用是时时抓取本机的屏幕信息,将其分成多个数据报,发送到服务器。为保证屏幕信息能够完整的发送到服务器,客户端在发送一个数据报后,需要等待服务器发来确认消息,然后继续发送下一个数据报。3.1.2 客户端技术分析 客户端要实现屏幕信息的发送,需要解决两个关键问题:一是获取屏幕信息,将其转换为位图格式;二是通过UDP协议将位图信息发送到服务器。3.1.3客户端实现过程(1)创建一个基于对话框的工程,工程名为Client。(2)在StdAfx.h头文件中引用套接字库和头文件。#include Winsock2.h#pragma comment (lib,Ws2_32.lib)(3)在应用程序类的InitInstance方法中初始化套接字。WSADATA data;WSAStartup(2,&data);(4)改写应用程序的虚方法ExitInstance,清理套接字资源。int CClientApp:ExitInstance() WSACleanup();return CWinApp:ExitInstance();(5)在对话框中添加如下成员变量。SOCKET m_Socket;/客户端套接字CString m_ServerIP;/服务器IPint m_X,m_Y;/抓取屏幕的起始坐标WORD m_RecvX,m_RecvY;/收到服务器发来的抓取屏幕的起始坐标BOOLm_Confirm;/确认信息int m_FrameIndex;/记录索引int mod;/记录余数int count;/每一个位图分报的数量int bmpsize;/位图的实际大小char*pSendBuf;/发送缓冲区指针char*pHeader;/临时指针sockaddr_in addr1;/套接字地址BOOL m_Received;/是否接收到服务器发来的确认信息int m_Counter;/记数器(6)自定义一个消息,在套接字接收到数据时发送到主窗口中。定义每个数据报中包含位图数据的大小。/自定义一个消息#define CM_RECEIVED WM_USER+2/定义每个数据报中包含位图数据的大小#define GraphSize 1024(7)在对话框初始化时创建套接字,将其绑定到指定的位置,并初始化相应的成员变量。BOOL CClientDlg:OnInitDialog()/获取本机IPhostent* phost = gethostbyname();char* localIP =inet_ntoa (*(struct in_addr *)*phost-h_addr_list);sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_addr.S_un.S_addr = inet_addr(localIP);addr.sin_port = htons(5001);/创建套接字m_Socket = socket(AF_INET,SOCK_DGRAM,0);if (m_Socket = INVALID_SOCKET)MessageBox(套接字创建失败!);char* len = 512;if (setsockopt(m_Socket,SOL_SOCKET,SO_SNDBUF,len,4)!= 0)MessageBox(设置失败!);/绑定套接字if (bind(m_Socket,(sockaddr*)&addr,sizeof(addr)=SOCKET_ERROR)MessageBox(套接字绑定失败!);m_ServerIP= ;GetPrivateProfileString(ServerInfo,IP,,m_ServerIP.GetBuffer(0),MAX_PATH,./Server.ini);WSAAsyncSelect(m_Socket,m_hWnd,CM_RECEIVED,FD_READ);m_X = m_Y = 0;m_RecvX = m_RecvY = 0;m_Confirm = TRUE;pSendBuf = new char1024*1024*2;pHeader = pSendBuf;OnOK();m_Received = FALSE;m_Counter = 0;SetTimer(1,1000,NULL);return TRUE;(8)在对话框类中添加一个SendData方法,用于向指定的地址发送数据。其中,参数index表示数据报的序号,bmpsize表示数据报中位图数据的大小,frames表示总的发送次数,pSendBuf表示发送的数据报,addr表示服务器地址。int CClientDlg:SendData(UINT index, int mod , int bmpsize , int frames,char *pSendBuf, sockaddr_in &addr)char* pPackage;int packsize = 0; if ( mod =0 | index != frames-1)packsize = 2+2+bmpsize+4+2+2+4;else packsize = 2+2+mod+4+2+2+4;pPackage = new charpacksize;memset(pPackage,0,packsize);/填充数据报*(WORD*)&pPackage0 = index;/填充序号if (index != frames-1)/填充结束标记*(WORD*)&pPackage2 = 0;else*(WORD*)&pPackage2 = 1;/填充位图数据pSendBuf+=bmpsize*index;memcpy(&pPackage4,pSendBuf,packsize-16);/填充位图大小*(int*)&pPackagepacksize-12= bmpsize;/填充屏幕X坐标*(WORD*)&pPackagepacksize-8= m_X;/填充屏幕Y坐标*(WORD*)&pPackagepacksize-6= m_Y;/填充数据报大小*(int*)&pPackagepacksize-4 = packsize;m_Confirm = FALSE;int ret = sendto(m_Socket,pPackage,packsize,0,(sockaddr*)&addr,sizeof(addr);delete pPackage;return ret;(9)向对话框中添加OnReceived方法,用于接收服务器端发来的确认信息或控制信息。void CClientDlg:OnReceived()char* pData = new char1024;memset(pData,0,1024);sockaddr_in addr;int factsize =sizeof(sockaddr);int ret = recvfrom(m_Socket,pData,1024,0,(sockaddr*)&addr,&factsize);if (ret != -1)/读取控制指令if (ret = 4) /方向m_RecvX = *(WORD*)&pData0;m_RecvY = *(WORD*)&pData2;else if (ret=8)m_Received = TRUE;m_FrameIndex +=1;if (m_FrameIndex5)m_Counter= 0;OnOK(); /超过5秒没有收到服务器的应答信息,重发数据elsem_Received = FALSE;m_Counter =0;CDialog:OnTimer(nIDEvent);(12)处理对话框的OnOk方法,将屏幕信息转换为位图信息,划分数据报的格式,计算每一个位图信息需要发送多少次数据报,调用SendData方法发送数据。void CClientDlg:OnOK() CDC* pDeskDC = GetDesktopWindow()-GetDC();/获取桌面画布对象CRect rc;GetDesktopWindow()-GetClientRect(rc);/获取屏幕的客户区域int width = 300;/获取屏幕的宽度int height = 300;/获取屏幕的高度CDC memDC;/定义一个内存画布memDC.CreateCompatibleDC(pDeskDC);/创建一个兼容的画布CBitmap bmp;bmp.CreateCompatibleBitmap(pDeskDC,width,height);/创建兼容位图memDC.SelectObject(&bmp);/选中位图对象BITMAP bitmap;bmp.GetBitmap(&bitmap);int panelsize = 0;/记录调色板大小if (bitmap.bmBitsPixelbmiHeader.biBitCount = bitmap.bmBitsPixel;pBInfo-bmiHeader.biClrImportant = 0;pBInfo-bmiHeader.biCompression = 0;pBInfo-bmiHeader.biHeight = height;pBInfo-bmiHeader.biPlanes = bitmap.bmPlanes;pBInfo-bmiHeader.biSize = sizeof(BITMAPINFO);pBInfo-bmiHeader.biSizeImage = bitmap.bmWidthBytes*bitmap.bmHeight;pBInfo-bmiHeader.biWidth = width;pBInfo-bmiHeader.biXPelsPerMeter = 0;pBInfo-bmiHeader.biYPelsPerMeter = 0;m_X = m_RecvX;m_Y = m_RecvY;memDC.BitBlt(0,0,width,height,pDeskDC,m_X,m_Y,SRCCOPY);char* pData = new charbitmap.bmWidthBytes* bitmap.bmHeight;:GetDIBits(memDC.m_hDC,bmp,0,bitmap.bmHeight,pData,pBInfo,DIB_RGB_COLORS);int BufSize = panelsize+ sizeof(BITMAPINFO)+bitmap.bmWidthBytes* bitmap.bmHeight;memcpy(pSendBuf,pBInfo,sizeof(BITMAPINFO);char* pHead = pSendBuf;pSendBuf += sizeof(BITMAPINFO);memcpy(pSendBuf,pData,bitmap.bmWidthBytes* bitmap.bmHeight);pSendBuf = pHead;addr1.sin_family = AF_INET;addr1.sin_port = htons(5002);addr1.sin_addr.S_un.S_addr = inet_addr(m_ServerIP);/定义数据报的格式/*序号2位|结束标记2位|位图数据|位图数据大小4位|屏幕X坐标2位|屏幕Y坐标2位|数据报大小4位*/定义每次发送位图数据的大小bmpsize = GraphSize;/计算每个位图发送的次数count = BufSize / GraphSize;mod = BufSize % GraphSize;if ( mod != 0)count+=1;m_FrameIndex = 0;int ret = SendData(m_FrameIndex,mod,bmpsize,count,pSendBuf,addr1);pSendBuf = pHead;delete pData;LocalFree(pBInfo);pDeskDC-DeleteDC();bmp.DeleteObject();memDC.DeleteDC();3.2公共类设计 在局域网监控系统的服务器端要对数据库进行操作。为了方便管理,将有关数据库的操作封装为一个类CDataManage。该类中包含ADO Connection对象、ADO Command对象和ADO Recordset对象,并提供InitDatabase方法用于构造ADO对象、连接数据库。CDataManage类具体实现如下:(1)在Visual C+工程中的StdAfx.h头文件中导入msado15.dll动态库。#importC:ProgramFilesCommonFilesSystemadomsado15.dllrename_namespace(ADODB) rename(EOF,ADOEof)using namespace ADODB ;(2)创建一个普通类,命名为CDataManage。在该类中添加如下成员变量。_ConnectionPtr m_pConnect;_CommandPtr m_pCommand;_RecordsetPtr m_pRecord;static CString m_ConnectStr;(3)在全局区域初始化静态成员m_ConnectStr。CStrinCDataManage:m_ConnectStr=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=db_Video.mdb;Persist Security Info=False;(4)向CDataManage类中添加InitDatabase方法构造ADO对象,并连接数据库。BOOL CDataManage:InitDatabase()trym_pConnect.CreateInstance(ADODB.Connection);m_pCommand.CreateInstance(ADODB.Command);m_pRecord.CreateInstance(ADODB.Recordset);m_pConnect-ConnectionString = m_ConnectStr.AllocSysString();m_pConnect-Open(,-1);catch(_com_error &err)MessageBox(NULL,数据库初始化失败,提示,MB_ICONINFORMATION);return FALSE;return TRUE;3.3系统登录模块设计3.3.1 系统登陆模块概述为了防止非法用户使用系统,在局域网监控系统的服务器端提供了系统登录模块。在系统启动时,只有输入正确的用户名和密码后才能进入主界面。系统登录模块运行结果如图3.1所示。 图 系统登录模块实现过程。(1)创建一个对话框,在对话框中添加1个图像控件、2个标签、2个编辑框和2个按钮控件。(2)修改对话框类的PretranslateMessage虚方法,当编辑框获得焦点时,按Enter键将控制焦点移动。BOOL CLogin:PreTranslateMessage(MSG* pMsg) if (pMsg-message=WM_KEYDOWN & pMsg-wParam=VK_RETURN )CString str;/获取类名GetClassName(pMsg-hwnd,str.GetBuffer(0),MAX_PATH);if (str=Edit)pMsg-wParam = VK_TAB ;return CDialog:PreTranslateMessage(pMsg);(3)处理登录按钮的单击事件,验证用户密码是否正确。如果正确,关闭对话框并返回IDOK。void CLogin:OnLogin() CString user,password;/获取用户名和密码m_UserName.GetWindowText(user);m_Password.GetWindowText(password);/判断用户名和密码是否为空if (user.IsEmpty() | password.IsEmpty()MessageBox(用户名和密码不能为空,提示);m_UserName.SetFocus();else /用户名和密码不为空_ParameterPtr puser,ppassword;CServerApp* pApp = (CServerApp*)AfxGetApp();/创建参数puser = pApp-m_DataManage.m_pCommand-CreateParameter(user,adVarWChar,adParamInput,100,(_bstr_t)user);ppassword = pApp-m_DataManage.m_pCommand-CreateParameter(password,adVarWChar,adParamInput,100,(_bstr_t)password);/添加参数pApp-m_DataManage.m_pConnect-CursorLocation = adUseServer;pApp-m_DataManage.m_pCommand-ActiveConnection = pApp-m_DataManage.m_pConnect;pApp-m_DataManage.m_pCommand-Parameters-Append(puser);pApp-m_DataManage.m_pCommand-Parameters-Append(ppassword);pApp-m_DataManage.m_pCommand-CommandText = select * from tb_userInfo where username = user and password = password;_RecordsetPtr pRecord= NULL;pRecord = pApp-m_DataManage.m_pCommand-Execute (0,NULL,adCmdText);pApp-m_DataManage.m_pCommand-Parameters-Delete(user);pApp-m_DataManage.m_pCommand-Parameters-Delete(password);if (pRecord !=NULL )try /判断是否能够读取数据CString str =(char*) (_bstr_t)pRecord-GetFields()-GetItem(UserName)-Value;pRecord -Close();catch(.)MessageBox(用户名或密码不正确);m_UserName.SetFocus();pRecord -Close();return;EndDialog(IDOK);elsepRecord -Close();MessageBox(用户名或密码不正确);m_UserName.SetFocus();(4)处理“取消”按钮的单击事件,以IDCANCEL标识结束对话框。void CLogin:OnBtCancle() EndDialog(IDCANCEL);3.4主窗体设计3.4.1 主窗体概述局域网监控系统服务器端主窗体主要用于显示客户端传来的位图信息,并且控制客户端抓图的起始坐标。服务器端主窗体运行效果如下:3.4.2 主窗体技术分析 主窗体主要接收客户端传来的数据,并且向客户端发送确认信息。这里需要使用相关Windows套接字函数进行数据的接收和发送。3.4.3 主窗体实现过程(1)创建一个基于对话框的工程,默认情况下将创建一个对话框,该对话框将成为应用程序的主窗体。(2)向对话框中添加8个按钮控件、2个群组框控件、1个图像控件,设置控件属性表如下所示: 表:主窗体用到的主要控件控件资源ID主要属性设置用途IDC_BACKGROUNDType属性为FrameBorder属性为TRUE显示图像信息IDC_SYSSETTINGCaption属性为系统设置Owner draw属性为TRUE调用系统设置对话框(3)向对话框中添加如下成员变量。SOCKET m_Socket;/定义套接字char*m_BmpData;/位图数据指针char* m_TempData;/临时数据指针char* m_Header;/临时指针BOOL m_ShowBmp;/是否显示位图int m_BmpSize;/记录位图大小int m_RecSize;/实际接收的大小CString m_ClientIP;/客户端IPUINT m_ClientPort;/客户端端口WORD m_LeftTopX;/位图在屏幕中的x轴坐标WORD m_LeftTopY;/位图在屏幕中的y轴坐标(4)向对话框中添加ShowImage方法,显示位图数据。void CServerDlg:ShowImage() if (m_ShowBmp)BITMAPINFO bInfo;memcpy(&bInfo,m_TempData,sizeof(bInfo);int x = bInfo.bmiHeader.biWidth;int y = bInfo.bmiHeader.biHeight;StretchDIBits(m_BK.GetDC()-m_hDC,0,0,x,y,0,0,x,y,&m_TempDatasizeof(BITMAPINFO),&bInfo,DIB_RGB_COLORS,SRCCOPY);(5)向对话框中添加OnReceived方法,用于接收客户端发来的数据。在数据接收后,向客户端发送确认信息。void CServerDlg:OnReceived()/接收数据char* buffer = new charMAX_BUFF;sockaddr_in addr;int factsize =sizeof(sockaddr);int ret = recvfrom(m_Socket,buffer,MAX_BUFF,0,(sockaddr*)&addr,&factsize);if (ret != -1)CString revIP = inet_ntoa(addr.sin_addr);if (revIP != m_ClientIP)delete buffer;return;m_ClientPort = ntohs(addr.sin_port);/记录接收的数据报大小m_RecSize += ret;/读取序号WORD orderID = *(WORD*)&buffer0;WORD endID = *(WORD*)&buffer2;/读取位图大小int bmpsize = *(int*)&bufferret-12;/获取屏幕的X轴坐标m_LeftTopX = *(WORD*)&bufferret-8;/获取屏幕的Y轴坐标m_LeftTopY = *(WORD*)&bufferret-6;/读取结束标记sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_port = htons(m_ClientPort);addr.sin_addr.S_un.S_addr = inet_addr(m_ClientIP.GetBuffer(0);int size = sizeof(addr);/发送确认信息char* pData = Confirm;sendto(m_Socket,pData,8,0,(sockaddr*)&addr,size);if (orderID=0)m_BmpSize = bmpsize;m_BmpData = m_Header;elsem_BmpSize +=bmpsize;memcpy(m_BmpData,&buffer4,bmpsize);m_BmpData += bmpsize;m_ShowBmp = FALSE;if (endID=1)m_ShowBmp = TRUE;m_BmpData = m_Header;memcpy(m_TempData,m_Header,1024*1024);ShowImage() ;m_RecSize = 0;delete buffer;(6)在对话框初始化时创建并绑定套接字,从数据库中读取客户端IP。BOOL CServerDlg:OnInitDialog()CDialog:OnInitDialog();ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);/获取本机IPhostent* phost = gethostbyname();char* localIP =inet_ntoa (*(struct in_addr *)*phost-h_addr_list);sockaddr_in addr;addr.sin_family = AF_INET;addr.sin_addr.S_un.S_addr = inet_addr(localIP);addr.sin_port = htons(5002);/创建套接字m_Socket = socket(AF_INET,SOCK_DGRAM,0);if (m_Socket = INVALID_SOCKET)MessageBox(套接字创建失败!);/绑定套接字if (bind(m_Socket,(sockaddr*)&addr,sizeof(addr)=SOCKET_ERROR)MessageBox(套接字绑定失败!);m_BmpData = new char1024*1024*2;memset(m_BmpData,0,1024*1024*2);m_TempData = new char1024*1024*2;memset(m_TempData,0,1024*1024*2);m_Header = m_BmpData;WSAAsyncSelect(m_Socket,m_hWnd,CM_RECEIVED,FD_READ);m_ShowBmp = FALSE;m_BmpSize = 0;m_RecSize = 0;m_ClientPort = 0;CServerApp* pApp = (CServerApp*)AfxGetApp();CString sql = select * from tb_ClientInfo;pApp-m_DataManage.m_pRecord-CursorLocation = adUseServer;pApp-m_DataManage.m_pRecord-Open(_bstr_t)sql,pApp-m_DataManage.m_pConnect.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);m_ClientIP= ;if (pApp-m_DataManage.m_pRecord-RecordCount0)m_ClientIP = (char*)(_bstr_t)pApp-m_DataManage.m_pRecord-GetFields()-GetItem(0L)-Value;pApp-m_DataManage.m_pRecord-Close();m_LeftTopX= 0;m_LeftTopY= 0;m_BK.SetWindowPos(NULL,0,0,305,305,SWP_NOMOVE);return TRUE; 3.5操作员管理模块3.5.1操作员管理模块概述 操作员管理模块主要用于实现操作员信息的添加、修改、删除。操作员管理模块运行结果如图所示:3.5.2 操作员管理模块技术分析操作员管理模块主要用于实现操作员信息的添加、修改、删除。为了方便用户进行添加、修改、删除操作,在操作员管理窗口显示时会将操作员信息以表格的形式显示出来。这里的表格使用的是MFC提供的CListCtrl类。3.5.3 操作员管理模块实现过程(1)创建一个对话框,向对话框中添加4个标签控件、3个编辑控件、1个群组框控件和1个列表控件,设置主要控件属性如表:操作员管理模块控件主要属性设置控件资源ID主要属性设置用途IDC_PASSPassword属性为TRUE隐藏密码IDC_CONFIRMPASSPassword属性为TRUE隐藏确认密码IDC_LISTINFOView属性为Report列表控件以表格形式显示(2)改写对话框的PreTranslateMessage虚方法,焦点在编辑框中时按Enter键将控制焦点移动。BOOL COprManage:PreTranslateMessage(MSG* pMsg) if (pMsg-message=WM_KEYDOWN & pMsg-wParam=VK_RETURN )CString str;/获取类名GetClassName(pMsg-hwnd,str.GetBuffer(0),MAX_PATH);if (str=Edit)pMsg-wParam = VK_TAB ;return CDialog:PreTranslateMessage(pMsg);(3)向对话框中添加LoadOperatorInfo()void COprManage:LoadOperatorInfo()CServerApp* pApp = (CServerApp*)AfxGetApp();CString sql = select * from tb_userinfo;pApp-m_DataManage.m_pRecord-Open(_bstr_t)sql,pApp-m_DataManage.m_pConnect.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);/清空表格内容m_List.DeleteAllItems();int row = 0;CString user,password;while (! pApp-m_DataManage.m_pRecord-ADOEof)/添加新行m_List.InsertItem(row,0);/设置列文本user = (char*)(_bstr_t)pApp-m_DataManage.m_pRecord-GetFields()-GetItem(0L)-Value;password = (char*)(_bstr_t)pApp-m_DataManage.m_pRecord-GetFields()-GetItem(1L)-Value;m_List.SetItemText(row,0,user);m_List.SetItemText(row,1,password);row+;pApp-m_DataManage.m_pRecord-MoveNext();pApp-m_DataManage.m_pRecord-Close();(4)处理“添加”按钮的单击事件,将编辑框中的文本保存到数据表中。代码首先判断用户信息是否完整,然后验证用户密码,最后判断用户名是否重复,如果不重复,保存这个用户信息。void COprManage:OnBtAdd() CString user,pass,confirm;m_User.GetWindowText(user);m_Pass.GetWindowText(pass);m_Confir

温馨提示

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

评论

0/150

提交评论