📄 childview.cpp
字号:
// ChildView.cpp : implementation of the CChildView class
//
#include "stdafx.h"
#include "MapEditor.h"
#include "ChildView.h"
#include "DlgSelect.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CChildView
CChildView::CChildView()
{
memset(&map[0][0],BLACK,MAX_X*MAX_Y);
m_pbmMap=new CBitmap;
m_pbmMap->LoadBitmap(IDB_MAP);
curMap=1;
m_stage=1;
}
CChildView::~CChildView()
{
}
BEGIN_MESSAGE_MAP(CChildView,CWnd )
//{{AFX_MSG_MAP(CChildView)
ON_WM_PAINT()
ON_WM_LBUTTONUP()
ON_WM_TIMER()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDOWN()
ON_WM_CREATE()
ON_COMMAND(ID_EDIT_BLACK, OnEditBlack)
ON_COMMAND(ID_EDIT_BOXNO, OnEditBoxno)
ON_UPDATE_COMMAND_UI(ID_EDIT_BOXNO, OnUpdateEditBoxno)
ON_COMMAND(ID_EDIT_FLOOR, OnEditFloor)
ON_COMMAND(ID_EDIT_BOXYES, OnEditBoxyes)
ON_COMMAND(ID_EDIT_BOY, OnEditBoy)
ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)
ON_COMMAND(ID_EDIT_DES, OnEditDes)
ON_COMMAND(ID_EDIT_WALL, OnEditWall)
ON_UPDATE_COMMAND_UI(ID_EDIT_BOXYES, OnUpdateEditBoxyes)
ON_UPDATE_COMMAND_UI(ID_EDIT_BOY, OnUpdateEditBoy)
ON_UPDATE_COMMAND_UI(ID_EDIT_BLACK, OnUpdateEditBlack)
ON_UPDATE_COMMAND_UI(ID_EDIT_DES, OnUpdateEditDes)
ON_UPDATE_COMMAND_UI(ID_EDIT_FLOOR, OnUpdateEditFloor)
ON_UPDATE_COMMAND_UI(ID_EDIT_WALL, OnUpdateEditWall)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
//}}AFX_MSG_MAP
ON_UPDATE_COMMAND_UI(ID_INDICATOR_POSITION,OnUpdatePosition)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChildView message handlers
BOOL CChildView::PreCreateWindow(CREATESTRUCT& cs)
{
if (!CWnd::PreCreateWindow(cs))
return FALSE;
cs.dwExStyle |= WS_EX_CLIENTEDGE;
cs.style &= ~WS_BORDER;
cs.lpszClass = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW|CS_DBLCLKS,
::LoadCursor(NULL, IDC_ARROW), HBRUSH(COLOR_WINDOW+1), NULL);
return TRUE;
SetTimer(1,1000,NULL);
}
void CChildView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
for(int i=0;i<MAX_X;i++)
for(int j=0;j<MAX_Y;j++)
DrawMap(i,j,map[i][j]);
// Do not call CWnd::OnPaint() for painting messages
}
void CChildView::OnLButtonDown(UINT nFlags, CPoint point)
{
KillTimer(1);
}
void CChildView::OnLButtonUp(UINT nFlags, CPoint point)
{
int i=point.x/30,j=point.y/30;
DrawMap(i,j,curMap);
map[i][j]=curMap;
SetTimer(1,500,NULL);
}
void CChildView::OnEditBlack()
{
curMap= BLACK;
}
void CChildView::OnMouseMove(UINT nFlags, CPoint point)
{
if(nFlags&MK_LBUTTON)
{
int i=point.x/30,j=point.y/30;
if(map[i][j]==curMap)return;
map[i][j]=curMap;
DrawMap(i,j,curMap);
}
CWnd::OnMouseMove(nFlags, point);
}
void CChildView::OnEditBoxno()
{
curMap=BOXNO;
}
void CChildView::OnUpdateEditBoxno(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(curMap==BOXNO);
}
void CChildView::OnEditFloor()
{
curMap=FLOOR;
}
void CChildView::OnEditBoxyes()
{
curMap=BOXYES;
}
void CChildView::OnEditBoy()
{
curMap=BOY;
}
void CChildView::OnEditClear()
{
memset(&map[0][0],BLACK,MAX_X*MAX_Y);
this->Invalidate(FALSE);
}
void CChildView::OnEditDes()
{
curMap=DES;
}
void CChildView::OnEditWall()
{
curMap=WALL;
}
void CChildView::OnUpdateEditBoxyes(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(curMap==BOXYES);
}
void CChildView::OnUpdateEditBoy(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(curMap==BOY);
}
void CChildView::OnUpdateEditBlack(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(curMap==BLACK);
}
void CChildView::OnUpdateEditDes(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(curMap==DES);
}
void CChildView::OnUpdateEditFloor(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(curMap==FLOOR);
}
void CChildView::OnUpdateEditWall(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(curMap==WALL);
}
void CChildView::DrawMap(int x,int y,int map)
{
if(x<0||x>=MAX_X||y<0||y>=MAX_Y)return ;
CClientDC dc(this);
CDC dcMemory;
dcMemory.CreateCompatibleDC(&dc);
CBitmap* pOld=dcMemory.SelectObject(m_pbmMap);
dc.BitBlt(x*30,y*30,30,30,&dcMemory,30*map,0,SRCCOPY);
dcMemory.SelectObject(pOld);
}
BOOL CChildView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}
void CChildView::OnTimer(UINT nIDEvent)
{
CPoint ptMouse;
GetCursorPos(&ptMouse);
ScreenToClient(&ptMouse);
int i=ptMouse.x/30,j=ptMouse.y/30;
if(i<0||i>=MAX_X||j<0||j>=MAX_Y)return ;
DrawMap(i,j,curMap);
Sleep(200);
DrawMap(i,j,map[i][j]);
}
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
SetTimer(1,500,NULL);
return 0;
}
void CChildView::OnFileOpen()
{
KillTimer(1);
CDlgSelect DlgSlt;
DlgSlt.m_stage=m_stage;
if(DlgSlt.DoModal())
{
m_stage=DlgSlt.m_stage;
}
SetTimer(1,500,NULL);
}
void CChildView::OnFileSave()
{
// CFile file(_T("user.map",CFile::modeRead);
// if(file.GetLength()
}
void CChildView::OnUpdatePosition(CCmdUI *pCmdUI)
{
pCmdUI->SetText("sdsds");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -