📄 chinesechessdlg.cpp
字号:
for(i=0;i<10;i++)
for(j=0;j<9;j++)
fscanf(fp,"%3d",&m_byChessBoard[i][j]);
fclose(fp);
for(i=7;i<10;i++)
for(j=3;j<6;j++)
{
if(m_byChessBoard[i][j]==BlackKing)
{
nUserChessColor=BLACKCHESS;
break;
}
if(m_byChessBoard[i][j]==RedKing)
{
nUserChessColor=REDCHESS;
break;
}
}
m_bIsBegin=false;
//刷新屏幕
InvalidateRect(NULL,FALSE);
UpdateWindow();
}
void CChineseChessDlg::OnSave()
{
CFileDialog m_SaveDlg(false,NULL,"",0,"残局(*.cm)|*.cm||");
if(m_SaveDlg.DoModal()==IDCANCEL)
return;
CString strCMFile;
char* pCMFile;
FILE* fp;
int i,j;
strCMFile=m_SaveDlg.GetPathName();
pCMFile=(LPSTR)(LPCTSTR)strCMFile;
fp=fopen(pCMFile,"w");
if(fp==NULL)
{
MessageBox("打开文件出错","错误提示",MB_ICONWARNING);
return;
}
for(i=0;i<10;i++)
{
for(j=0;j<9;j++)
fprintf(fp,"%-3d",m_byChessBoard[i][j]);
fprintf(fp,"\n");
}
fclose(fp);
InvalidateRect(NULL,TRUE);
UpdateWindow();
InvalidateRect(NULL,FALSE);
UpdateWindow();
}
void CChineseChessDlg::OnBkg()
{
CFileDialog m_OpenDlg(TRUE,NULL,"",0,"背景图片(*.bmp)|*.bmp||");
if(m_OpenDlg.DoModal()==IDCANCEL)
return;
CString strFileName=m_OpenDlg.GetPathName();
if(!strFileName.IsEmpty())
m_hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),strFileName,IMAGE_BITMAP,
0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
CDC* pDC=GetDC();
OnEraseBkgnd(pDC);
InvalidateRect(NULL,TRUE);
UpdateWindow();
}
void CChineseChessDlg::DrawChessBoard(CDC* dc)
{
#define BH 2*BoarderHeight
#define BW 2*BoarderWidth
CPen pen;
pen.CreatePen(0,1,m_ChessBoardColor);
CPen* pOldPen=dc->SelectObject(&pen);
int i;
for (i=BH;i<BH+10*GridHeight;i+=GridHeight)//横行
{
dc->MoveTo(BW,i);
dc->LineTo(BW+8*GridWidth,i);
}
//边框
//-------------------------------------------------------------------------
dc->MoveTo(BW,BH);
dc->LineTo(BW,BH+9*GridHeight);//左里
dc->MoveTo(BW+8*GridWidth,BH);
dc->LineTo(BW+8*GridWidth,BH+9*GridHeight);//右里
dc->MoveTo(BW-2,BH-2);//左外
dc->LineTo(BW-2,BH+9*GridHeight+2);
dc->MoveTo(BW+8*GridWidth+2,BH-2);//右外
dc->LineTo(BW+8*GridWidth+2,BH+9*GridHeight+2);
dc->MoveTo(BW-2,BH-2);
dc->LineTo(BW+8*GridWidth+2,BH-2);
dc->MoveTo(BW-2,BH+9*GridHeight+2);
dc->LineTo(BW+8*GridWidth+2,BH+9*GridHeight+2);
//---------------------------------------------------------------------------
//士宫
//----------------------------------------------------------------------------
dc->MoveTo(BW+3*GridWidth,BH);
dc->LineTo(BW+5*GridWidth,BH+2*GridHeight);
dc->MoveTo(BW+5*GridWidth,BH);
dc->LineTo(BW+3*GridWidth,BH+2*GridHeight);
dc->MoveTo(BW+3*GridWidth,BH+7*GridHeight);
dc->LineTo(BW+5*GridWidth,BH+9*GridHeight);
dc->MoveTo(BW+5*GridWidth,BH+7*GridHeight);
dc->LineTo(BW+3*GridWidth,BH+9*GridHeight);
//-----------------------------------------------------------------------------
for (i=BW+GridWidth;i<BW+8*GridWidth;i+=GridWidth)//列
{
dc->MoveTo(i,BH);
dc->LineTo(i,BH+4*GridHeight);
dc->MoveTo(i,BH+5*GridHeight);
dc->LineTo(i,BH+9*GridHeight);
}
CPen pen1;
pen1.CreatePen(0,1,RGB(252,0,0));
dc->SelectObject(&pen1);
//炮位位置的星号
DrawStar(dc,BW+GridWidth,BH+2*GridHeight);
DrawStar(dc,BW+7*GridWidth,BH+2*GridHeight);
DrawStar(dc,BW+GridWidth,BH+7*GridHeight);
DrawStar(dc,BW+7*GridWidth,BH+7*GridHeight);
//中间卒位置的星号
for(i=2;i<7;i+=2)
{
DrawStar(dc,BW+i*GridWidth,BH+3*GridHeight);
DrawStar(dc,BW+i*GridWidth,BH+6*GridHeight);
}
//边上的星号
//左上
dc->MoveTo(BW+15,BH+3*GridHeight+2);
dc->LineTo(BW+2,BH+3*GridHeight+2);
dc->LineTo(BW+2,BH+3*GridHeight+15);
dc->MoveTo(BW+15,BH+3*GridHeight-2);
dc->LineTo(BW+2,BH+3*GridHeight-2);
dc->LineTo(BW+2,BH+3*GridHeight-15);
//左下
dc->MoveTo(BW+15,BH+6*GridHeight+2);
dc->LineTo(BW+2,BH+6*GridHeight+2);
dc->LineTo(BW+2,BH+6*GridHeight+15);
dc->MoveTo(BW+15,BH+6*GridHeight-2);
dc->LineTo(BW+2,BH+6*GridHeight-2);
dc->LineTo(BW+2,BH+6*GridHeight-15);
//右上
dc->MoveTo(BW+8*GridWidth-15,BH+3*GridHeight+2);
dc->LineTo(BW+8*GridWidth-2,BH+3*GridHeight+2);
dc->LineTo(BW+8*GridWidth-2,BH+3*GridHeight+15);
dc->MoveTo(BW+8*GridWidth-15,BH+3*GridHeight-2);
dc->LineTo(BW+8*GridWidth-2,BH+3*GridHeight-2);
dc->LineTo(BW+8*GridWidth-2,BH+3*GridHeight-15);
//右下
dc->MoveTo(BW+8*GridWidth-15,BH+6*GridHeight+2);
dc->LineTo(BW+8*GridWidth-2,BH+6*GridHeight+2);
dc->LineTo(BW+8*GridWidth-2,BH+6*GridHeight+15);
dc->MoveTo(BW+8*GridWidth-15,BH+6*GridHeight-2);
dc->LineTo(BW+8*GridWidth-2,BH+6*GridHeight-2);
dc->LineTo(BW+8*GridWidth-2,BH+6*GridHeight-15);
dc->SelectObject(pOldPen);
pen.DeleteObject();
//楚河,汉界
CFont font;
LOGFONT lf;
CString str1(_T("楚河")),str2(_T("汉界"));
dc->SetBkMode(TRANSPARENT);
dc->SetTextColor(RGB(255,10,10));
memset(&lf,0,sizeof(LOGFONT));
lf.lfHeight =-20;
lf.lfWidth =25;
// lf.lfEscapement =3.1514926;
lf.lfWeight=900;
lf.lfClipPrecision =CLIP_LH_ANGLES;
strcpy(lf.lfFaceName,"华文行楷");
//lf.lfEscapement =
font.CreateFontIndirect(&lf);
CFont* pOldFont =dc->SelectObject(&font);
dc->TextOut(BW+GridWidth,BH+4*GridHeight+15,str1);
lf.lfEscapement =1800;
dc->TextOut(BW+4*GridWidth,BH+4*GridHeight+15,str2);
dc->SelectObject(pOldFont);
font.DeleteObject();
}
void CChineseChessDlg::DrawStar(CDC* dc,int x,int y)
{
dc->MoveTo(x-15,y-2);//左上
dc->LineTo(x-2,y-2);
dc->LineTo(x-2,y-15);
dc->MoveTo(x-15,y+2);//左下
dc->LineTo(x-2,y+2);
dc->LineTo(x-2,y+15);
dc->MoveTo(x+2,y-15);//右上
dc->LineTo(x+2,y-2);
dc->LineTo(x+15,y-2);
dc->MoveTo(x+2,y+15);//右下
dc->LineTo(x+2,y+2);
dc->LineTo(x+15,y+2);
}
void CChineseChessDlg::OnDiff0()
{
m_pSE->SetSearchDepth(2); //设定搜索层数为2
}
void CChineseChessDlg::OnDiff1()
{
m_pSE->SetSearchDepth(3); //设定搜索层数为3
}
void CChineseChessDlg::OnDiff2()
{
m_pSE->SetSearchDepth(4); //设定搜索层数为4
}
void CChineseChessDlg::OnDiff3()
{
m_pSE->SetSearchDepth(5); //设定搜索层数为5
}
void CChineseChessDlg::OnDiff4()
{
m_pSE->SetSearchDepth(6); //设定搜索层数为6
}
void CChineseChessDlg::OnHelpAuthor()
{
CString URL="mailto:chxzhou012@126.com";
HINSTANCE hRun = ShellExecute(GetParent()->GetSafeHwnd(), _T("open"), URL, NULL, NULL, SW_SHOW);
if ((int) hRun <= 32)
{
AfxMessageBox(_T("无法打开"));
}
}
void CChineseChessDlg::OnHelpChesechess()
{
// TODO: Add your command handler code here
CAboutDlg dlg;
if(dlg.DoModal()==IDOK)
{
}
}
void CChineseChessDlg::OnHelpCchessnet()
{
// TODO: Add your command handler code here
CString URL="http://www.zgxqds.com";
HINSTANCE hRun = ShellExecute(GetParent()->GetSafeHwnd(), _T("open"), URL, NULL, NULL, SW_SHOW);
if ((int) hRun <= 32)
{
AfxMessageBox(_T("无法打开"));
}
}
void CChineseChessDlg::OnHelpCumt()
{
// TODO: Add your command handler code here
CString URL="http://www.cumt.edu.cn";
HINSTANCE hRun = ShellExecute(GetParent()->GetSafeHwnd(), _T("open"), URL, NULL, NULL, SW_SHOW);
if ((int) hRun <= 32)
{
AfxMessageBox(_T("无法打开"));
}
}
void CChineseChessDlg::OnHelpLearn()
{
// TODO: Add your command handler code here
CString URL="/用户帮助手册.CHM";
HINSTANCE hRun = ShellExecute(GetParent()->GetSafeHwnd(), _T("open"), URL, NULL, NULL, SW_SHOW);
if ((int) hRun <= 32)
{
AfxMessageBox(_T("无法打开"));
}
}
UINT BkSoundProc(LPVOID parm)
{
PlaySound((LPCTSTR)IDR_BKSOUND,NULL,SND_LOOP|SND_RESOURCE|SND_SYNC);
return 0;
}
void CChineseChessDlg::OnSetBksound()
{
// TODO: Add your command handler code here
m_BkSound++;
if(m_BkSound%2)
{
HWND hWnd=GetSafeHwnd();
AfxBeginThread(BkSoundProc,hWnd,THREAD_PRIORITY_NORMAL);
}
else
{
// AfxEndThread(0);
}
}
void CChineseChessDlg::OnChessChessBoardColor()
{
CColorDialog dlg;
if(dlg.DoModal()==IDOK)
{
m_ChessBoardColor=dlg.GetColor();
CDC* pDC;
pDC=GetDC();
OnEraseBkgnd(pDC);
InvalidateRect(NULL,FALSE);
}
}
void CChineseChessDlg::OnTuoPan(WPARAM wParam,LPARAM lParam)
{
UINT uMouseMsg;//鼠标动作
uMouseMsg=(UINT) lParam;
if(uMouseMsg==WM_LBUTTONDOWN)//如果是单击左键
{
if(m_bShow)
{
OnHide();
}
else
{
OnShow();
}
}
if(uMouseMsg==WM_RBUTTONDOWN)//如果是单击右键
{
AfxGetMainWnd()->SetForegroundWindow(); //弹出Popup菜单
CMenu menu;
menu.LoadMenu(IDR_SYSTRAYMENU);
CMenu* pPopup=menu.GetSubMenu(0);
CPoint Point;
GetCursorPos(&Point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN,
Point.x,Point.y,AfxGetMainWnd(),NULL );
AfxGetMainWnd()->PostMessage(WM_NULL, 0, 0);
}
}
void CChineseChessDlg::OnSetReset()
{
OnNewGame();
}
void CChineseChessDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
m_Menu.DrawItem(lpDrawItemStruct);
m_RMenu.DrawItem(lpDrawItemStruct);
CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
void CChineseChessDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)
{
// TODO: Add your message handler code here and/or call default
m_Menu.MeasureItem(lpMeasureItemStruct);
m_RMenu.MeasureItem(lpMeasureItemStruct);
CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct);
}
void CChineseChessDlg::OnInitMenu(CMenu* pMenu)
{
CDialog::OnInitMenu(pMenu);
// TODO: Add your message handler code here
}
void CChineseChessDlg::OnInitMenuPopup(CMenu* pPopupMenu, UINT nIndex, BOOL bSysMenu)
{
CDialog::OnInitMenuPopup(pPopupMenu, nIndex, bSysMenu);
// TODO: Add your message handler code here
}
int CChineseChessDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rect(435,90,600,320);
if(!m_MyCpuCtrl.Create(WS_CHILD | WS_VISIBLE,rect, this, IDC_CPUCTL))
{
TRACE0("Create m_MyCtrl Failed!");
return 0;
}
return 0;
}
void CChineseChessDlg::OnCpuandmem()
{
CCpuAndMemory* dlg=new CCpuAndMemory;
dlg->Create(IDD_DIALOG_CPUMEMORY,NULL);
dlg->ShowWindow(SW_SHOW);
dlg->UpdateWindow();
}
void CChineseChessDlg::OnClose()
{
// TODO: Add your message handler code here and/or call default
NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=AfxGetMainWnd()->m_hWnd;
tnid.uID=IDR_MAINFRAME;//保证删除的是我们的图标
Shell_NotifyIcon(NIM_DELETE,&tnid);
CDialog::OnClose();
}
void CChineseChessDlg::OnShow()
{
PostMessage(WM_SYSCOMMAND,SC_RESTORE,NULL);
}
void CChineseChessDlg::OnHide()
{
PostMessage(WM_SYSCOMMAND,SC_MINIMIZE,NULL);
}
void CChineseChessDlg::OnExit()
{
AfxGetMainWnd()->PostMessage(WM_CLOSE); //退出程序
}
void CChineseChessDlg::OnLinkServer1()
{
// TODO: Add your command handler code here
IsNetBattle=TRUE;
// OnNetCreate();
m_ConnectSocket.Create();
if(m_ConnectSocket.Connect(m_GameSerIP,m_GameSerPort))
{
m_bIsInitToServer=TRUE;
m_bIsInit=TRUE;
m_ConnectSocket.Init();
CPlayerList player;
if(player.DoModal() == IDOK)
{
}
CMyMessage temp;
temp.iFlag=1;
temp.m_iServerFlag=2;
m_ConnectSocket.SendMessage(&temp);
AfxMessageBox("已进入服务器1 ");
}
else
{
m_ConnectSocket.Close();
AfxMessageBox("连接服务器失败!");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -