飞鸽传书源码详解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

IPMessenger是一款局域网内部聊天、文件传输工具,具有很多优点,如数据通讯不需要建立服务器、直接在两台电脑间通信和数据传输,支持文件及文件目录的传输,安全快捷以及小巧方便等优异特点,因此很多公司都采用它作为部门、公司内部的IM即时通信工具。IPMessenger在程序结构方面采用了WindowsSDK处理结构,通信方面采用了TCP/UDP通信方式,在文件传输处理方面采用文件映射技术,等等。通过分析IPMessenger的运行、工作原理,可以提高并加深对Windows处理流程的理解,提高SOCKET编程技术等,因此特对其源码进行分析,以抛砖引玉,共同提高大家的编程技术。1、IPMessenger源代码的下载在写这篇文章时,IPMessenger的最新版本是2.06,因此大家在下载时尽量选择最新版本下载。IPMessenger源代码的下载地址是,在网站的右上角,点击Englishpage,网站转换到英文界面,网站有英文版以及其它语言的版本,当然还有中文版的链接(),建议大家尽量下载原版的英文版源代码,以利于学习。2、IPMessenger源代码的目录及文件IPMessenger源代码的目录结构及文件详见列表1.1IPMessenger源代码主要的目录及文件:列表1.1IPMessenger源代码主要的目录及文件属性名称描述目录SRC工程文件源代码和INSTALL目录文件IPMSG.MAKVC4及以前版本使用的工程文件,用来指定如何建立一个工程,VC6把MAK文件转换成DSP文件来处理IPMSG.MDP后缀MDP(MicrosoftDevStudioProject的简称)是老版本的项目文件,相当于DSP文件PROT-ENG.TXT英文版的协议描述PROTOCOL.TXT日文版的协议描述README.TXT英文版的READMEREADME-J.TXT日文版的READMEIPMessenger的SRC目录内容描述在列表1.2,SRC目录及主要文件。属性名称描述目录INSTALL安装程序源代码目录文件BLOWFISH.CPP加密算法源文件BLOWFISH.H加密算法头文件BLOWFISH.H2加密算法随机数头文件CFG.CPP系统配置源文件IPMSG.CPPIPMSG的APP源文件IPMSG.HIPMSG头文件LOGDLG.CPP日志DLG源文件LOGMNG.CPP日志处理源文件MAINWIN.CPPIPMessenger主窗口源文件MISCDLG.CPP消息DLG,关于DLG,以及控件子类化等源文件MSGMNG.CPPSocket管理源文件PLUGIN.CPPDllplugin加载源文件RECVDLG.CPP接收消息处理源文件SENDDLG.CPP发送消息处理源文件SETUPDLG.CPPIPMessenger属性配置源文件SHARE.CPP文件传输接收管理源文件TAPP.CPP应用程序类源文件TDLG.CPPDLG类源文件TLIST.CPP链表类源文件TREGIST.CPP注册表操作类源文件TWIN.CPP窗口类源文件MSGSTR.H字符串常量头文件TLIB.H类、结构等头文件另外在SRC目录下,还有一个INSTALL目录,该目录中的文件是IPMessenger安装程序的源代码,其主要文件描述在列表1.3INSTALL目录主要文件。列表1.3INSTALL目录主要文件属性名称描述文件INSTALL.CPP安装程序源文件INSTALL.H安装程序头文件以上是IPMessenger的主要目录及其主要源文件的描述,通过列表我们可以清晰看出IPMessenger的功能分布。在以下的详细分析中,我们主要围绕着这些源文件而展开。3、IPMessenger源代码的工程转换由于IPMessenger是使用以前版本的VC编写的,因此在打开工程文件时,需要转换该工程文件为VC6版本的工程文件。双击打开IPMSG.MDP文件,系统提示转换IPMSG.MAK工程配置文件到VC6下的工程文件,如下图所示。单击“是”按钮,确定将工程转换成VC6的工程。系统提示将MAK工程文件转换成DSP工程文件,如下图所示。单击“确定”按钮,系统根据MAK文件生成IPMSG.DSP文件,以及VC6下的IPMSG.DSW文件,另外系统还生成了IPMSG.NCB和IPMSG.OPT两个文件。4、IPMessenger的工程配置IPMessenger的配置和目前VC6的工程配置有些不同,其安装工程文件和工程文件在混合在一起,不像VC6工程文件,不同的工程在不同的项目下,分别进行配置。单击“Build”菜单,选择“SetActiveConfiguration…”,弹出“SetActiveProjectConfiguration”对话框,如下图所示。IPMessenger的工程配置有6个,分别是Release的英文、日文以及Debug的ipmsg工程和安装工程。通过选择不同的配置,可以编译出不同的工程。根据需要,我们选择ipmsg-Win32Debug配置作为当前活动工程,此编译配置可以编译出Debug版的ipmsg。单击“Project”菜单,选择“Settings…”,弹出“ProjectSettings”对话框,选择“C/C++”标签栏,如下图所示。可以看到,在“Preprocessordefinition:”中,工程使用了“JAPANESE”宏定义,也就是说,编译后的Debug版的ipmsg是日文版。当然,可以根据需要,修改此宏为“ENGLISH”,就可以编译出Debug版的英文ipmsg。5、系统概述完成上述操作之后,就可以使用VC++6来编译、调试IPMessenger。当然,在以后的分析中,我们将分析ipmsg的安装工程,那么就应当选择ipmsg-Win32InstallerDbg配置作为当前活动工程,编译出Debug版的安装工程。(转)IPMSG飞鸽传书——关于对话框2010-05-0911:06TWin是所有窗口的父类,TDlg是对话框子类,处理了WM_INITDILOG等消息,创建过程:首先aboutDlg=newTAboutDlg;然后Create(),最后Show();Create()是TDlg类的函数,首先把当前的TWin对象aboutDlg的指针加入到wndArray中,然后调用SDK函数CreateDialog来完成对话框的创建,然后进入TApp的WinProc,调用TDlg的WinProc函数来处理消息,发送WM_INITDIALOG消息,调用TAboutDlg类的EvCreate函数来处理,接着是Show()函数,发送WM_NCPAINT消息,接着发送WM_PAINT消息,后面是CTLCOLOR消息,调用EventCtlColor()函数来处理(5次)。后面一直发送WM_NCPAINT消息;接下来则是TAboutDlg来处理按钮消息了,按下按钮后会访问指定的网页。处理EvCommand消息,访问IPMSGURL_MSGSTR指定的网页,在msgStr。h文件中有定义:#defineIPMSGURL_MSGSTR是关于对话框,这里仅分析TDlg类和TAboutDlg类的代码://对话框类,TWin的子类classTDlg:publicTWin{protected:LPSTRresName;//资源的名字UINTresId;//资源的idBOOLmodalFlg;//模式对话框还是非模式对话框public:TDlg(LPSTR_name,TWin*_parent=NULL);TDlg(UINTresid,TWin*_parent=NULL);virtual~TDlg();virtualBOOLCreate(HINSTANCEhI=NULL);virtualvoidDestroy(void);virtualintExec(void);virtualvoidEndDialog(int);UINTResId(void){returnresId;}virtualBOOLEvCreate(LPARAMlParam);virtualBOOLEvCommand(WORDwNotifyCode,WORDwID,LPARAMhwndCtl);virtualBOOLEvSysCommand(WPARAMuCmdType,POINTSpos);virtualBOOLEvQueryOpen(void);virtualBOOLPreProcMsg(MSG*msg);virtualLRESULTWinProc(UINTuMsg,WPARAMwParam,LPARAMlParam);};TDlg的实现文件:staticchar*tdlg_id=@(#)Copyright(C)H.Shirouzu1996-2001tdlg.cppVer0.95;/*========================================================================ProjectName:Win32LightweightClassLibraryTestModuleName:DialogClassCreate:1996-06-01(Sat)Update:2001-12-06(Thu)Copyright:H.ShirouzuReference:========================================================================*/#includetlib.hTDlg::TDlg(LPSTR_resName,TWin*_parent):TWin(_parent){//将字符串_resName复制到resname中resName=strdup(_resName);resId=0;modalFlg=FALSE;//默认的都是非模式对话框}TDlg::TDlg(UINT_resId,TWin*_parent):TWin(_parent){resName=NULL;resId=_resId;modalFlg=FALSE;//默认的都是非模式对话框}TDlg::~TDlg()//调用EndDialog方法来关闭对话框{if(hWnd){EndDialog(FALSE);}//释放resName资源if(resName){free(resName);}}BOOLTDlg::Create(HINSTANCEhInstance){//把preWnd指向当前窗口,这里并没有加入wndarray,因为这时的hwnd还没有建立起来TApp::AddWin(this);/*TheCreateDialogmacrocreatesamodelessdialogboxfromadialogboxtemplateresource.TheCreateDialogmacrousestheCreateDialogParamfunction.HWNDCreateDialog(HINSTANCEhInstance,//handletomoduleLPCTSTRlpTemplate,//dialogboxtemplatenameHWNDhWndParent,//handletoownerwindowDLGPROClpDialogFunc//dialogboxprocedure);ParametershInstance[in]Handletothemodulewhoseexecutablefilecontainsthedialogboxtemplate.lpTemplate[in]Specifiesthedialogboxtemplate.Thisparameteriseitherthepointertoanull-terminatedcharacter

1 / 146
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功