// ClientView.cpp : implementation of the CClientView class
// Download by http://www.codefans.net
#include "stdafx.h"
#include "resource.h"
#include "Client.h"
#include "MainFrm.h"
#include "ClientDoc.h"
#include "ClientView.h"
#include "LoginDlg.h"
#include "UserView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CClientView
IMPLEMENT_DYNCREATE(CClientView, CView)
BEGIN_MESSAGE_MAP(CClientView, CView)
//{{AFX_MSG_MAP(CClientView)
ON_WM_PAINT()
ON_WM_CREATE()
ON_WM_DESTROY()
ON_WM_SETCURSOR()
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_CLIENT_NEWGAME, OnClientNewgame)
ON_UPDATE_COMMAND_UI(ID_CLIENT_NEWGAME, OnUpdateClientNewgame)
ON_COMMAND(ID_CLIENT_SURRENDER, OnClientSurrender)
ON_UPDATE_COMMAND_UI(ID_CLIENT_SURRENDER, OnUpdateClientSurrender)
ON_COMMAND(ID_CLIENT_DISCONNECT, OnClientDisconnect)
ON_UPDATE_COMMAND_UI(ID_CLIENT_DISCONNECT, OnUpdateClientDisconnect)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_USER_CLIENTACCEPT, OnSocketAccept)
ON_MESSAGE(WM_USER_CLIENTREAD, OnSocketRead)
ON_MESSAGE(WM_USER_CLIENTCLOSE, OnSocketClose)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CClientView construction/destruction
CClientView::CClientView()
:m_nTotalEvent(0),
m_sListen(INVALID_SOCKET),
m_sServer(INVALID_SOCKET),
m_sClient(INVALID_SOCKET),
m_hEventExit(NULL),
m_bRuning(FALSE),
m_pServerSocket(NULL),
m_pListenSocket(NULL),
m_pClientSocket(NULL),
m_bLinked(FALSE),
m_bInGame(FALSE),
m_bOpponentWin(FALSE)
{
// TODO: add construction code here
}
CClientView::~CClientView()
{
}
BOOL CClientView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CClientView drawing
void CClientView::OnDraw(CDC* pDC)
{
CClientDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CClientView diagnostics
#ifdef _DEBUG
void CClientView::AssertValid() const
{
CView::AssertValid();
}
void CClientView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CClientDoc* CClientView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CClientDoc)));
return (CClientDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CClientView message handlers
/*
* WM_PAINT消息响应函数
*/
void CClientView::OnPaint()
{
CPaintDC dc(this); //设备环境
CBitmap bitmap;
bitmap.LoadBitmap (IDB_BKWOOD); //载入棋盘位图
CDC dcMem;
dcMem.CreateCompatibleDC(&dc); //创建内存设备环境
//将棋盘位图选入内存设备环境
CBitmap* pOldBitmap = dcMem.SelectObject(&bitmap);
//获取客户区域
CRect rect(0, 0, 0, 0);
GetClientRect(&rect);
//画棋盘
dc.StretchBlt(0, 0, rect.Width(), rect.Height(),
&dcMem, 0, 0, 640, 640, SRCCOPY);
//画线
for(int i = 1; i <= DIVISIONS; i++)
{
dc.MoveTo(CELLSIZE, i * CELLSIZE);
dc.LineTo(DIVISIONS * CELLSIZE, i * CELLSIZE);//水平线
dc.MoveTo(i * CELLSIZE, CELLSIZE);
dc.LineTo(i * CELLSIZE, DIVISIONS * CELLSIZE);//垂直线
}
//画天元和星位
dc.SelectStockObject(BLACK_BRUSH);//黑色刷子
int nRadius = 4;//半径
dc.Ellipse(CELLSIZE + CELLSIZE * 3 - nRadius,
CELLSIZE + CELLSIZE * 3 - nRadius,
CELLSIZE + CELLSIZE * 3 + nRadius,
CELLSIZE + CELLSIZE * 3 + nRadius);
dc.Ellipse(CELLSIZE + CELLSIZE * (DIVISIONS - 3 - 1) - nRadius,
CELLSIZE + CELLSIZE * 3 - nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS - 3 - 1) + nRadius,
CELLSIZE + CELLSIZE * 3 + nRadius);
dc.Ellipse(CELLSIZE + CELLSIZE * (DIVISIONS / 2) - nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS / 2) - nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS / 2) + nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS / 2) + nRadius);
dc.Ellipse(CELLSIZE + CELLSIZE * 3 - nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS - 3 - 1) - nRadius,
CELLSIZE + CELLSIZE * 3 + nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS - 3 - 1) + nRadius);
dc.Ellipse(CELLSIZE + CELLSIZE * (DIVISIONS - 3 - 1) - nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS - 3 - 1) - nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS - 3 - 1) + nRadius,
CELLSIZE + CELLSIZE * (DIVISIONS - 3 - 1) + nRadius);
//画外框线
dc.SelectStockObject(NULL_BRUSH);
CPen pen(PS_SOLID, 4, RGB(0, 0, 0));//黑色画笔
CPen* pOldPen = dc.SelectObject(&pen);
CRect rectFrame(CELLSIZE, CELLSIZE, DIVISIONS * CELLSIZE + 2, DIVISIONS * CELLSIZE + 2);
rectFrame.InflateRect(5, 5);
dc.Rectangle(&rectFrame);
dc.SelectObject(pOldPen); //将画笔选回设备环境
dc.SelectObject(pOldBitmap);//将位图选回设备环境
//画棋子
DrawPieces();
}
/*
*画棋子
*/
void CClientView::DrawPieces()
{
CClientDC dc(this); //设备环境
CBitmap bmWhite, bmBlack, bmMask;
bmWhite.LoadBitmap(IDB_WHITEPIECE); //载入白棋位图
bmBlack.LoadBitmap(IDB_BLACKPIECE); //载入黑棋位图
bmMask.LoadBitmap(IDB_MASK); //载入掩码位图
//创建白棋内存设备环境
CDC dcMemWhite;
dcMemWhite.CreateCompatibleDC(&dc);
//将白棋位图选入内存设备环境
CBitmap* pOld1 = dcMemWhite.SelectObject(&bmWhite);
//创建黑棋内存设备环境
CDC dcMemBlack;
dcMemBlack.CreateCompatibleDC(&dc);
//将黑棋选入内存设备环境
CBitmap* pOld2 = dcMemBlack.SelectObject(&bmBlack);
//创建掩码内存设备环境
CDC dcMemMask;
dcMemMask.CreateCompatibleDC(&dc);
//将掩码位图选入内存设备环境
CBitmap* pOld3 = dcMemMask.SelectObject(&bmMask);
//用与方式画白棋
dcMemWhite.BitBlt(0, 0, 36, 36, &dcMemMask, 0, 0, SRCAND);
//用与方式画黑棋
dcMemBlack.BitBlt(0, 0, 36, 36, &dcMemMask, 0, 0, SRCAND);
//画棋子
for(int i = 0; i < DIVISIONS; i++)
for(int j = 0; j < DIVISIONS; j++)
{
if(m_nCoords[i][j] == -1)
{
dc.BitBlt((i + 1) * CELLSIZE - 18, (j + 1) * CELLSIZE - 18,
36, 36, &dcMemMask, 0, 0, 0x220326);
//用或方式画白棋
dc.BitBlt((i + 1) * CELLSIZE - 18, (j + 1) * CELLSIZE - 18,
36, 36, &dcMemWhite, 0, 0, SRCPAINT);
}
if(m_nCoords[i][j] == 1)
{
dc.BitBlt((i + 1) * CELLSIZE - 18, (j + 1) * CELLSIZE - 18,
36, 36, &dcMemMask, 0, 0, 0x220326);
//用或方式画黑棋
dc.BitBlt((i + 1) * CELLSIZE - 18, (j + 1) * CELLSIZE - 18,
36, 36, &dcMemBlack, 0, 0, SRCPAINT);
}
//画上一步棋子的位置
if(i == m_ptLastStep.x &&
j == m_ptLastStep.y &&
m_nCoords[i][j] != 0)
{
CPen pen(PS_SOLID, 1, RGB(192, 0, 0));
CPen* pOldPen = dc.SelectObject(&pen);
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle((i + 1) * CELLSIZE - 18,(j + 1) * CELLSIZE - 18,
(i + 1) * CELLSIZE + 18,(j + 1) * CELLSIZE + 18);
dc.SelectObject(pOldPen);
}
}
//将位图选回内存设备环境
dcMemWhite.SelectObject(pOld1);
dcMemBlack.SelectObject(pOld2);
dcMemMask.SelectObject(pOld3);
}
int CClientView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
return 0;
}
/*
* 初始化
*/
void CClientView::OnInitialUpdate()
{
CView::OnInitialUpdate();
//连接服务器
if(FALSE == ConnectServer())
{
GetParent()->GetParent()->PostMessage(WM_NCDESTROY);
return;
}
//开始监听
if(FALSE == BeginListen())
{
GetParent()->GetParent()->PostMessage(WM_NCDESTROY);
return;
}
//设置客户端运行状态
m_bRuning = TRUE;
//创建线程退出事件对象
m_hEventExit = CreateEvent(NULL, TRUE, FALSE, NULL);//手动设置,初始“未传信”状态
//创建线程参数
PTHREADPARAM pThreadParam = new THREADPARA
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
vc平台下 网络五子棋 完整源码 (116个子文件)
bkwood.bmp 1.17MB
white.bmp 4KB
mask.bmp 4KB
black.bmp 4KB
Client.clw 4KB
Server.clw 2KB
ClientView.cpp 33KB
ServerDlg.cpp 20KB
UserView.cpp 7KB
Client.cpp 4KB
ServerSocket.cpp 4KB
ClientSocket.cpp 3KB
MainFrm.cpp 3KB
RenjuSocket.cpp 2KB
Server.cpp 2KB
ClientDoc.cpp 2KB
ServerAddrDlg.cpp 2KB
LoginDlg.cpp 2KB
MySplitterWnd.cpp 1KB
UserInfo.cpp 1019B
UserInfo.cpp 962B
StdAfx.cpp 208B
StdAfx.cpp 208B
cursor2.cur 766B
hnwse.cur 766B
Thumbs.db 22KB
Thumbs.db 12KB
Client.dsp 6KB
Server.dsp 5KB
Client.dsw 537B
Server.dsw 537B
Client.exe 1.58MB
Server.exe 128KB
ClientView.h 4KB
ServerDlg.h 3KB
StdAfx.h 3KB
StdAfx.h 2KB
UserView.h 2KB
MainFrm.h 2KB
resource.h 2KB
ServerAddrDlg.h 1KB
ClientDoc.h 1KB
LoginDlg.h 1KB
Client.h 1KB
Server.h 1KB
ClientSocket.h 1KB
ServerSocket.h 1008B
resource.h 956B
UserInfo.h 883B
UserInfo.h 865B
RenjuSocket.h 863B
MySplitterWnd.h 751B
Client.ico 1KB
ClientDoc.ico 1KB
Renju.ico 1KB
RenjuDoc.ico 1KB
chatter1.ico 1KB
Server.ico 1KB
Duck.ico 1KB
icon3.ico 766B
icon1.ico 766B
icon1.ico 766B
icon2.ico 766B
icon3.ico 766B
vc60.idb 249KB
vc60.idb 209KB
Client.ilk 511KB
Server.ilk 292KB
Client.ncb 73KB
Server.ncb 57KB
StdAfx.obj 121KB
StdAfx.obj 109KB
ClientView.obj 88KB
ServerDlg.obj 71KB
UserView.obj 40KB
Client.obj 23KB
MainFrm.obj 22KB
ServerAddrDlg.obj 16KB
Server.obj 16KB
LoginDlg.obj 16KB
ClientDoc.obj 15KB
ServerSocket.obj 14KB
ClientSocket.obj 13KB
MySplitterWnd.obj 13KB
UserInfo.obj 9KB
UserInfo.obj 9KB
RenjuSocket.obj 7KB
Server.opt 54KB
Client.opt 53KB
Client.pch 7.07MB
Server.pch 5.38MB
Client.pdb 457KB
vc60.pdb 388KB
vc60.pdb 364KB
Server.pdb 337KB
Client.plg 246B
Server.plg 246B
Client.rc 11KB
Server.rc 7KB
Client.rc2 398B
共 116 条
- 1
- 2
资源评论
yang8961
- 粉丝: 6
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功