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

📄 queennview.cpp

📁 采用c++编写,上机运行通过的N皇后实现代码,绝对可用
💻 CPP
字号:
// QueenNView.cpp : implementation of the CQueenNView class
//

#include "stdafx.h"
#include "QueenN.h"

#include "QueenNDoc.h"
#include "QueenNView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CQueenNView

IMPLEMENT_DYNCREATE(CQueenNView, CScrollView)

BEGIN_MESSAGE_MAP(CQueenNView, CScrollView)
	//{{AFX_MSG_MAP(CQueenNView)
	ON_WM_HSCROLL()
	ON_WM_VSCROLL()
	ON_COMMAND(ID_BUTTON_RUN, OnButtonRun)
	ON_COMMAND(ID_BUTTON_ADD, OnButtonAdd)
	ON_UPDATE_COMMAND_UI(ID_BUTTON_ADD, OnUpdateButtonAdd)
	ON_COMMAND(ID_BUTTON_SUB, OnButtonSub)
	ON_UPDATE_COMMAND_UI(ID_BUTTON_SUB, OnUpdateButtonSub)
	ON_COMMAND(ID_BUTTON_BACK, OnButtonBack)
	ON_UPDATE_COMMAND_UI(ID_BUTTON_BACK, OnUpdateButtonBack)
	ON_COMMAND(ID_BUTTON_NEXT, OnButtonNext)
	ON_UPDATE_COMMAND_UI(ID_BUTTON_NEXT, OnUpdateButtonNext)
	ON_COMMAND(ID_BUTTON_SAVE, OnButtonSave)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CQueenNView construction/destruction

CQueenNView::CQueenNView()
{
	m_strTitle = "N皇后问题动态演示";
	m_iCount = 8;
	m_pQueen = new CQueen(m_iCount);
}

CQueenNView::~CQueenNView()
{
	delete m_pQueen;
}


/////////////////////////////////////////////////////////////////////////////
// CQueenNView drawing

void CQueenNView::OnDraw(CDC* pDC)
{
	CQueenNDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	m_pQueen->DrawQueenN(pDC);
}

void CQueenNView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	SetScrollSizes(MM_TEXT, m_pQueen->GetQueenGridSize());
}

/////////////////////////////////////////////////////////////////////////////
// CQueenNView diagnostics

#ifdef _DEBUG
void CQueenNView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CQueenNView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CQueenNDoc* CQueenNView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CQueenNDoc)));
	return (CQueenNDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CQueenNView message handlers

void CQueenNView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	Invalidate();
	CScrollView::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CQueenNView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	Invalidate();
	CScrollView::OnVScroll(nSBCode, nPos, pScrollBar);
}

UINT ComputePlace(LPVOID pParam)
{
	CQueenNView* view = (CQueenNView *)pParam;
	view->m_pQueen->ComputQueenPlace(0 , view);
	CString msg;
	msg.Format("N皇后问题动态演示 共计算有%d个结果" , view->m_pQueen->GetListSize());
	::AfxGetMainWnd()->SetWindowText(msg);
	return 0;
}

void CQueenNView::OnButtonRun() 
{
	AfxBeginThread(ComputePlace, (LPVOID)this);
}

void CQueenNView::OnButtonAdd() 
{
	if (m_iCount < 15 )
	{
		m_pQueen->SetRow(++m_iCount);
	}
	Invalidate();
	CString msg;
	msg.Format("%d皇后问题动态演示" , m_iCount);
	::AfxGetMainWnd()->SetWindowText(msg);
	SetScrollSizes(MM_TEXT, m_pQueen->GetQueenGridSize());
}

void CQueenNView::OnUpdateButtonAdd(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_iCount < 15);
}

void CQueenNView::OnButtonSub() 
{
	if (m_iCount > 4 )
	{
		m_pQueen->SetRow(--m_iCount);
	}
	Invalidate();
	CString msg;
	msg.Format("%d皇后问题动态演示" , m_iCount);
	::AfxGetMainWnd()->SetWindowText(msg);
	SetScrollSizes(MM_TEXT, m_pQueen->GetQueenGridSize());
}

void CQueenNView::OnUpdateButtonSub(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_iCount > 4);
}

void CQueenNView::OnButtonBack() 
{
	m_pQueen->DrawList(m_pQueen->GetDrawIndex() - 1);
	m_strTitle.Format("%d皇后问题动态演示 共计算有%d个结果 当前显示第%d个" , m_iCount , m_pQueen->GetListSize() , m_pQueen->GetDrawIndex() + 1);
	AfxGetMainWnd()->SetWindowText(m_strTitle);
	Invalidate();
}

void CQueenNView::OnUpdateButtonBack(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_pQueen->GetDrawIndex() > -1);
}

void CQueenNView::OnButtonNext() 
{
	m_pQueen->DrawList(m_pQueen->GetDrawIndex() + 1);
	m_strTitle.Format("%d皇后问题动态演示 共计算有%d个结果 当前显示第%d个" , m_iCount , m_pQueen->GetListSize() , m_pQueen->GetDrawIndex() + 1);
	AfxGetMainWnd()->SetWindowText(m_strTitle);
	Invalidate();
}

void CQueenNView::OnUpdateButtonNext(CCmdUI* pCmdUI)
{
	pCmdUI->Enable(m_pQueen->GetDrawIndex() < m_pQueen->GetListSize() - 1);
}

void CQueenNView::OnButtonSave() 
{
	m_pQueen->SaveToBMPFile();
}

⌨️ 快捷键说明

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