// ClientView.cpp : implementation of the CClientView class
//
#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 THREADPARAM;
pThreadParam->hClientHwnd = thi
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
精通Windows Sockets网络开发源码 (294个子文件)
Server.aps 43KB
Client.aps 24KB
bkwood.bmp 1.17MB
white.bmp 4KB
mask.bmp 4KB
black.bmp 4KB
Toolbar.bmp 1KB
Toolbar.bmp 478B
Client.clw 4KB
Server.clw 3KB
Client.clw 2KB
Client.clw 2KB
Server.clw 2KB
Server.clw 2KB
Client.clw 2KB
Client.clw 2KB
Server.clw 1KB
ClientView.cpp 33KB
ClientDlg.cpp 29KB
ServerDlg.cpp 25KB
ServerView.cpp 22KB
ServerDlg.cpp 20KB
ServerView.cpp 16KB
ClientDlg.cpp 14KB
Client.cpp 14KB
Client.cpp 14KB
ServerDlg.cpp 13KB
ClientDlg.cpp 11KB
Server.cpp 10KB
ClientDlg.cpp 10KB
ChatDlg.cpp 9KB
ClientContext.cpp 7KB
UserView.cpp 7KB
Server.cpp 6KB
ClientSocket.cpp 6KB
Client.cpp 6KB
Item.cpp 5KB
Example.cpp 5KB
Server.cpp 5KB
Client.cpp 5KB
Server.cpp 5KB
Client.cpp 4KB
ServerSocket.cpp 4KB
ClientSocket.cpp 4KB
LookupSocket.cpp 4KB
UnknWordDlg.cpp 3KB
ClientSocket.cpp 3KB
MainFrm.cpp 3KB
MainFrm.cpp 3KB
Server.cpp 3KB
ClientManager.cpp 3KB
ClientSocket.cpp 3KB
MainFrm.cpp 2KB
Server.cpp 2KB
UserInfo.cpp 2KB
UserInfo.cpp 2KB
Client.cpp 2KB
Server.cpp 2KB
Client.cpp 2KB
RenjuSocket.cpp 2KB
Server.cpp 2KB
Client.cpp 2KB
Client.cpp 2KB
Server.cpp 2KB
ServerDoc.cpp 2KB
ServerAddrDlg.cpp 2KB
ServerAddrDlg.cpp 2KB
ClientDoc.cpp 2KB
ServerAddressDlg.cpp 2KB
ServerDoc.cpp 2KB
ServerAddrDlg.cpp 2KB
LoginDlg.cpp 2KB
ChatPacket.cpp 2KB
ClientLogin.cpp 2KB
ChatPacket.cpp 2KB
EditWordDlg.cpp 2KB
LoginDlg.cpp 2KB
Client.cpp 1KB
Client.cpp 1KB
ChatSocket.cpp 1KB
MySplitterWnd.cpp 1KB
UserInfo.cpp 983B
ListenSocket.cpp 978B
UserInfo.cpp 962B
ListenSocket.cpp 891B
PeerSocket.cpp 846B
StdAfx.cpp 294B
StdAfx.cpp 293B
StdAfx.cpp 293B
StdAfx.cpp 293B
StdAfx.cpp 293B
StdAfx.cpp 293B
StdAfx.cpp 293B
StdAfx.cpp 293B
StdAfx.cpp 293B
StdAfx.cpp 208B
StdAfx.cpp 208B
StdAfx.cpp 208B
StdAfx.cpp 208B
StdAfx.cpp 208B
共 294 条
- 1
- 2
- 3
资源评论
kong326
- 粉丝: 11
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- DSP开发实战教程-国产DSP替代进口TI DSP的使用技巧 进芯DSP替换文件
- 植被恢复能力估算python代码(KNDVI代码).zip
- 基于java打造的深度学习框架,帮助你快速搭建神经网络,实现模型推理与训练,引擎支持自动求导,多线程与GPU运算
- 界线与不动产测绘智能计算经纬度及标注软件
- CANOPEN使用方法与教程
- 极影毁片圆 · 电脑字体设置.zip
- 同态加密部分算法实现Homomorphic-Encryption-main.zip
- helib同态加密socket通信helibsocket-master.zip
- pll_inst.vhd
- 快速入门同态加密homomorphic-encryption-master.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功