局域网聊天软件源代码包括语音聊天Word格式文档下载.docx

上传人:b****6 文档编号:19159300 上传时间:2023-01-04 格式:DOCX 页数:48 大小:28.85KB
下载 相关 举报
局域网聊天软件源代码包括语音聊天Word格式文档下载.docx_第1页
第1页 / 共48页
局域网聊天软件源代码包括语音聊天Word格式文档下载.docx_第2页
第2页 / 共48页
局域网聊天软件源代码包括语音聊天Word格式文档下载.docx_第3页
第3页 / 共48页
局域网聊天软件源代码包括语音聊天Word格式文档下载.docx_第4页
第4页 / 共48页
局域网聊天软件源代码包括语音聊天Word格式文档下载.docx_第5页
第5页 / 共48页
点击查看更多>>
下载资源
资源描述

局域网聊天软件源代码包括语音聊天Word格式文档下载.docx

《局域网聊天软件源代码包括语音聊天Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《局域网聊天软件源代码包括语音聊天Word格式文档下载.docx(48页珍藏版)》请在冰豆网上搜索。

局域网聊天软件源代码包括语音聊天Word格式文档下载.docx

CWinApp:

:

OnHelp)

END_MESSAGE_MAP()

//CChatApp构造

CChatApp:

CChatApp()

//TODO:

在此处添加构造代码,

//将所有重要的初始化放置在InitInstance中

}

//唯一的一个CChatApp对象

CChatApptheApp;

//CChatApp初始化

BOOLCChatApp:

InitInstance()

//如果一个运行在WindowsXP上的应用程序清单指定要

//使用ComCtl32.dll版本6或更高版本来启用可视化方式,

//则需要InitCommonControlsEx()。

否则,将无法创建窗口。

INITCOMMONCONTROLSEXInitCtrls;

InitCtrls.dwSize=sizeof(InitCtrls);

//将它设置为包括所有要在应用程序中使用的

//公共控件类。

InitCtrls.dwICC=ICC_WIN95_CLASSES;

InitCommonControlsEx(&

InitCtrls);

CWinApp:

InitInstance();

AfxEnableControlContainer();

//标准初始化

//如果未使用这些功能并希望减小

//最终可执行文件的大小,则应移除下列

//不需要的特定初始化例程

//更改用于存储设置的注册表项

应适当修改该字符串,

//例如修改为公司或组织名

SetRegistryKey(_T("

应用程序向导生成的本地应用程序"

));

CChatDlgdlg;

m_pMainWnd=&

dlg;

INT_PTRnResponse=dlg.DoModal();

if(nResponse==IDOK)

{

在此放置处理何时用

//“确定”来关闭对话框的代码

}

elseif(nResponse==IDCANCEL)

//“取消”来关闭对话框的代码

//由于对话框已关闭,所以将返回FALSE以便退出应用程序,

//而不是启动应用程序的消息泵。

returnFALSE;

//#endif

//ChatDlg.h:

头文件

#include"

Public.h"

Server.h"

Client.h"

#ifndef_CChatDlg_h_//用于防止头文件嵌套多次1

#define_CChatDlg_h_//用于防止头文件嵌套多次2

Sound.h"

#defineWM_DATAREACHWM_APP+110

#defineCLIENT1

#defineSERVER2

//CChatDlg对话框

classCChatDlg:

publicCDialog

//构造

CChatDlg(CWnd*pParent=NULL);

//标准构造函数

//对话框数据

enum{IDD=IDD_CHAT_DIALOG};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);

//DDX/DDV支持

protected:

HICONm_hIcon;

//生成的消息映射函数

virtualBOOLOnInitDialog();

afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);

afx_msgvoidOnPaint();

afx_msgHCURSOROnQueryDragIcon();

//afx_msgvoidOnBnClickedButton3();

////////////自定义数据/////////////////

boolServerFlag;

//用于表示是否已经建立了服务器,没有则为false,已经建立则为true

boolClientFlag;

//用于表示是否已经连接了服务器,没有则为false,已经建立则为true

CServerServer;

//用于服务器端的操作

CClientClient;

//用于服务端的操作

CSoundSound;

//用于音频操作

CStringInPutCString;

//用于保存输入窗口的文字数据

CStringAllCString;

//用于保存所有聊天记录的文字数据

intMark;

//用于标识是客户端还是服务器

boolSoundChat;

//用于标识是否已经开始语音聊天,false表示没有,true表示已经建立语音聊天了

WAVEHDR*p;

////////////////////自定义消息响应函数-开始/////////////////////

LRESULTOnDataReach(WPARAMwParam,LPARAMlParam);

//当有新数据到达时执行的代码

afx_msgLRESULTGetInBufferFull(WPARAMwp,LPARAMlp);

//一个buffer满后调用

afx_msgLRESULTWriteOutBufferEmpty(WPARAMwp,LPARAMlp);

//一个buffer播放完后调用

////////////////////自定义消息响应函数-结束/////////////////////

////////////////////////////////////////

afx_msgvoidOnBnClickedLinkserver();

afx_msgvoidOnBnClickedBuildserver();

afx_msgvoidOnIpnFieldchangedIpaddress(NMHDR*pNMHDR,LRESULT*pResult);

afx_msgvoidOnBnClickedSend();

afx_msgvoidOnEnChangeChat();

afx_msgvoidOnBnClickedClose();

afx_msgvoidOnBnClickedVoicechat();

#endif//用于防止头文件嵌套多次3

//ChatDlg.cpp:

实现文件

//#include"

Wmiutils.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

//用于应用程序“关于”菜单项的CAboutDlg对话框

classCAboutDlg:

CAboutDlg();

enum{IDD=IDD_ABOUTBOX};

CAboutDlg:

CAboutDlg():

CDialog(CAboutDlg:

IDD)

voidCAboutDlg:

DoDataExchange(CDataExchange*pDX)

CDialog:

DoDataExchange(pDX);

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

CChatDlg:

CChatDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CChatDlg:

IDD,pParent)

ServerFlag=false;

//初始化还没有建立服务器

ClientFlag=false;

Mark=0;

AllCString="

"

;

SoundChat=false;

p=(WAVEHDR*)malloc(sizeof(WAVEHDR)+MAX_BUFFER_SIZE);

m_hIcon=AfxGetApp()->

LoadIcon(IDR_MAINFRAME);

voidCChatDlg:

BEGIN_MESSAGE_MAP(CChatDlg,CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

//ON_BN_CLICKED(IDC_BUTTON3,&

OnBnClickedButton3)

ON_BN_CLICKED(IDB_LINKSERVER,&

OnBnClickedLinkserver)

ON_BN_CLICKED(IDB_BUILDSERVER,&

OnBnClickedBuildserver)

ON_NOTIFY(IPN_FIELDCHANGED,IDI_IPADDRESS,&

OnIpnFieldchangedIpaddress)

//ON_WM_CREATE()

ON_BN_CLICKED(IDB_SEND,&

OnBnClickedSend)

////////////////////用户自定义的消息-开始///////////////////////

ON_MESSAGE(WM_DATAREACH,OnDataReach)

ON_MESSAGE(MM_WIM_DATA,GetInBufferFull)//一个buffer满了后调用

ON_MESSAGE(MM_WOM_DONE,WriteOutBufferEmpty)//buffer的内容被播放完了后,产生的消息调用这个函数

////////////////////用户自定义的消息-结束///////////////////////

//ON_EN_CHANGE(IDE_EDITCHAT,&

OnEnChangeEditchat)

//ON_EN_MAXTEXT(IDE_EDITCHAT,&

OnEnMaxtextEditchat)

ON_EN_CHANGE(IDE_CHAT,&

OnEnChangeChat)

ON_BN_CLICKED(IDB_CLOSE,&

OnBnClickedClose)

ON_BN_CLICKED(IDB_VOICECHAT,&

OnBnClickedVoicechat)

//CChatDlg消息处理程序

BOOLCChatDlg:

OnInitDialog()

OnInitDialog();

//将“关于...”菜单项添加到系统菜单中。

//IDM_ABOUTBOX必须在系统命令范围内。

ASSERT((IDM_ABOUTBOX&

0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<

0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL)

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty())

pSysMenu->

AppendMenu(MF_SEPARATOR);

AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

//设置此对话框的图标。

当应用程序主窗口不是对话框时,框架将自动

//执行此操作

SetIcon(m_hIcon,TRUE);

//设置大图标

SetIcon(m_hIcon,FALSE);

//设置小图标

在此添加额外的初始化代码

returnTRUE;

//除非将焦点设置到控件,否则返回TRUE

OnSysCommand(UINTnID,LPARAMlParam)

if((nID&

0xFFF0)==IDM_ABOUTBOX)

CAboutDlgdlgAbout;

dlgAbout.DoModal();

else

OnSysCommand(nID,lParam);

//如果向对话框添加最小化按钮,则需要下面的代码

//来绘制该图标。

对于使用文档/视图模型的MFC应用程序,

//这将由框架自动完成。

OnPaint()

if(IsIconic())

CPaintDCdc(this);

//用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND,reinterpret_cast<

WPARAM>

(dc.GetSafeHdc()),0);

//使图标在工作区矩形中居中

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&

rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

//绘制图标

dc.DrawIcon(x,y,m_hIcon);

OnPaint();

///////////////////程序员添加代码-开始////////////////////////

((CIPAddressCtrl*)GetDlgItem(IDI_IPADDRESS))->

SetAddress(:

htonl(:

inet_addr("

192.168.177.29"

)));

((CEdit*)this->

GetDlgItem(IDE_PORT))->

SetWindowTextA("

7000"

);

((CButton*)this->

GetDlgItem(IDB_SEND))->

SetFocus();

//将焦点设置为发送按钮

///////////////////程序员添加代码-结束////////////////////////

//当用户拖动最小化窗口时系统调用此函数取得光标

//显示。

HCURSORCChatDlg:

OnQueryDragIcon()

returnstatic_cast<

HCURSOR>

(m_hIcon);

OnBnClickedLinkserver()

Client.InitM_dlg(this);

在此添加控件通知处理程序代码

if(ClientFlag==false)

Client.GetServerAddress();

if(Client.AddSocketLib()&

&

Client.CreateSocket()&

Client.ConnectSocket())

ClientFlag=true;

this->

GetDlgItem(IDE_LINKSTATE)->

SetWindowText("

服务器连接成功"

Mark=CLIENT;

WSAAsyncSelect(Client.ClientSocket,this->

m_hWnd,

WM_DATAREACH,FD_OOB|FD_READ|FD_WRITE|FD_ACCEPT|FD_CLOSE|FD_CONNECT);

WSAAsyncSelect(Client.ClientSocketSound,this->

return;

OnBnClickedBuildserver()

Server.InitM_dlg(this);

if(ServerFlag==false)

Server.GetServerAddress();

if(Server.AddSocketLib()&

Server.CreateSocket()&

Server.BindSocket()&

Server.ListeSocket()&

Server.AcceptClient())

ServerFlag=true;

GetDlgItem(IDE_BUILDSTATE)->

服务器设置成功"

Mark=SERVER;

WSAAsyncSelect(Server.ConnectSocket,this->

WSAAsyncSelect(Server.ConnectSocketSound,this->

OnIpnFieldchangedIpaddress(NMHDR*pNMHDR,LRESULT*pResult)

LPNMIPADDRESSpIPAddr=reinterpret_cast<

LPNMIPADDRESS>

(pNMHDR);

*pResult=0;

OnBnClickedSend()

(this->

GetDlgItem(IDE_EDITCHAT))->

GetWindowTextA(InPutCString);

//把聊天输入窗口里面的文字保存到InPutCString中

if(InPutCString.GetLength()!

=0)

{

if(Mark==SERVER)

AllCString=AllCString+"

服务器:

+InPutCString+"

\r\n"

GetDlgItem(IDE_CHAT)->

SetWindowText(AllCString);

Server.GetSendBuf(InPutCString);

Server.SendData(NULL);

elseif(Mark==CLIENT)

客户端:

Client.GetSendBuf(InPutCString);

Client.SendData(NULL);

////////////////////////////用户定义消息响应函数-开始///////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////

//OnDataReach-开始//

//当有新数据到达时执行的代码//

////////////////

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1