实现类似qq的聊天小程序
2014-09-10 18:11
921 查看
这个程序是室友编的,由于自己现在对MFC还不了解吧,先放这里吧以后好用(环境VS2010)
主函数:
// Chat.cpp : 定义应用程序的类行为。
//
#include "stdafx.h"
#include "Chat.h"
#include "ChatDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChatApp
BEGIN_MESSAGE_MAP(CChatApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// CChatApp 构造
CChatApp::CChatApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CChatApp 对象
CChatApp theApp;
// CChatApp 初始化
BOOL CChatApp::InitInstance()
{
CWinApp::InitInstance();
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
// 创建 shell 管理器,以防对话框包含
// 任何 shell 树视图控件或 shell 列表视图控件。
CShellManager *pShellManager = new CShellManager;
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
CChatDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置处理何时用
// “确定”来关闭对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用
// “取消”来关闭对话框的代码
}
// 删除上面创建的 shell 管理器。
if (pShellManager != NULL)
{
delete pShellManager;
}
// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
// 而不是启动应用程序的消息泵。
return FALSE;
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
另外一个cpp文件:
// ChatDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "Chat.h"
#include "ChatDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChatDlg 对话框
CChatDlg::CChatDlg(CWnd* pParent )
: CDialogEx(CChatDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CChatDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CChatDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, &CChatDlg::OnBnClickedOk)
ON_MESSAGE(WM_RECVDATA,(LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM))OnRecvData)
END_MESSAGE_MAP()
// CChatDlg 消息处理程序
BOOL CChatDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
char hostport[100];
char toipaddr[100];
char toport[100];
char hostname[256];
GetPrivateProfileString("HOSTINFO","HOSTPORT","6500",hostport,100,".\\init.ini");
GetPrivateProfileString("TOINFO","TOIPADDR","127.0.0.1",toipaddr,100,".\\init.ini");
GetPrivateProfileString("TOINFO","TOPORT","6500",toport,100,".\\init.ini");
gethostname(hostname,256);
HOSTENT *hostinfo=gethostbyname(hostname);
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSHOST))->SetAddress(hostinfo->h_addr_list[0][0]&0x00ff,
hostinfo->h_addr_list[0][1]&0x00ff,
hostinfo->h_addr_list[0][2]&0x00ff,
hostinfo->h_addr_list[0][3]&0x00ff);
SetDlgItemText(IDC_EDITHOST,hostport);
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSHOST))->GetAddress(dwIP);
IN_ADDR addbuf;
addbuf.S_un.S_addr=htonl(dwIP);
WritePrivateProfileString("HOSTINFO","HOSTIP",inet_ntoa(addbuf),".\\init.ini");
host_socket=socket(AF_INET,SOCK_DGRAM,0);
if(INVALID_SOCKET==host_socket)
{
MessageBox("套接字创建失败!");
return FALSE;
}
host_addrSock.sin_family=AF_INET;
host_addrSock.sin_port=htons((u_short)atoi(hostport));
host_addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
int retval;
retval=bind(host_socket,(SOCKADDR*)&host_addrSock,sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(host_socket);
MessageBox("绑定失败!");
return FALSE;
}
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSTO))->SetAddress(htonl(inet_addr(toipaddr)));
SetDlgItemText(IDC_EDIT_PORTTO,toport);
RECVPARAM *pRecvParam=new RECVPARAM;
pRecvParam->sock=host_socket;
pRecvParam->hwnd=m_hWnd;
HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL);
CloseHandle(hThread);
return TRUE;
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CChatDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CChatDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CChatDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSTO))->GetAddress(dwIP);
CString strPort;
GetDlgItemText(IDC_EDIT_PORTTO,strPort);
SOCKADDR_IN addrTo;
addrTo.sin_family=AF_INET;
addrTo.sin_port=htons((unsigned short)atoi(strPort));
addrTo.sin_addr.S_un.S_addr=htonl(dwIP);
CString strSend;
GetDlgItemText(IDC_EDIT_SEND,strSend);
strSend+="\r\n";
sendto(host_socket,strSend,strSend.GetLength()+1,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
SetDlgItemText(IDC_EDIT_SEND,"");
CString strMy="我 说:"+strSend;
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
strMy=strTemp+strMy;
SetDlgItemText(IDC_EDIT_RECV,strMy);
//CDialogEx::OnOK();
}
DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)
{
SOCKET sock=((RECVPARAM*)lpParameter)->sock;
HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;
delete lpParameter;
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
char recvBuf[200];
char tempBuf[300];
int retval;
while(TRUE)
{
retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);
if(SOCKET_ERROR==retval)
break;
sprintf_s(tempBuf,"%s说: %s",inet_ntoa(addrFrom.sin_addr),recvBuf);
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);
}
return 0;
}
void CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
CString str=(char*)lParam;
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str=strTemp+str;
SetDlgItemText(IDC_EDIT_RECV,str);
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
一些头文件:
1:// Chat.h : PROJECT_NAME 应用程序的主头文件
//
#pragma once
#ifndef __AFXWIN_H__
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
#endif
#include "resource.h" // 主符号
// CChatApp:
// 有关此类的实现,请参阅 Chat.cpp
//
class CChatApp : public CWinApp
{
public:
CChatApp();
// 重写
public:
virtual BOOL InitInstance();
// 实现
DECLARE_MESSAGE_MAP()
};
extern CChatApp theApp;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2:// ChatDlg.h : 头文件
//
#pragma once
typedef struct recvparam
{
SOCKET sock;
HWND hwnd;
}RECVPARAM;
#define WM_RECVDATA WM_USER+1
// CChatDlg 对话框
class CChatDlg : public CDialogEx
{
// 构造
public:
CChatDlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_CHAT_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
static DWORD WINAPI RecvProc(LPVOID lpParameter);
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
private:
SOCKET host_socket; //本机套接字
SOCKADDR_IN host_addrSock;
public:
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3://{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Chat.rc
//
#define IDD_CHAT_DIALOG 102
#define IDP_SOCKETS_INIT_FAILED 103
#define IDR_MAINFRAME 128
#define IDC_IPADDRESSTO 1000
#define IDC_EDIT_SEND 1001
#define IDC_EDIT_RECV 1002
#define IDC_EDIT_PORTTO 1003
#define IDC_IPADDRESSHOST 1004
#define IDC_EDIT1 1005
#define IDC_EDITHOST 1005
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1006
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4:// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
#pragma once
#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持
#include <afxsock.h> // MFC 套接字扩展
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5:#pragma once
// 包括 SDKDDKVer.h 将定义最高版本的可用 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include <SDKDDKVer.h>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
基本的一些就是这些吧,貌似还有一下VS的头文件就算了~
主函数:
// Chat.cpp : 定义应用程序的类行为。
//
#include "stdafx.h"
#include "Chat.h"
#include "ChatDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChatApp
BEGIN_MESSAGE_MAP(CChatApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// CChatApp 构造
CChatApp::CChatApp()
{
// TODO: 在此处添加构造代码,
// 将所有重要的初始化放置在 InitInstance 中
}
// 唯一的一个 CChatApp 对象
CChatApp theApp;
// CChatApp 初始化
BOOL CChatApp::InitInstance()
{
CWinApp::InitInstance();
if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}
// 创建 shell 管理器,以防对话框包含
// 任何 shell 树视图控件或 shell 列表视图控件。
CShellManager *pShellManager = new CShellManager;
// 标准初始化
// 如果未使用这些功能并希望减小
// 最终可执行文件的大小,则应移除下列
// 不需要的特定初始化例程
// 更改用于存储设置的注册表项
// TODO: 应适当修改该字符串,
// 例如修改为公司或组织名
SetRegistryKey(_T("应用程序向导生成的本地应用程序"));
CChatDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置处理何时用
// “确定”来关闭对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用
// “取消”来关闭对话框的代码
}
// 删除上面创建的 shell 管理器。
if (pShellManager != NULL)
{
delete pShellManager;
}
// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
// 而不是启动应用程序的消息泵。
return FALSE;
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
另外一个cpp文件:
// ChatDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "Chat.h"
#include "ChatDlg.h"
#include "afxdialogex.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CChatDlg 对话框
CChatDlg::CChatDlg(CWnd* pParent )
: CDialogEx(CChatDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CChatDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CChatDlg, CDialogEx)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDOK, &CChatDlg::OnBnClickedOk)
ON_MESSAGE(WM_RECVDATA,(LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM))OnRecvData)
END_MESSAGE_MAP()
// CChatDlg 消息处理程序
BOOL CChatDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
char hostport[100];
char toipaddr[100];
char toport[100];
char hostname[256];
GetPrivateProfileString("HOSTINFO","HOSTPORT","6500",hostport,100,".\\init.ini");
GetPrivateProfileString("TOINFO","TOIPADDR","127.0.0.1",toipaddr,100,".\\init.ini");
GetPrivateProfileString("TOINFO","TOPORT","6500",toport,100,".\\init.ini");
gethostname(hostname,256);
HOSTENT *hostinfo=gethostbyname(hostname);
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSHOST))->SetAddress(hostinfo->h_addr_list[0][0]&0x00ff,
hostinfo->h_addr_list[0][1]&0x00ff,
hostinfo->h_addr_list[0][2]&0x00ff,
hostinfo->h_addr_list[0][3]&0x00ff);
SetDlgItemText(IDC_EDITHOST,hostport);
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSHOST))->GetAddress(dwIP);
IN_ADDR addbuf;
addbuf.S_un.S_addr=htonl(dwIP);
WritePrivateProfileString("HOSTINFO","HOSTIP",inet_ntoa(addbuf),".\\init.ini");
host_socket=socket(AF_INET,SOCK_DGRAM,0);
if(INVALID_SOCKET==host_socket)
{
MessageBox("套接字创建失败!");
return FALSE;
}
host_addrSock.sin_family=AF_INET;
host_addrSock.sin_port=htons((u_short)atoi(hostport));
host_addrSock.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
int retval;
retval=bind(host_socket,(SOCKADDR*)&host_addrSock,sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(host_socket);
MessageBox("绑定失败!");
return FALSE;
}
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSTO))->SetAddress(htonl(inet_addr(toipaddr)));
SetDlgItemText(IDC_EDIT_PORTTO,toport);
RECVPARAM *pRecvParam=new RECVPARAM;
pRecvParam->sock=host_socket;
pRecvParam->hwnd=m_hWnd;
HANDLE hThread=CreateThread(NULL,0,RecvProc,(LPVOID)pRecvParam,0,NULL);
CloseHandle(hThread);
return TRUE;
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CChatDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CChatDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CChatDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
DWORD dwIP;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESSTO))->GetAddress(dwIP);
CString strPort;
GetDlgItemText(IDC_EDIT_PORTTO,strPort);
SOCKADDR_IN addrTo;
addrTo.sin_family=AF_INET;
addrTo.sin_port=htons((unsigned short)atoi(strPort));
addrTo.sin_addr.S_un.S_addr=htonl(dwIP);
CString strSend;
GetDlgItemText(IDC_EDIT_SEND,strSend);
strSend+="\r\n";
sendto(host_socket,strSend,strSend.GetLength()+1,0,(SOCKADDR*)&addrTo,sizeof(SOCKADDR));
SetDlgItemText(IDC_EDIT_SEND,"");
CString strMy="我 说:"+strSend;
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
strMy=strTemp+strMy;
SetDlgItemText(IDC_EDIT_RECV,strMy);
//CDialogEx::OnOK();
}
DWORD WINAPI CChatDlg::RecvProc(LPVOID lpParameter)
{
SOCKET sock=((RECVPARAM*)lpParameter)->sock;
HWND hwnd=((RECVPARAM*)lpParameter)->hwnd;
delete lpParameter;
SOCKADDR_IN addrFrom;
int len=sizeof(SOCKADDR);
char recvBuf[200];
char tempBuf[300];
int retval;
while(TRUE)
{
retval=recvfrom(sock,recvBuf,200,0,(SOCKADDR*)&addrFrom,&len);
if(SOCKET_ERROR==retval)
break;
sprintf_s(tempBuf,"%s说: %s",inet_ntoa(addrFrom.sin_addr),recvBuf);
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);
}
return 0;
}
void CChatDlg::OnRecvData(WPARAM wParam,LPARAM lParam)
{
CString str=(char*)lParam;
CString strTemp;
GetDlgItemText(IDC_EDIT_RECV,strTemp);
str=strTemp+str;
SetDlgItemText(IDC_EDIT_RECV,str);
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
一些头文件:
1:// Chat.h : PROJECT_NAME 应用程序的主头文件
//
#pragma once
#ifndef __AFXWIN_H__
#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
#endif
#include "resource.h" // 主符号
// CChatApp:
// 有关此类的实现,请参阅 Chat.cpp
//
class CChatApp : public CWinApp
{
public:
CChatApp();
// 重写
public:
virtual BOOL InitInstance();
// 实现
DECLARE_MESSAGE_MAP()
};
extern CChatApp theApp;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2:// ChatDlg.h : 头文件
//
#pragma once
typedef struct recvparam
{
SOCKET sock;
HWND hwnd;
}RECVPARAM;
#define WM_RECVDATA WM_USER+1
// CChatDlg 对话框
class CChatDlg : public CDialogEx
{
// 构造
public:
CChatDlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_CHAT_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
static DWORD WINAPI RecvProc(LPVOID lpParameter);
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
afx_msg void OnRecvData(WPARAM wParam,LPARAM lParam);
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnBnClickedOk();
private:
SOCKET host_socket; //本机套接字
SOCKADDR_IN host_addrSock;
public:
};
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3://{{NO_DEPENDENCIES}}
// Microsoft Visual C++ generated include file.
// Used by Chat.rc
//
#define IDD_CHAT_DIALOG 102
#define IDP_SOCKETS_INIT_FAILED 103
#define IDR_MAINFRAME 128
#define IDC_IPADDRESSTO 1000
#define IDC_EDIT_SEND 1001
#define IDC_EDIT_RECV 1002
#define IDC_EDIT_PORTTO 1003
#define IDC_IPADDRESSHOST 1004
#define IDC_EDIT1 1005
#define IDC_EDITHOST 1005
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1006
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4:// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
#pragma once
#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif
#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif
#include "targetver.h"
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的
// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS
#include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展
#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT
#include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持
#include <afxsock.h> // MFC 套接字扩展
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5:#pragma once
// 包括 SDKDDKVer.h 将定义最高版本的可用 Windows 平台。
// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
// WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
#include <SDKDDKVer.h>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
基本的一些就是这些吧,貌似还有一下VS的头文件就算了~
相关文章推荐
- Linux下实现类似QQ的通信(简单聊天程序)
- c#实现类似QQ的简单聊天程序,可支持广域网。
- 类似遨游或是QQ静态截屏程序的实现
- C#实现类似qq的屏幕截图程序
- C#实现类似qq的屏幕截图程序 [转载]
- 一个类似QQ的java聊天程序
- C#实现类似qq的屏幕截图程序
- C#实现类似qq的屏幕截图程序 [转载]
- 利用Register protocol实现网页调用桌面程序(类似迅雷、QQ等)
- C#实现类似qq的屏幕截图程序
- C#实现类似qq的屏幕截图程序
- 用c#实现类似QQ的简单通讯程序
- 实现java程序的自动休眠 类似QQ的自动离线
- C#实现类似qq的屏幕截图程序
- 特殊类型窗体制作: 实现类似 QQ 的程序界面
- C#仿QQ聊天程序v1.0(IConnectionList接口实现)[易学网]
- 类似qq聊天表情实现
- C#实现类似qq的屏幕截图程序
- 用c#实现类似QQ的简单通讯程序
- C#实现类似QQ的屏幕截图程序 转