📄 testnview.cpp
字号:
// testnView.cpp : implementation of the CTestnView class
//
#include "stdafx.h"
#include "testn.h"
#include "testnDoc.h"
#include "testnView.h"
#include <stdlib.h> //产生随机数用到RAND()
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTestnView
IMPLEMENT_DYNCREATE(CTestnView, CView)
BEGIN_MESSAGE_MAP(CTestnView, CView)
//{{AFX_MSG_MAP(CTestnView)
ON_COMMAND(ID_NUM5, OnNum5)
ON_COMMAND(ID_NUM6, OnNum6)
ON_COMMAND(ID_NUM7, OnNum7)
ON_COMMAND(ID_NUM8, OnNum8)
ON_COMMAND(ID_NUM9, OnNum9)
ON_COMMAND(ID_NUM10, OnNum10)
ON_COMMAND(ID_NUM11, OnNum11)
ON_COMMAND(ID_NUM12, OnNum12)
ON_COMMAND(ID_NUM13, OnNum13)
ON_COMMAND(ID_NUM14, OnNum14)
ON_COMMAND(ID_NUM4, OnNum4)
ON_COMMAND(ID_BEGIN, OnBegin)
ON_WM_LBUTTONDOWN()
ON_COMMAND(ID_COLOR_BLUE, OnColorBlue)
ON_COMMAND(ID_COLOR_CROCI, OnColorCroci)
ON_COMMAND(ID_COLOR_CYAN, OnColorCyan)
ON_COMMAND(ID_COLOR_DARKBLUE, OnColorDarkblue)
ON_COMMAND(ID_COLOR_DARKGREEN, OnColorDarkgreen)
ON_COMMAND(ID_COLOR_DARKRED, OnColorDarkred)
ON_COMMAND(ID_COLOR_GRAY, OnColorGray)
ON_COMMAND(ID_COLOR_GREEN, OnColorGreen)
ON_COMMAND(ID_COLOR_LIGHTBLUE, OnColorLightblue)
ON_COMMAND(ID_COLOR_LIGHTGREEN, OnColorLightgreen)
ON_COMMAND(ID_COLOR_PINK, OnColorPink)
ON_COMMAND(ID_COLOR_PURPLE, OnColorPurple)
ON_COMMAND(ID_COLOR_RED, OnColorRed)
ON_COMMAND(ID_COLOR_YELLOW, OnColorYellow)
ON_COMMAND(ID_RANDCOLOR, OnRandcolor)
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTestnView construction/destruction
CTestnView::CTestnView()
{
// TODO: add construction code here
}
CTestnView::~CTestnView()
{
}
BOOL CTestnView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CTestnView drawing
void CTestnView::OnDraw(CDC* pDC)
{
CTestnDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
// int num = 9;//皇后数目
CString outstr[7];
outstr[1].Format("欢迎使用,此程序为N皇后的简单可视化实现,如有宝贵意见请与QQ369606234联系,希望能得到您的宝贵意见!");
outstr[2].Format("程序调试:samuel 2008.11.22 ");
outstr[3].Format("程序简介: 1.首先应先设置皇后数目;");
outstr[4].Format(" 2.点击开始分析;");
outstr[5].Format(" 3.鼠标左键单击棋盘区域或按键盘任意键,即可显示不同的皇后放置方法;");
outstr[6].Format(" 4.当然也能随时设置改变皇后的颜色,默认为随机颜色,也可以设置为固定颜色.");
pDC->TextOut(150,100,outstr[1]);
pDC->TextOut(600,390,outstr[2]);
pDC->TextOut(300,200,outstr[3]);
pDC->TextOut(333,230,outstr[4]);
pDC->TextOut(333,260,outstr[5]);
pDC->TextOut(333,290,outstr[6]);
m_count = 0 ;
m_clicknum = 0 ;
m_r = 255 ;
m_g = 0;
m_b = 255;
m_totalnum = 0 ;
m_colorflag = false ;
button = false ;
}
/////////////////////////////////////////////////////////////////////////////
// CTestnView printing
BOOL CTestnView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CTestnView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CTestnView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CTestnView diagnostics
#ifdef _DEBUG
void CTestnView::AssertValid() const
{
CView::AssertValid();
}
void CTestnView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CTestnDoc* CTestnView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTestnDoc)));
return (CTestnDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTestnView message handlers
void CTestnView::OnchangeNum()
{
CDC* pDC = GetWindowDC();
CTestnDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//int pointlengthbegin = 80 , point = 80 ;
Onclear();
int i , j ;
length = 670 / (Queennum+1) ;
wigth = 900 / (Queennum+1) ;
for( j = 80 ; j <= (Queennum)*length +80; j += length) //横向直线
{
pDC->MoveTo( 80 , j );
pDC->LineTo( Queennum*wigth +80, j);//900
}
for( j= 80 ; j <= (Queennum)*wigth+80 ; j += wigth)//纵向直线
{
pDC->MoveTo( j , 80 );
pDC->LineTo( j , Queennum * length +80);//670
}
CRect rect;
GetClientRect (rect);
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
pDC->SelectObject(&brush);
bool flag = true ;
for( j = 80 ; j <= (Queennum-1)*length+80; j += length)
{
if(flag == true)
{
for(i = 80 ; i <= (Queennum-1) * wigth+80 ; i += wigth*2 )
{
pDC->Rectangle(i,j,wigth+i,length+j);
}
flag = false ;
}
else
{
for( i = 80 + wigth ; i <= (Queennum-1) * wigth+80 ; i += wigth*2 )
{
pDC->Rectangle(i,j,wigth+i,length+j);
}
flag = true ;
}
}
}
void CTestnView::Onclear()
{
CDC*pDC = GetWindowDC();
CTestnDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CBrush brush;
brush.CreateSolidBrush(RGB(255,255,255));
pDC->SelectObject(&brush);
pDC->Rectangle(0,0,1350,900);
}
void CTestnView::OnNum5()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 5 ;
UpdateData(false);
InitQueenmessage();
//OnchangeNum();
}
void CTestnView::InitQueenmessage()
{
OnTest();
OnchangeNum();
m_clicknum = 0 ;
button = true ;
}
void CTestnView::OnNum6()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 6 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnNum7()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 7 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnNum8()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 8 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnNum9()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 9 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnNum10()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 10 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnNum11()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 11 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnNum12()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 12 ;
InitQueenmessage();
UpdateData(false);
}
void CTestnView::OnNum13()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 13 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnNum14()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 14 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnNum4()
{
// TODO: Add your command handler code here
UpdateData(true);
Queennum = 4 ;
UpdateData(false);
InitQueenmessage();
}
void CTestnView::OnBegin()
{
// TODO: Add your command handler code here
int k;
int n = Queennum;
x[1] = 0;
k = 1;
m_count = 0 ;
while (k>0)
{
x[k] = x[k] + 1;
while (x[k] <= n && place(k) == false)
x[k] = x[k] + 1;
if (x[k] <= n)
if (k == n)
{
if(m_count < m_clicknum)
{
m_count ++;
continue;
}
else
{
OnDrawQueen(x,n);
return;
}
}
else
{
k = k + 1;
x[k] = 0;
}
else
k = k - 1;
}
}
bool CTestnView::place(int k)
{
int i;
i = 1;
while (i<k)
{
if (x[i] == x[k] || (abs(x[i] - x[k]) == abs(i-k)))
return false;
i = i + 1;
}
return true;
}
void CTestnView::OnDrawQueen(int a[20] , int n )
{
CDC*pDC = GetWindowDC();
CTestnDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int y_add = 100 ;
CString outstr[4];
for( int i = 1 ; i <= n ; i ++ )
{
int randnum = rand()%14;
if(!m_colorflag)
switch(randnum)
{
case 0:ColorBlue() ;break;
case 1:ColorCroci() ;break;
case 2:ColorCyan() ;break;
case 3:ColorDarkblue() ;break;
case 4:ColorDarkgreen() ;break;
case 5:ColorDarkred() ;break;
case 6:ColorGray() ;break;
case 7:ColorGreen() ;break;
case 8:ColorLightblue() ;break;
case 9:ColorLightgreen() ;break;
case 10:ColorPink() ;break;
case 11:ColorPurple() ;break;
case 12:ColorRed() ;break;
case 13:ColorYellow() ;break;
}
CBrush brush;
brush.CreateSolidBrush(RGB(m_r,m_g,m_b));//255,0,0
pDC->SelectObject(&brush);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -