📄 paintbak.cpp
字号:
if(flag_modify==0)
line_count++;
}
}
END:
if(m_a>=m_b)
MessageBox("下限必须小于上限!","错误",MB_OK);
else
if(line_count>9)
MessageBox("图像已满,请先清空再画","错误",MB_OK);
else
if(error==1)
{
MessageBox("请输入完整的表达式","错误",MB_OK);
}
else
if(error==2)
{
MessageBox("函数名不合法","错误",MB_OK);
}
else
if(error==3)
{
MessageBox("运算符格式错误","错误",MB_OK);
}
else
if(error==4)
{
MessageBox("表达式语法错误","错误",MB_OK);
}
else
if(error==5)
{
MessageBox("表达式内有非法字符","错误",MB_OK);
}
else
if(error==6)
{
MessageBox("系统内存不足,绘图失败!","错误",MB_OK);
}
if(notice==1)
{
mainwnd->m_wndStatusBar.SetPaneText(0,"函数在某区间无定义或运算数据过大,图像经过了忽略处理",TRUE);
}
else
{
mainwnd->m_wndStatusBar.SetPaneText(0,"绘图完成,一切正常!",TRUE);
}
}
void CPaint::OnPaintHide()
{
// TODO: Add your control notification handler code here
ShowWindow(SW_HIDE);
}
void CPaint::OnExit()
{
// TODO: Add your control notification handler code here
extern CMainFrame *mainwnd;
mainwnd->OnClose();
}
void CPaint::OnChangeExpres()
{
UpdateData();
flag=1;//表示一般方程的输入框在使用中
OnPaint();
}
void CPaint::OnChangeXExpres()
{
UpdateData();
flag=2;//表示参数方程x的输入框在使用中
OnPaint();
}
void CPaint::OnChangeYExpres()
{
UpdateData();
flag=3;//表示参数方程y的输入框在使用中
OnPaint();
}
void CPaint::OnChangeExpres2()
{
UpdateData();
flag=4;//表示极坐标方程的输入框在使用中
OnPaint();
}
void CPaint::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
// 调用父类处理函数完成基本操作
CDialog::OnLButtonDown(nFlags, point);
if(point.x>78&&point.x<135&&point.y>126&&point.y<139)
{
CColorDialog choose(color,0,this);
if(choose.DoModal()==IDOK)
{
color=choose.GetColor();
CPaint::OnPaint();
}
}
else
PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));
CDialog::OnLButtonDown(nFlags, point);
}
void CPaint::OnButton2()
{
// TODO: Add your control notification handler code here
extern CMyPaintView* dcpoint;
MY_LINE *del_line,*p_line;
del_line=p_line=head;
while(p_line!=NULL)
{
del_line=p_line;
p_line=p_line->next;
delete del_line;
}
head=NULL;
line_count=0;
dcpoint->OnUpdate(NULL,NULL,NULL);
}
void CPaint::OnSelchangeTab() //NMHDR* pNMHDR, LRESULT* pResult
{
CWnd *m_x=GetDlgItem(IDC_X_ST),
*m_y=GetDlgItem(IDC_Y_ST),
*m_f=GetDlgItem(IDC_F_ST),
*m_p=GetDlgItem(IDC_P_ST),
*m_xexpres=GetDlgItem(IDC_X_EXPRES),
*m_yexpres=GetDlgItem(IDC_Y_EXPRES),
*m_pexpres=GetDlgItem(IDC_EXPRES2),
*m_nexpres=GetDlgItem(IDC_EXPRES),
*m_paintok=GetDlgItem(ID_PAINT_OK),
*m_modify=GetDlgItem(ID_MODIFY);///////////
if(flag_modify)
{
m_modify->ShowWindow(SW_SHOW);
m_modify->EnableWindow(TRUE);
m_paintok->ShowWindow(SW_HIDE);
m_paintok->EnableWindow(FALSE);
}
else
{
m_paintok->ShowWindow(SW_SHOW);
m_paintok->EnableWindow(TRUE);
m_modify->ShowWindow(SW_HIDE);
m_modify->EnableWindow(FALSE);
}
if(m_choices.GetCurSel()==0)
{
m_x->ShowWindow(SW_HIDE);
m_y->ShowWindow(SW_HIDE);
m_f->ShowWindow(SW_SHOW);
m_p->ShowWindow(SW_HIDE);
m_xexpres->ShowWindow(SW_HIDE);
m_yexpres->ShowWindow(SW_HIDE);
m_nexpres->ShowWindow(SW_SHOW);
m_pexpres->ShowWindow(SW_HIDE);
}
else
if(m_choices.GetCurSel()==1)
{
m_x->ShowWindow(SW_SHOW);
m_y->ShowWindow(SW_SHOW);
m_f->ShowWindow(SW_HIDE);
m_p->ShowWindow(SW_HIDE);
m_xexpres->ShowWindow(SW_SHOW);
m_yexpres->ShowWindow(SW_SHOW);
m_nexpres->ShowWindow(SW_HIDE);
m_pexpres->ShowWindow(SW_HIDE);
}
else
if(m_choices.GetCurSel()==2)
{
m_x->ShowWindow(SW_HIDE);
m_y->ShowWindow(SW_HIDE);
m_f->ShowWindow(SW_HIDE);
m_p->ShowWindow(SW_SHOW);
m_xexpres->ShowWindow(SW_HIDE);
m_yexpres->ShowWindow(SW_HIDE);
m_nexpres->ShowWindow(SW_HIDE);
m_pexpres->ShowWindow(SW_SHOW);
}
// *pResult = 0;
}
void CPaint::OnPaintOk2()
{
double xc,yc;
double t;
unsigned short n=0;
for(t=m_a;t<=m_b;t+=0.05)
{
strncpy(expres,(LPCTSTR)m_yexpres,M);
yc=-superchge(expres,t,'t');
if(error!=0)
{
BYTE reset=line_count;
p2=head;
while(reset>1)
{
p2=p2->next;
reset--;
}
if(line_count==0)
p2=head=NULL;
else
p2->next=NULL;
if(flag_modify==0)
delete(p1);
break;
}
strncpy(expres,(LPCTSTR)m_xexpres,M);
xc=superchge(expres,t,'t');
if(error!=0)
{
BYTE reset=line_count;
p2=head;
while(reset>1)
{
p2=p2->next;
reset--;
}
if(line_count==0)
p2=head=NULL;
else
p2->next=NULL;
if(flag_modify==0)
delete(p1);
break;
}
if(outrange==1)
{
outrange=0;
notice=1;
continue;
}
if(fabs(yc-(short)yc)>=0.5)//对舍入误差的处理,使图像平滑
{
if(yc>0)
yc=(short)yc+1;
else
yc=(short)yc-1;
}
else
yc=(short)yc;
if(fabs(xc-(short)xc)>=0.5)//对舍入误差的处理,使图像平滑
{
if(xc>0)
xc=(short)xc+1;
else
xc=(short)xc-1;
}
else
xc=(short)xc;
if(flag_modify==1)
while(select_line!=0)
{
temp=temp->next;
select_line--;
}
else
temp=p1;
temp->point[n].x=(int)xc;
temp->point[n].y=(int)yc;
temp->point[n].z=0;
if(n>1)///////////////去处多余的点
{
CMpoint k1,k2;
k1.x=temp->point[n].x-temp->point[n-1].x;
k1.y=temp->point[n].y-temp->point[n-1].y;
k1.z=temp->point[n].z-temp->point[n-1].z;
k2.x=temp->point[n-1].x-temp->point[n-2].x;
k2.y=temp->point[n-1].y-temp->point[n-2].y;
k2.z=temp->point[n-1].z-temp->point[n-2].z;
if(fabs((k1.x*k2.x+k1.y*k2.y+k1.z*k2.z)/sqrt( (k1.x*k1.x+k1.y*k1.y+k1.z*k1.z)*(k2.x*k2.x+k2.y*k2.y+k2.z*k2.z) )-1.0)<1e-6)
{
temp->point[n-1].x=temp->point[n].x;
temp->point[n-1].y=temp->point[n].y;
temp->point[n-1].z=0;
n=n-1;
n++;
}
else
n++;
}
else
n++;
}
if(error==0)
{
temp->n=n;
temp->tag=1;
temp->real_expres[0]=m_xexpres;
temp->real_expres[1]=m_yexpres;
temp->expres.Format("%s%s , %s%s 定义域 【%.2f,%.2f】",".X(t)=",m_xexpres,"Y(t)=",m_yexpres,m_a,m_b);
}
}
void CPaint::OnPaintOk3()
{
double xc,yc;
double angle;
unsigned short n=0;
for(angle=m_a;angle<=m_b;angle+=0.05)
{
strncpy(expres,(LPCTSTR)m_pexpres,M);
yc=superchge(expres,angle,'r');
xc=cos(angle)*yc;
yc=-sin(angle)*yc;
if(error!=0)
{
BYTE reset=line_count;
p2=head;
while(reset>1)
{
p2=p2->next;
reset--;
}
if(line_count==0)
p2=head=NULL;
else
p2->next=NULL;
if(flag_modify==0)
delete(p1);
break;
}
if(outrange==1)
{
outrange=0;
notice=1;
continue;
}
if(fabs(yc-(short)yc)>=0.5)//对舍入误差的处理,使图像平滑
{
if(yc>0)
yc=(short)yc+1;
else
yc=(short)yc-1;
}
else
yc=(short)yc;
if(fabs(xc-(short)xc)>=0.5)//对舍入误差的处理,使图像平滑
{
if(xc>0)
xc=(short)xc+1;
else
xc=(short)xc-1;
}
else
xc=(short)xc;
if(flag_modify==1)
while(select_line!=0)
{
temp=temp->next;
select_line--;
}
else
temp=p1;
temp->point[n].x=(int)xc;
temp->point[n].y=(int)yc;
temp->point[n].z=0;
if(n>1)///////////////去处多余的点
{
CMpoint k1,k2;
k1.x=temp->point[n].x-temp->point[n-1].x;
k1.y=temp->point[n].y-temp->point[n-1].y;
k1.z=temp->point[n].z-temp->point[n-1].z;
k2.x=temp->point[n-1].x-temp->point[n-2].x;
k2.y=temp->point[n-1].y-temp->point[n-2].y;
k2.z=temp->point[n-1].z-temp->point[n-2].z;
if(fabs((k1.x*k2.x+k1.y*k2.y+k1.z*k2.z)/sqrt( (k1.x*k1.x+k1.y*k1.y+k1.z*k1.z)*(k2.x*k2.x+k2.y*k2.y+k2.z*k2.z) )-1.0)<1e-6)
{
temp->point[n-1].x=temp->point[n].x;
temp->point[n-1].y=temp->point[n].y;
temp->point[n-1].z=0;
n=n-1;
n++;
}
else
n++;
}
else
n++;
}
if(error==0)
{
temp->n=n;
temp->tag=2;
temp->real_expres[0]=m_pexpres;
temp->expres.Format("%s%s 定义域 【%.2f,%.2f】",".P(r)=",m_pexpres,m_a,m_b);
}
}
void CPaint::OnModify()
{
OnPaintOk();
select_line=-1;
CWnd *m_paintok=GetDlgItem(ID_PAINT_OK),
*m_modify=GetDlgItem(ID_MODIFY);///////////
m_paintok->EnableWindow(TRUE);
m_paintok->ShowWindow(SW_SHOW);
m_modify->ShowWindow(SW_HIDE);
flag_modify=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -