📄 queennview.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 + -