vc++qq.docx

上传人:b****6 文档编号:3307141 上传时间:2022-11-21 格式:DOCX 页数:17 大小:19.68KB
下载 相关 举报
vc++qq.docx_第1页
第1页 / 共17页
vc++qq.docx_第2页
第2页 / 共17页
vc++qq.docx_第3页
第3页 / 共17页
vc++qq.docx_第4页
第4页 / 共17页
vc++qq.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

vc++qq.docx

《vc++qq.docx》由会员分享,可在线阅读,更多相关《vc++qq.docx(17页珍藏版)》请在冰豆网上搜索。

vc++qq.docx

vc++qq

//MyQQDlg.cpp:

实现文件

//

#include"stdafx.h"

#include"MyQQ.h"

#include"MyQQDlg.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

 

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

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//对话框数据

enum{IDD=IDD_ABOUTBOX};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持

//实现

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

}

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

END_MESSAGE_MAP()

 

//CMyQQDlg对话框

 

CMyQQDlg:

:

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

:

CDialog(CMyQQDlg:

:

IDD,pParent)

m_client_name(_T(""))

m_server_name(_T("localhost"))

m_nport(800)

m_send_info(_T(""))

m_systemTime(_T(""))

m_talk(FALSE)

count(0)

{

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

voidCMyQQDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

DDX_Text(pDX,IDC_CLIENT_NAME,m_client_name);

DDV_MaxChars(pDX,m_client_name,20);

DDX_Text(pDX,IDC_SERVER_NAME,m_server_name);

DDV_MaxChars(pDX,m_server_name,30);

DDX_Text(pDX,IDC_SERVER_PORT,m_nport);

DDV_MinMaxInt(pDX,m_nport,0,1024);

DDX_Control(pDX,IDC_RECEIVED_INFO,m_ctlRecvd);

DDX_Text(pDX,IDC_SEND_INFO,m_send_info);

DDV_MaxChars(pDX,m_send_info,500);

DDX_Control(pDX,IDC_LIST_NAME,m_ctlName);

DDX_Text(pDX,IDC_EDIT_TIME,m_systemTime);

DDV_MaxChars(pDX,m_systemTime,100);

DDX_Check(pDX,IDC_CHECK1,m_talk);

}

BEGIN_MESSAGE_MAP(CMyQQDlg,CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_BN_CLICKED(IDC_CONNECT,&CMyQQDlg:

:

OnBnClickedConnect)

ON_BN_CLICKED(IDC_CLOSE,&CMyQQDlg:

:

OnBnClickedClose)

ON_BN_CLICKED(IDC_SEND,&CMyQQDlg:

:

OnBnClickedSend)

ON_MESSAGE(RE_RECEIVED,OnMyReceive)

ON_WM_TIMER()

ON_BN_CLICKED(IDC_CHECK1,&CMyQQDlg:

:

OnBnClickedCheck1)

END_MESSAGE_MAP()

 

//CMyQQDlg消息处理程序

BOOLCMyQQDlg:

:

OnInitDialog()

{

CDialog:

:

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);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

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

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

//执行此操作

SetIcon(m_hIcon,TRUE);//设置大图标

SetIcon(m_hIcon,FALSE);//设置小图标

//TODO:

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

m_ctlName.InsertString(0,"所有人");

m_ctlName.SetCurSel(0);

UpdateData(false);

SetTimer(1,1000,NULL);

 

GetDlgItem(IDC_CONNECT)->EnableWindow(true);

GetDlgItem(IDC_SEND)->EnableWindow(true);

GetDlgItem(IDC_CLOSE)->EnableWindow(false);

GetDlgItem(IDC_SERVER_PORT)->EnableWindow(true);

GetDlgItem(IDC_CLIENT_NAME)->EnableWindow(true);

GetDlgItem(IDC_SERVER_NAME)->EnableWindow(true);

GetDlgItem(IDC_LIST_NAME)->EnableWindow(false);

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

}

voidCMyQQDlg:

:

OnSysCommand(UINTnID,LPARAMlParam)

{

if((nID&0xFFF0)==IDM_ABOUTBOX)

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialog:

:

OnSysCommand(nID,lParam);

}

}

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

//来绘制该图标。

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

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

voidCMyQQDlg:

:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND,reinterpret_cast(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);

}

else

{

CDialog:

:

OnPaint();

}

}

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

//

HCURSORCMyQQDlg:

:

OnQueryDragIcon()

{

returnstatic_cast(m_hIcon);

}

 

voidCMyQQDlg:

:

OnBnClickedConnect()

{

//TODO:

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

UpdateData(true);

CStringcName=m_client_name;

if(!

cName.Compare(""))

{

:

:

AfxMessageBox("Client'snamecannotbenull");

return;

}

if(!

sockClient.Create())

{

:

:

AfxMessageBox(_T("CreateQQsocketfailed"));

return;

}

if(!

sockClient.Connect(m_server_name,m_nport))

{

if(sockClient!

=NULL)

sockClient.Close();

MessageBox(_T("连接失败"));

return;

}

MessageBox(_T("连接成功"));

memset(m_Dat.m_type,0,255);

memset(m_Dat.m_strName,0,255);

memcpy(m_Dat.m_type,"CONNECTION",sizeof("CONNECTION"));

memcpy(m_Dat.m_strName,m_client_name,m_client_name.GetLength());

sockClient.Send(&m_Dat,sizeof(m_Dat));

GetDlgItem(IDC_CONNECT)->EnableWindow(false);

GetDlgItem(IDC_SEND)->EnableWindow(true);

GetDlgItem(IDC_CLOSE)->EnableWindow(true);

GetDlgItem(IDC_SERVER_PORT)->EnableWindow(false);

GetDlgItem(IDC_CLIENT_NAME)->EnableWindow(false);

GetDlgItem(IDC_SERVER_NAME)->EnableWindow(false);

}

voidCMyQQDlg:

:

OnBnClickedClose()

{

memset(m_Dat.m_type,0,255);

memcpy(m_Dat.m_type,"CLOSE",sizeof("CLOSE"));

sockClient.Send(&m_Dat,sizeof(m_Dat));

sockClient.Close();

exit(0);

}

voidCMyQQDlg:

:

OnBnClickedSend()

{

UpdateData(true);

CStringtalkingName;

m_ctlName.GetText(m_ctlName.GetCurSel(),talkingName);

if(talkingName!

="所有人")

{

memset(m_Dat.m_type,0,255);

memcpy(m_Dat.m_type,"PRIVATE",sizeof("PRIVATE"));

memset(m_Dat.m_talkingName,0,255);

memcpy(m_Dat.m_talkingName,talkingName,talkingName.GetLength());

}

else

{memset(m_Dat.m_type,0,255);

memcpy(m_Dat.m_type,"MSG",sizeof("MSG"));}

memset(m_Dat.m_dbData,0,255);

memcpy(&m_Dat.m_dbData,m_send_info,m_send_info.GetLength());

memset(m_Dat.m_strName,0,255);

memcpy(m_Dat.m_strName,m_client_name,m_client_name.GetLength());

intiSent=sockClient.Send(&m_Dat,sizeof(m_Dat));

if(iSent!

=SOCKET_ERROR)

{

m_ctlRecvd.AddString(m_client_name+_T("说:

(")+m_systemTime+_T(")"));

m_ctlRecvd.AddString(_T("")+m_send_info);

m_send_info="";

UpdateData(false);

}

}

LRESULTCMyQQDlg:

:

OnMyReceive(WPARAMwparam,LPARAMlparam)

{_DATA*dat;

dat=new_DATA;

memcpy(dat,(_DATA*)wparam,sizeof(_DATA));

CStringtype=(CString)dat->m_type;

CStringname=(CString)dat->m_strName;

if(!

type.Compare(_T("CLIENT")))

{m_ctlName.InsertString(count,name);

count++;

}

elseif(!

type.Compare(_T("CONNECTION")))

{m_ctlName.InsertString(count,name);

count++;

}

elseif(!

type.Compare(_T("CLOSE")))

{inti=1;

CStringcloseName;

m_ctlName.GetText(i,closeName);

while

(1)

{if(!

name.Compare(closeName))

{m_ctlName.DeleteString(i);

count--;

break;

}

if(closeName=="")

break;

i++;

m_ctlName.GetText(i,closeName);

}

}

elseif(!

type.Compare(_T("PRIVATE")))

{CStringstr1=name;

str1+=_T("对你说:

(")+m_systemTime+_T(")");

m_ctlRecvd.AddString(str1);

str1=_T("");

str1+=dat->m_dbData;

m_ctlRecvd.AddString(str1);

}

else

{CStringstr=(CString)dat->m_strName;

str+=_T(":

(")+m_systemTime+_T(")");

m_ctlRecvd.AddString(str);

str=_T("");

str+=dat->m_dbData;

m_ctlRecvd.AddString(str);

}

UpdateData(false);

deletedat;

 

return1;

}

voidCMyQQDlg:

:

OnTimer(UINT_PTRnIDEvent)

{

//TODO:

在此添加消息处理程序代码和/或调用默认值

UpdateData(true);

CTimesTime=CTime:

:

GetCurrentTime();

CStringsTimeSting=sTime.Format("%H:

%M:

%S");

m_systemTime=sTimeSting;

UpdateData(false);

CDialog:

:

OnTimer(nIDEvent);

}

voidCMyQQDlg:

:

OnBnClickedCheck1()

{

if(m_talk==false)

{GetDlgItem(IDC_LIST_NAME)->EnableWindow(true);}

else

{GetDlgItem(IDC_LIST_NAME)->EnableWindow(false);

m_ctlName.SetCurSel(0);

}

}

//MyServerDlg.cpp:

实现文件

//

#include"stdafx.h"

#include"MyServer.h"

#include"MyServerDlg.h"

#include"LSock.h"

 

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

 

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

classCAboutDlg:

publicCDialog

{

public:

CAboutDlg();

//对话框数据

enum{IDD=IDD_ABOUTBOX};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);//DDX/DDV支持

//实现

protected:

DECLARE_MESSAGE_MAP()

};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

{

}

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

END_MESSAGE_MAP()

 

//CMyServerDlg对话框

 

CMyServerDlg:

:

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

:

CDialog(CMyServerDlg:

:

IDD,pParent)

m_server_port(800)

{

m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);

m_clientSocket=NULL;

m_listenSocket=NULL;

}

voidCMyServerDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialog:

:

DoDataExchange(pDX);

DDX_Text(pDX,IDC_SERVER_PORT,m_server_port);

DDX_Control(pDX,IDC_SERVER_INFO,m_ctlRecvd);

DDX_Control(pDX,IDC_LIST_INLINE,m_inline);

}

BEGIN_MESSAGE_MAP(CMyServerDlg,CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

//}}AFX_MSG_MAP

ON_BN_CLICKED(IDC_START,&CMyServerDlg:

:

OnBnClickedStart)

ON_BN_CLICKED(IDC_CLOSE,&CMyServerDlg:

:

OnBnClickedClose)

ON_LBN_SELCHANGE(IDC_SERVER_INFO,&CMyServerDlg:

:

OnLbnSelchangeServerInfo)

END_MESSAGE_MAP()

 

//CMyServerDlg消息处理程序

BOOLCMyServerDlg:

:

OnInitDialog()

{

CDialog:

:

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);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);

}

}

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

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

//执行此操作

SetIcon(m_hIcon,TRUE);//设置大图标

SetIcon(m_hIcon,FALSE);//设置小图标

//TODO:

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

GetDlgItem(IDC_START)->EnableWindow(true);

GetDlgItem(IDC_CLOSE)->EnableWindow(false);

GetDlgItem(IDC_SERVE

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

当前位置:首页 > 小学教育 > 语文

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

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