📄 setwallblockdlg.cpp
字号:
}
}
//画中心点
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 + -