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