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

📄 childview.cpp

📁 一个类似炸弹人的地图编辑器的源代码, 要自己写编辑器的朋友, 可以研究研究
💻 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 + -