📄 pattern_2view.cpp
字号:
// Pattern_2View.cpp : implementation of the CPattern_2View class
//
#include "stdafx.h"
#include "Pattern_2.h"
#include "mDialog1.h"
#include "mDialog3.h"
#include "Pattern_2Doc.h"
#include "Pattern_2View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPattern_2View
IMPLEMENT_DYNCREATE(CPattern_2View, CView)
BEGIN_MESSAGE_MAP(CPattern_2View, CView)
//{{AFX_MSG_MAP(CPattern_2View)
ON_WM_TIMER()
ON_COMMAND(ID_StartPause, OnStartPause)
ON_COMMAND(ID_IFONVIEW, OnIfonview)
ON_WM_DESTROY()
ON_WM_ERASEBKGND()
ON_WM_SIZE()
ON_WM_CREATE()
ON_WM_KEYDOWN()
ON_COMMAND(ID_DataChange, OnDataChange)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CPattern_2View construction/destruction
CPattern_2View::CPattern_2View()
{
// TODO: add construction code here
State=0;
mdc = new CDC;
BackGround=new CBitmap;
BackGround->m_hObject = (HBITMAP)::LoadImage(NULL, "C:\\back.bmp" ,IMAGE_BITMAP,1280,800,LR_LOADFROMFILE);
IfCompatible=0;
IfOnRun=0;
IfOnView=1;
}
CPattern_2View::~CPattern_2View()
{
}
BOOL CPattern_2View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CPattern_2View drawing
void CPattern_2View::OnDraw(CDC * )
{
CPattern_2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
dc=GetDC(); // device context for painting
if ( !IfCompatible)
{
mdc->CreateCompatibleDC( dc ); //建立与操作窗口兼容的 DC
IfCompatible=1;
}
if (State==0)
{
dc->FillSolidRect(0,0,1280,800,0xffffff);
dc->TextOut(100,100,"Please create a file");
return;
}
if(IfOnView!=0)
{
if (State==1) MyDraw(Data);
}
else
{
dc->FillSolidRect(0,0,1280,800,0xffffff);
dc->TextOut(100,100,"Program is running on backstage");
}
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CPattern_2View printing
BOOL CPattern_2View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CPattern_2View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CPattern_2View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CPattern_2View diagnostics
#ifdef _DEBUG
void CPattern_2View::AssertValid() const
{
CView::AssertValid();
}
void CPattern_2View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CPattern_2Doc* CPattern_2View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CPattern_2Doc)));
return (CPattern_2Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CPattern_2View message handlers
void CPattern_2View::MyDraw(Simulation * Data)
{
dc=GetDC();
mdc->SelectObject(BackGround);
mdc->FillSolidRect(0,0,1280,800,0xffffff);
for (int i=0; i<Data->Length; i++)
for (int j=0; j<Data->Depth; j++)
if (Data->MyMap[i][j]==1)
mdc->FillSolidRect(i*5, j*5, 5, 5, RGB(255,0,0));
char ch[100];
sprintf(ch, "%d ", Data->timepast );
mdc->TextOut(100,520,"步数=");
mdc->TextOut(100,540,ch);
dc->BitBlt( 0 ,0 , 1280 , 800 , mdc , 0 , 0 , SRCCOPY );
}
void CPattern_2View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
Data->RunIt();
dc=GetDC();
if(IfOnView==1)
{
if (State==1) MyDraw(Data);
}
else
{
char ch[100];
sprintf(ch, "%d ", Data->timepast );
dc->TextOut(100,120,"粒子数=");
dc->TextOut(180,120,ch);
}
for (double i=0; i<10000; i+=0.002);
}
void CPattern_2View::OnStartPause()
{
// TODO: Add your command handler code here
if (State==0)
{
MessageBox("Please create a file first");
return;
}
if (IfOnRun)
{
IfOnRun=0;
KillTimer(1);
}
else
{
IfOnRun=1;
SetTimer(1,50,NULL);
}
}
void CPattern_2View::OnIfonview()
{
// TODO: Add your command handler code here
if (IfOnView==0)
{
IfOnView=1;
}
else IfOnView=0;
dc= GetDC();
dc->FillSolidRect(0,0,1280,800,0xffffff);
dc->TextOut(100,100,"Program is running on backstage.");
}
void CPattern_2View::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
::wglMakeCurrent(NULL,NULL);
::wglDeleteContext(m_hRC);
}
BOOL CPattern_2View::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
//return CView::OnEraseBkgnd(pDC);
return true;
}
void CPattern_2View::OnSize(UINT nType, int cx, int cy)
{
// TODO: Add your message handler code here
}
int CPattern_2View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,0,0,
0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
m_hDC=GetDC()->GetSafeHdc();
int nPixelFormat = ::ChoosePixelFormat(m_hDC, &pfd);
::SetPixelFormat(m_hDC,nPixelFormat,&pfd);
m_hRC=::wglCreateContext(m_hDC);
::wglMakeCurrent(m_hDC,m_hRC);
return 0;
}
void CPattern_2View::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CPattern_2View::OnDataChange()
{
// TODO: Add your command handler code here
if (IfOnRun==1)
{
MessageBox ("Pause, before change Data.");
return;
}
if (State==0)
{
MessageBox ("Please create a file first.");
return;
}
mDialog1 D1;
D1.m_lengthnum=Data->Length;
D1.m_depthnum=Data->Depth;
D1.m_sticknum=Data->Density;
D1.DoModal();
Data->Length=D1.m_lengthnum;
Data->Depth=D1.m_depthnum;
Data->Density=D1.m_sticknum;
}
void CPattern_2View::OnFileNew()
{
// TODO: Add your command handler code here
State=1;
Data=new Simulation; // A new simulation
mDialog1 D1;
D1.m_lengthnum=Data->Length;
D1.m_depthnum=Data->Depth;
D1.m_sticknum=Data->Density;
D1.DoModal();
Data->Length=D1.m_lengthnum;
Data->Depth=D1.m_depthnum;
Data->Density=D1.m_sticknum;
Data->Initialize();
OnDraw(dc);
}
void CPattern_2View::OnFileOpen()
{
// TODO: Add your command handler code here
State=0;
char a[100];
mDialog3 FD(1);
FD.DoModal ();
CString b=FD.GetPathName();
for (int i=0; i<b.GetLength(); i++)
a[i]=b[i];
a[i]=0;
if ((a[i-1]=='a') && (a[i-2]=='l') && (a[i-3]=='d')) State=1;
if (State==0) return; // File open failed
ifstream filein(a, ios::in); // Read File
if(!filein.good()) return;
if (State==1) Data=new Simulation;
filein >>Data->timepast>>Data->Density>>Data->Length>>Data->Depth;
for (i=0;i<Data->Length;i++)
for (int j=0;j<Data->Depth;j++)
filein >>Data->MyMap[i][j];
filein.close();
OnDraw(dc);
}
void CPattern_2View::OnFileSave()
{
// TODO: Add your command handler code here
if (State==0) return;
bool flag=false;
char a[100];
mDialog3 FD(1);
FD.DoModal ();
CString b=FD.GetPathName();
for (int i=0; i<b.GetLength(); i++)
a[i]=b[i];
a[i]=0;
if ((a[i-1]=='a') && (a[i-2]=='l') && (a[i-3]=='d') && (State==1)) flag=true;
if (!flag) return; // Save File Failed
ofstream fileout(a, ios::trunc); //Save File
fileout <<Data->timepast<<endl<<Data->Density<<endl<<Data->Length<<endl<<Data->Depth<<endl;
for (i=0;i<Data->Length;i++)
{
for (int j=0;j<Data->Depth;j++)
fileout <<Data->MyMap[i][j]<<" ";
fileout <<endl;
}
fileout.close();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -