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

📄 setwallblockdlg.cpp

📁 一款45度2D游戏地图编辑器和大家一起分享啊!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					}
				}
				//画中心点
				if((centerx-beginw)==i&&(centery-beginh)==j)
				{
					theApp->display->Blt(ix,iy,center);
					//给Imagexx Imageyy赋值,用来保存便宜量的
					Imagexx = ix+(beginw+1)*(tileWidth/2);
					Imageyy = iy+tileHeight/2+beginh*(tileHeight);
				}
			}
			iy+=tileHeight;
		}
		ix=ixbegin+tileWidth/2;//每次画完一列之后x坐标要向右移动
		ixbegin+=tileWidth/2; //然后作一下纪录
		iy=hbegin+h1;       //iy要回到原来位置并且变动
		hbegin+=h1;
		h1 = -h1;
	}
}

void SetWallBlockDlg::DrawImage(CRect& rt)
{
	int x,int y;
	x = Imagex+m_Offistx-beginw*tileWidth/2;
	y = Imagey+m_Offisty-beginh*tileHeight;
	CMy45MapMakerApp* theApp=(CMy45MapMakerApp*)AfxGetApp();
	theApp->display->AlphaBlt(x,y,Image,100,RGB(255,0,255));
}

BEGIN_MESSAGE_MAP(CMyScrollBar, CScrollBar)
//ON_WM_VSCROLL()
END_MESSAGE_MAP()

BOOL SetWallBlockDlg::OnInitDialog()
{
	CDialog::OnInitDialog();
	// TODO:  在此添加额外的初始化
	//设置Scroll的区域
	//在这里 静态图片空间的宽和高已知,直接代数字应编码了h320 w 384
	ScrollBarx.SetScrollRange(0,(w>14)?(w-14):0,TRUE);
	ScrollBarx.SetScrollPos(0,TRUE);
	ScrollBary.SetScrollRange(1,(h>10)?(h-10):0,TRUE);
	ScrollBary.SetScrollPos(1,TRUE);
	DrawStatic();
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void SetWallBlockDlg::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	DrawStatic();
	// TODO: 在此处添加消息处理程序代码
	// 不为绘图消息调用 CDialog::OnPaint()
}

void SetWallBlockDlg::OnMouseMove(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(mouse==0)
	{
	CRect rt;
	m_StaticPic.GetClientRect(&rt);
	if(point.x>rt.right||point.y>rt.bottom)
		return;
	int arryx,arryy; //定义数组的起始位置~
	arryx = this->beginw+(point.x)/(tileWidth/2);
	arryy = this->beginh+(point.y+tileHeight/2)/(tileHeight);
	if(arryx>=w||arryy>=h)
		return;
	int w2,h2;
	if(editCenter||editProject)//如果是画刷模式,,,,,
	{
		w2 = point.x%(tileWidth/2);
		if(arryx%2==0)
			w2 = (tileWidth/2)-w2;
		int temp = ((point.y+(tileHeight/2))/tileHeight);
		temp = temp*tileHeight;
		h2 = temp-point.y;
		float w1 = w2;
		float h1 = h2;
		if(arryx%2==1)
		{
			if(w1==0)
			{
				if(h1<0)
					arryy--;
			}
			else
			{
				float result = (h1/w1);
				if(result>(0.5))
					arryy--;
				if(result<0.5&&result>-0.5)
					arryx++;
			}
		}
		else
		{
			
			if(w1 == 0)
			{
				if(h1>0)
				{	arryy--;
					arryx++;
				}
			}
			else
			{
				float result = h1/w1;
				if(result>0.5)
				{	
					arryx++;
					arryy--;
				}
				if(result<-0.5)
				{
					arryx++;
				}
			}
		}
		editx = arryx;
		edity = arryy;
		this->DrawProject();
	}
	else
	{
	}
	}
	mouse++;
	if(mouse==1)
		mouse = 0;
	CDialog::OnMouseMove(nFlags, point);
}

void SetWallBlockDlg::OnBnClickedBtnsetblock()
{
	editCenter = false;
	editProject = !editProject;
	m_flagCenter.SetCheck(editCenter);
	m_flagsetprogjet.SetCheck(editProject);
}

void SetWallBlockDlg::OnBnClickedBtnsetcenter()
{
	editProject = false;
	editCenter = !editCenter;
	m_flagsetprogjet.SetCheck(editProject);
	m_flagCenter.SetCheck(editCenter);
}


void SetWallBlockDlg::OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
	if(pNMUpDown->iDelta>0)
	{	
		m_Offistx--;
		if(m_Offistx<-31)
			m_Offistx= -31;
	}
	if(pNMUpDown->iDelta<0)
	{
		m_Offistx++;
		if(m_Offistx>31)
			m_Offistx = 31;
	}
	UpdateData(FALSE);
	this->DrawStatic();

	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
}

void SetWallBlockDlg::OnDeltaposSpin2(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMUPDOWN pNMUpDown = reinterpret_cast<LPNMUPDOWN>(pNMHDR);
	if(pNMUpDown->iDelta>0)
	{
		m_Offisty++;
		if(m_Offisty>31)
			m_Offisty = 31;
	}
	if(pNMUpDown->iDelta<0)
	{
		m_Offisty--;
		if(m_Offisty<-31)
			m_Offisty = -31;
	}
	UpdateData(FALSE);
	this->DrawStatic();
	// TODO: 在此添加控件通知处理程序代码
	*pResult = 0;
}

void SetWallBlockDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	if(h<10)
		return;
	if(pScrollBar==(CScrollBar*)&m_spinx||pScrollBar==(CScrollBar*)&m_spiny)
		return;
	if(ScrollBary.GetScrollRange)
		switch(nSBCode){ //nsbCode表示当前是那种操作
		case SB_LINEUP: //箭头上
			beginh-=1;
			break;
		case SB_LINEDOWN: //箭头下
			beginh+=1;
			break;
		case SB_PAGEUP: //翻页上
		    beginh-=1;
			break;
		case SB_PAGEDOWN://翻页下
			beginh+=1;
			break;
		case SB_THUMBPOSITION: //滚动到一个绝对位置,当前位置在nPos中指定
			beginh=nPos;
			break;
		}	
		if(beginh<0)
			beginh=0;
		if(beginh>h-10)
			beginh = h-10;
	ScrollBary.SetScrollPos(beginh,TRUE); //设置小方块的位置
	DrawStatic();
}

void SetWallBlockDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(w<14)
		return;
		switch(nSBCode){ //nsbCode表示当前是那种操作
		case SB_LINEUP: //箭头上
			beginw-=1;
			break;
		case SB_LINEDOWN: //箭头下
			beginw+=1;
			break;
		case SB_PAGEUP: //翻页上
		    beginw-=1;
			break;
		case SB_PAGEDOWN://翻页下
			beginw+=1;
			break;
		case SB_THUMBPOSITION: //滚动到一个绝对位置,当前位置在nPos中指定
			beginw=nPos;
			break;
		}	
		if(beginw<0)
			beginw=0;
		if(beginw>w-14)
			beginw = w-14;
	ScrollBarx.SetScrollPos(beginw,TRUE); //设置小方块的位置
	this->DrawStatic();
	//CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void SetWallBlockDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(editCenter)
	{
		centerx = editx;
		centery = edity;
		std::vector<CPoint>::iterator is = vtProject.begin();
		for(;is!=vtProject.end();is++)
		{
			if((*is).x == editx)
				if((*is).y == edity)
				{
					//如果找到了,刷品
					vtProject.erase(is);
					DrawStatic();
					return;
				}
		}
		DrawStatic();
		return;
	}
	if(this->editProject)
	{
		CPoint temp;
		temp.x = editx;
		temp.y = edity;
		//查找,如果找到就返回,否则就添加进去
		std::vector<CPoint>::iterator is = vtProject.begin();
		for(;is!=vtProject.end();is++)
		{
			if((*is).x == temp.x)
			{
				if((*is).y == temp.y)
				{
					DrawStatic();
					return;//找到就返回了
				}
			}
		}
		vtProject.push_back(temp);
		DrawStatic();
		return;
	}
}
void SetWallBlockDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(this->editProject)
	{
		std::vector<CPoint>::iterator is = vtProject.begin();
		for(;is!=vtProject.end();is++)
		{
			if((*is).x == editx)
				if((*is).y == edity)
				{
					//如果找到了,刷品
					vtProject.erase(is);
					this->DrawStatic();
					return;
				}
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -