⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 五子棋源码,非常经典的游戏,也算是初学DELPHI的朋友必须了解的东西,可以加强逻辑思维,提高编程的严密性
💻 CPP
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//

#include "stdafx.h"

#include "game.h"
#include "Five.h"

#include "MainFrm.h"
#include "SetDlg.h"
#include "exitdlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMainFrame
static UINT BASED_CODE indicators[] =
{
	ID_SEPARATOR,           // status line indicator
//	ID_INDICATOR_CAPS,
//	ID_INDICATOR_NUM,
//	ID_INDICATOR_SCRL,
};

static UINT BASED_CODE playId[] =
{       
	    ID_BUTTON_HUI,
		ID_BUTTON_DIN,
		ID_BUTTON_QIAN,
		ID_BUTTON_XIA,
	    ID_SEPARATOR,           // status line indicator
		IDC_STEPBOX,
};

static UINT BASED_CODE mainId[] =
{
	ID_FILE_NEW,
    ID_FILE_OPEN,
	ID_FILE_SAVE,
	ID_SEPARATOR,           // status line indicator
	ID_APP_ABOUT,
};

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	//{{AFX_MSG_MAP(CMainFrame)
	ON_WM_CREATE()
	ON_WM_CLOSE()
	ON_COMMAND(ID_PARAM_SET, OnParamSet)
	ON_COMMAND(ID_VIEW_TOOLBAR1, OnViewToolbar1)
	ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR1, OnUpdateViewToolbar1)
	ON_COMMAND(ID_BUTTON_HUI, OnButtonHui)
	ON_COMMAND(ID_VIEW_TOOLBAR, OnViewToolbar)
	ON_UPDATE_COMMAND_UI(ID_VIEW_TOOLBAR, OnUpdateViewToolbar)
	ON_COMMAND(ID_BUTTON_DIN, OnButtonDin)
	ON_COMMAND(ID_BUTTON_QIAN, OnButtonQian)
	ON_COMMAND(ID_BUTTON_XIA, OnButtonXia)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

static TCHAR BASED_CODE szSection[] = _T("Settings");
static TCHAR BASED_CODE szWindowPos[] = _T("WindowPos");
static TCHAR BASED_CODE szDump[] = _T("Dump");
static TCHAR BASED_CODE szSreach[] = _T("Sreach");

static TCHAR szFormat[] = _T("%u,%u,%d,%d,%d,%d,%d,%d,%d,%d");
static TCHAR szDumpFormat[] = _T("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d");
static TCHAR szSreachFormat[] = _T("%d,%d,%d,%d");

static void ReadGameParam( CFive& f )
{
	int WF0_1,WF0_2,WF0_3,WF0_4;
	int WF1_1,WF1_2,WF1_3,WF1_4;
	int WF2_3,WF2_4,WF5;
	int Deep,Breadth,Thread,Delta;
	CString strBuffer;
	TCHAR Def[250];
	wsprintf( Def,szDumpFormat,2,50,500,5000,1,20,150,600,400,450,30000 );
	strBuffer = AfxGetApp()->GetProfileString(szSection, szDump,Def );
	_stscanf( strBuffer,szDumpFormat,&WF0_1,&WF0_2,&WF0_3,&WF0_4,
		&WF1_1,&WF1_2,&WF1_3,&WF1_4,&WF2_3,&WF2_4,&WF5 );
	f.SetDump(1,0,WF0_1);
	f.SetDump(2,0,WF0_2);
	f.SetDump(3,0,WF0_3);
	f.SetDump(4,0,WF0_4);
	f.SetDump(1,1,WF1_1);
	f.SetDump(2,1,WF1_2);
	f.SetDump(3,1,WF1_3);
	f.SetDump(4,1,WF1_4);
	f.SetDump(3,2,WF2_3);
	f.SetDump(4,2,WF2_4);
	f.SetDump(5,5,WF5);
	wsprintf( Def,szSreachFormat,10,4,0,2 );
	strBuffer = AfxGetApp()->GetProfileString(szSection,szSreach,Def );
	_stscanf( strBuffer,szSreachFormat,&Breadth,&Deep,&Thread,&Delta );
	f.SetParam( Breadth,Deep,Thread,Delta );
}

static void WriteGameParam( CFive& f )
{
	int WF0_1,WF0_2,WF0_3,WF0_4;
	int WF1_1,WF1_2,WF1_3,WF1_4;
	int WF2_3,WF2_4,WF5;
	int Deep,Breadth,Thread,Delta;
	TCHAR Buf[250];
	WF0_1 = f.GetDump(1,0);
	WF0_2 = f.GetDump(2,0);
	WF0_3 = f.GetDump(3,0);
	WF0_4 = f.GetDump(4,0);
	WF1_1 = f.GetDump(1,1);
	WF1_2 = f.GetDump(2,1);
	WF1_3 = f.GetDump(3,1);
	WF1_4 = f.GetDump(4,1);
	WF2_3 = f.GetDump(3,2);
	WF2_4 = f.GetDump(4,2);
	WF5   = f.GetDump(5,5);

	wsprintf( Buf,szDumpFormat,WF0_1,WF0_2,WF0_3,WF0_4,
		WF1_1,WF1_2,WF1_3,WF1_4,WF2_3,WF2_4,WF5 );
	AfxGetApp()->WriteProfileString( szSection,szDump,Buf );
	f.GetParam( Breadth,Deep,Thread,Delta );
	wsprintf( Buf,szSreachFormat,Breadth,Deep,Thread,Delta );
	AfxGetApp()->WriteProfileString( szSection,szSreach,Buf );
}

static BOOL PASCAL NEAR ReadWindowPlacement(LPWINDOWPLACEMENT pwp)
{
	CString strBuffer = AfxGetApp()->GetProfileString(szSection, szWindowPos);
	if (strBuffer.IsEmpty())
		return FALSE;

	WINDOWPLACEMENT wp;
	int nRead = _stscanf(strBuffer, szFormat,
		&wp.flags, &wp.showCmd,
		&wp.ptMinPosition.x, &wp.ptMinPosition.y,
		&wp.ptMaxPosition.x, &wp.ptMaxPosition.y,
		&wp.rcNormalPosition.left, &wp.rcNormalPosition.top,
		&wp.rcNormalPosition.right, &wp.rcNormalPosition.bottom);

	if (nRead != 10)
		return FALSE;

	wp.length = sizeof wp;
	*pwp = wp;
	return TRUE;
}

static void PASCAL NEAR WriteWindowPlacement(LPWINDOWPLACEMENT pwp)
	// write a window placement to settings section of app's ini file
{
	TCHAR szBuffer[sizeof("-32767")*8 + sizeof("65535")*2];

	wsprintf(szBuffer, szFormat,
		pwp->flags, pwp->showCmd,
		pwp->ptMinPosition.x, pwp->ptMinPosition.y,
		pwp->ptMaxPosition.x, pwp->ptMaxPosition.y,
		pwp->rcNormalPosition.left, pwp->rcNormalPosition.top,
		pwp->rcNormalPosition.right, pwp->rcNormalPosition.bottom);
	AfxGetApp()->WriteProfileString(szSection, szWindowPos, szBuffer);
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction

CMainFrame::CMainFrame()
{
	// TODO: add member initialization code here
	
}

CMainFrame::~CMainFrame()
{
}

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	cs.style &= ~FWS_ADDTOTITLE;

	return CFrameWnd::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMainFrame diagnostics

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMainFrame message handlers


 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	ReadGameParam( m_Five );

	WINDOWPLACEMENT wp;
	if (ReadWindowPlacement(&wp))
		SetWindowPlacement(&wp);

	if (!m_wndToolBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_SIZE_DYNAMIC |
			CBRS_TOP |CBRS_TOOLTIPS | CBRS_FLYBY, IDR_TOOLBAR_MAIN ) ||
		!m_wndToolBar.LoadBitmap( IDB_BITMAP_MAIN ) ||
		!m_wndToolBar.SetButtons( mainId, sizeof(mainId)/sizeof(UINT)))
	{
		TRACE0("Failed to create resourcebar\n");
		return -1;      // fail to create
	}

	if (!m_wndPlayBar.Create(this, WS_CHILD | WS_VISIBLE | CBRS_SIZE_FIXED |
		CBRS_TOP |CBRS_TOOLTIPS | CBRS_FLYBY, IDR_TOOLBAR_PLAY ) ||
		!m_wndPlayBar.LoadBitmap( IDB_BITMAP_PLAY ) ||
		!m_wndPlayBar.SetButtons( playId, sizeof(playId)/sizeof(UINT)))
	{
		TRACE0("Failed to create resourcebar\n");
		return -1;      // fail to create
	}

	CRect rect(-100, -100, 0, 0);
	if (!m_wndStepBox.Create(WS_CHILD |CBS_DROPDOWNLIST|
		CBS_AUTOHSCROLL | WS_VSCROLL | CBS_HASSTRINGS, rect, &m_wndPlayBar,
		IDC_STEPBOX))
	{
		return -1;
	}
	m_wndPlayBar.SetButtonInfo(5, IDC_STEPBOX, TBBS_SEPARATOR, 100);
	if (m_wndStepBox.m_hWnd != NULL)
	{
		CRect rect;
		m_wndPlayBar.GetItemRect(5, rect);
		
		m_wndStepBox.SetWindowPos(NULL, rect.left, rect.top, 0, 0, SWP_NOZORDER|SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOCOPYBITS);
		m_wndStepBox.ShowWindow(SW_SHOW);
	}
	else
		return -1;

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create status bar\n");
		return -1;      // fail to create
	}

	m_wndToolBar.SetWindowText(_T("通用工具"));
	m_wndToolBar.EnableDocking( CBRS_ALIGN_ANY );
	m_wndPlayBar.SetWindowText(_T("特殊工具"));
	m_wndPlayBar.EnableDocking( CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM );
	
	EnableDocking( CBRS_ALIGN_ANY );

	DockControlBar( &m_wndToolBar,AFX_IDW_DOCKBAR_TOP);
	DockControlBarLeftOf(&m_wndPlayBar,&m_wndToolBar);

	LoadBarState(_T("General"));

	// TODO: Add your specialized creation code here
	return 0;
}

 void CMainFrame::DockControlBarLeftOf(CToolBar* Bar,CToolBar* LeftOf)
{
	CRect rect;
	DWORD dw;
	UINT n;

	// get MFC to adjust the dimensions of all docked ToolBars
	// so that GetWindowRect will be accurate
	RecalcLayout();
	LeftOf->GetWindowRect(&rect);
	rect.OffsetRect(1,0);
	dw=LeftOf->GetBarStyle();
	n = 0;
	n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
	n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
	n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
	n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;

	// When we take the default parameters on rect, DockControlBar will dock
	// each Toolbar on a seperate line.  By calculating a rectangle, we in effect
	// are simulating a Toolbar being dragged to that location and docked.
	DockControlBar(Bar,n,&rect);
}

LRESULT CMainFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	if( message == WM_CLOSE )
	{
		CExitDlg dlg;
		if( dlg.DoModal() != IDOK )
			return FALSE;
	}
	return CFrameWnd::WindowProc(message, wParam, lParam);
}

void CMainFrame::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
	SaveBarState(_T("General"));	

	WINDOWPLACEMENT wp;
	wp.length = sizeof wp;
//	WriteGameParam( m_Five );
	if (GetWindowPlacement(&wp))
	{
		wp.flags = 0;
		if (IsZoomed())
			wp.flags |= WPF_RESTORETOMAXIMIZED;
		// and write it to the .INI file
		WriteWindowPlacement(&wp);
	}

	CFrameWnd::OnClose();
}

void CMainFrame::OnParamSet() 
{
	// TODO: Add your command handler code here
	CSetDlg d;
	d.WF0_1 = m_Five.GetDump(1,0);
	d.WF0_2 = m_Five.GetDump(2,0);
	d.WF0_3 = m_Five.GetDump(3,0);
	d.WF0_4 = m_Five.GetDump(4,0);
	d.WF1_1 = m_Five.GetDump(1,1);
	d.WF1_2 = m_Five.GetDump(2,1);
	d.WF1_3 = m_Five.GetDump(3,1);
	d.WF1_4 = m_Five.GetDump(4,1);
	d.WF2_3 = m_Five.GetDump(3,2);
	d.WF2_4 = m_Five.GetDump(4,2);
	d.WF5   = m_Five.GetDump(5,5);
	m_Five.GetParam( d.Breadth,d.Deep,d.Thread,d.Delta );

	if( d.DoModal() == IDOK )
	{
	    m_Five.SetDump(1,0,d.WF0_1);
	    m_Five.SetDump(2,0,d.WF0_2);
	    m_Five.SetDump(3,0,d.WF0_3);
	    m_Five.SetDump(4,0,d.WF0_4);
	    m_Five.SetDump(1,1,d.WF1_1);
	    m_Five.SetDump(2,1,d.WF1_2);
	    m_Five.SetDump(3,1,d.WF1_3);
	    m_Five.SetDump(4,1,d.WF1_4);
	    m_Five.SetDump(3,2,d.WF2_3);
	    m_Five.SetDump(4,2,d.WF2_4);
	    m_Five.SetDump(5,5,d.WF5);
	    m_Five.SetParam( d.Breadth,d.Deep,d.Thread,d.Delta );
		WriteGameParam( m_Five );
	}
}

void CMainFrame::OnViewToolbar1() 
{
	// TODO: Add your command handler code here
	if( m_wndPlayBar.GetStyle()&WS_VISIBLE )
	{
		ShowControlBar( &m_wndPlayBar,FALSE,FALSE );
	}
	else
	{
		ShowControlBar( &m_wndPlayBar,TRUE,FALSE );
	}
}

void CMainFrame::OnUpdateViewToolbar1(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if( m_wndPlayBar.GetStyle()&WS_VISIBLE )
	{
		pCmdUI->SetCheck( 1 );
	}
	else
	{
		pCmdUI->SetCheck( 0 );
	}	
}


void CMainFrame::OnButtonHui() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnViewToolbar() 
{
	// TODO: Add your command handler code here
	if( m_wndToolBar.GetStyle()&WS_VISIBLE )
	{
		ShowControlBar( &m_wndToolBar,FALSE,FALSE );
	}
	else
	{
		ShowControlBar( &m_wndToolBar,TRUE,FALSE );
	}
}

void CMainFrame::OnUpdateViewToolbar(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	if( m_wndToolBar.GetStyle()&WS_VISIBLE )
	{
		pCmdUI->SetCheck( 1 );
	}
	else
	{
		pCmdUI->SetCheck( 0 );
	}		
}

void CMainFrame::OnButtonDin() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnButtonQian() 
{
	// TODO: Add your command handler code here
	
}

void CMainFrame::OnButtonXia() 
{
	// TODO: Add your command handler code here
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -