linedlg.cpp
来自「VC做的矢量画图程序!」· C++ 代码 · 共 1,095 行 · 第 1/2 页
CPP
1,095 行
void CTextDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTextDlg)
DDX_Check(pDX, IDC_CHECK1, m_bDelete);
DDX_Text(pDX, IDC_EDIT1, m_Startx);
DDX_Text(pDX, IDC_EDIT2, m_Starty);
DDX_Text(pDX, IDC_EDIT3, m_Text);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTextDlg, CDialog)
//{{AFX_MSG_MAP(CTextDlg)
ON_BN_CLICKED(IDC_FONT, OnFont)
ON_BN_CLICKED(IDC_PENCOLOR, OnPencolor)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTextDlg message handlers
BOOL CTextDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
pcom1->ResetContent();
for(int i=0;i<p_GraphPara->n_LayerNumb;i++)
pcom1->AddString(p_GraphPara->m_LayerList[i].m_Name);
pcom1->SetCurSel(m_Layer);
return TRUE; // return TRUE unless you set the focus to a control
}
void CTextDlg::OnOK()
{
CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
m_Layer=pcom1->GetCurSel();
UpdateData(1);
m_pText->m_StartX=m_Startx;
m_pText->m_StartY=m_Starty;
m_pText->c_Text=m_Text;
m_pText->m_TextLong=m_Text.GetLength();
m_pText->m_Layer=m_Layer; //所处层
m_pText->m_ColorPen=m_ColorPen; //笔色
m_pText->b_Delete=m_bDelete;
m_pText->m_TextHeight=m_TextHeight; //字体高度
m_pText->m_TextWide=m_TextWide; //字体宽度
m_pText->m_OffWide=m_OffWide; //间隔宽度
m_pText->m_Angle1=m_Angle1; //标注角度
m_pText->m_Angle2=m_Angle2; //字体旋转角度
EndDialog(IDOK);
}
void CTextDlg::OnFont()
{
TextFontDlg pDg1(m_TextHeight,m_TextWide,m_Angle1,m_Angle2,m_OffWide);
if(pDg1.DoModal()==IDOK)
{
m_TextHeight=pDg1.m_FontHeight;
m_TextWide=pDg1.m_FontWide;
m_Angle1=pDg1.m_Angle1;
m_Angle2=pDg1.m_Angle2;
m_OffWide=pDg1.m_FontBetween;
}
}
void CTextDlg::OnPencolor()
{
ColorSetDialog pDg1(m_ColorPen);
if(pDg1.DoModal()==IDOK)
{
m_ColorPen=pDg1.m_ColorIndex;
Invalidate();
}
}
void CTextDlg::OnPaint()
{
CRect r1;
CPaintDC dc(this); // device context for painting
CBrush* pbrush;
//以下用当前笔色绘制一个矩形区域
pbrush=new CBrush(p_GraphPara->GetColor(m_ColorPen));
CStatic* pStatic=(CStatic *)GetDlgItem(IDC_STATIC1);
pStatic->GetWindowRect(r1);
ScreenToClient(&r1);
r1.top+=10;
dc.FillRect(r1,pbrush);
delete pbrush;
}
/////////////////////////////////////////////////////////////////////////////
// CTagDlg dialog
CTagDlg::CTagDlg(CDrawDoc* pDoc,CTag* pTag,CWnd* pParent /*=NULL*/)
: CDialog(CTagDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTagDlg)
m_bDelete = FALSE;
m_xInsert = 0.0f;
m_yInsert = 0.0f;
m_ScaleX = 0.0f;
m_ScaleY = 0.0f;
m_idBlock = 0;
//}}AFX_DATA_INIT
m_pDoc=pDoc;
m_pTag=pTag;
m_xInsert=m_pTag->x_Insert;
m_yInsert=m_pTag->y_Insert;
m_ScaleX=m_pTag->x_Scale;
m_ScaleY=m_pTag->y_Scale;
m_bDelete=m_pTag->b_Delete;
m_Layer=m_pTag->m_Layer;
m_idBlock=m_pTag->idBlock;
m_pBlock=m_pTag->p_Block;
}
void CTagDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTagDlg)
DDX_Check(pDX, IDC_CHECK1, m_bDelete);
DDX_Text(pDX, IDC_EDIT1, m_xInsert);
DDX_Text(pDX, IDC_EDIT2, m_yInsert);
DDX_Text(pDX, IDC_EDIT3, m_ScaleX);
DDX_Text(pDX, IDC_EDIT4, m_ScaleY);
DDX_Text(pDX, IDC_EDIT5, m_idBlock);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTagDlg, CDialog)
//{{AFX_MSG_MAP(CTagDlg)
ON_BN_CLICKED(IDC_BLOCK, OnBlock)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTagDlg message handlers
void CTagDlg::OnOK()
{
CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
m_Layer=pcom1->GetCurSel();
UpdateData(1); //将对话框控制中的内容存储到变量中
if(m_idBlock<0) //如果图形块识别号小于0
{
AfxMessageBox("没有选择图例属于的图形块,请按中“图形块识别号”按钮进行选择");
return;
}
m_pTag->x_Insert=m_xInsert;
m_pTag->y_Insert=m_yInsert;
m_pTag->x_Scale=m_ScaleX;
m_pTag->y_Scale=m_ScaleY;
m_pTag->b_Delete=m_bDelete;
m_pTag->m_Layer=m_Layer;
m_pTag->idBlock=m_idBlock;
m_pTag->p_Block=m_pBlock;
EndDialog(IDOK);
}
BOOL CTagDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CComboBox* pcom1=(CComboBox *)GetDlgItem(IDC_COMBO1);
pcom1->ResetContent();
for(int i=0;i<p_GraphPara->n_LayerNumb;i++)
pcom1->AddString(p_GraphPara->m_LayerList[i].m_Name);
pcom1->SetCurSel(m_Layer);
return TRUE; // return TRUE unless you set the focus to a control
}
void CTagDlg::OnBlock()
{
char p1[4];
short nIndex=m_pDoc->GetBlockIndex(m_idBlock);
BlockDialog pdlg(m_pDoc,nIndex,0);
if(pdlg.DoModal()==IDOK)
{
nIndex=pdlg.m_BlockIndex; //得到图形块的序号
m_pBlock=m_pDoc->GetBlock(nIndex); //得到指向图形块的指针
m_idBlock=m_pBlock->m_iD; //得到图形块的识别号
sprintf(p1,"%d",m_idBlock);
SetDlgItemText(IDC_EDIT5,p1);
}
}
/////////////////////////////////////////////////////////////////////////////
// CGraphDataDlg dialog
CGraphDataDlg::CGraphDataDlg(CDrawDoc* pDoc,CWnd* pParent /*=NULL*/)
: CDialog(CGraphDataDlg::IDD, pParent)
{
m_pDoc=pDoc; //指向当前的文档对象
m_GraphNumb=0;
//{{AFX_DATA_INIT(CGraphDataDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CGraphDataDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CGraphDataDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CGraphDataDlg, CDialog)
//{{AFX_MSG_MAP(CGraphDataDlg)
ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_BN_CLICKED(IDC_MODIFY, OnModify)
ON_LBN_SELCHANGE(IDC_LIST2, OnSelchangeList2)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CGraphDataDlg message handlers
void CGraphDataDlg::OnSelchangeList1()
{
CButton* pbut;
int nn=plist1->GetCurSel();
if(nn<0) //如果没有在第一个列表框中选择图形类别
{
//以下将几个按钮失效
pbut=(CButton *)GetDlgItem(IDC_ADD);
pbut->EnableWindow(FALSE);
pbut=(CButton *)GetDlgItem(IDC_MODIFY);
pbut->EnableWindow(FALSE);
pbut=(CButton *)GetDlgItem(IDC_DELETE);
pbut->EnableWindow(FALSE);
return;
}
plist2->ResetContent();
m_GraphNumb=0;
int numb=m_pDoc->GetGraphUpperBound(nn+1);
for(int i=m_pDoc->GraphNumbStart[nn];i<=numb;i++)
{
CDraw* pDraw=m_pDoc->GetGraph(nn+1,i);
if(pDraw)
{
m_pDoc->m_Index[m_GraphNumb++]=i;
MakeStr(pDraw);
plist2->AddString(m_str);
}
}
pbut=(CButton *)GetDlgItem(IDC_ADD);
pbut->EnableWindow(TRUE);
plist2->SetCurSel(0);
OnSelchangeList2();
return;
}
void CGraphDataDlg::OnAdd()
{
int nn1=plist1->GetCurSel();
if(nn1<0)
return;
int id=m_pDoc->GetGraphID(nn1+1); //得到要增加图形元素的的识别号
switch(nn1)
{
case 0: //直线
{
CLine* pLine=new CLine(p_View->m_pColor,p_View->m_brColor,1,0,p_View->m_Layer,id,0,0,0,0,0);
CLineDlg pdlg(pLine);
if(pdlg.DoModal()==IDOK)
{
m_pDoc->AddLine(pLine);
MakeStr(pLine);
plist2->AddString(m_str);
plist2->SetCurSel(m_GraphNumb);
m_pDoc->m_Index[m_GraphNumb++]=m_pDoc->GetGraphUpperBound(nn1+1);
}
else
{
delete pLine;
}
break;
}
case 1: //连续直线和多边形区域
{
CPline* pPLine=new CPline(p_View->m_pColor,p_View->m_brColor,
1,0,p_View->m_Layer,id,0,0,p_View->PointXyz,0);
CPLineDlg pdlg(pPLine);
if(pdlg.DoModal()==IDOK)
{
pPLine=pdlg.m_pPline;
m_pDoc->AddPLine(pPLine);
MakeStr(pPLine);
plist2->AddString(m_str);
plist2->SetCurSel(m_GraphNumb);
m_pDoc->m_Index[m_GraphNumb++]=m_pDoc->GetGraphUpperBound(nn1+1);
}
else
{
pPLine=pdlg.m_pPline;
delete pPLine;
}
break;
}
case 2: //圆和圆形区域
{
CCircle* pCircle=new CCircle(p_View->m_pColor,p_View->m_brColor,1,0,p_View->m_Layer,id,0,0,0,10,0);
CCircleDlg pdlg(pCircle);
if(pdlg.DoModal()==IDOK)
{
m_pDoc->AddCircle(pCircle);
MakeStr(pCircle);
plist2->AddString(m_str);
plist2->SetCurSel(m_GraphNumb);
m_pDoc->m_Index[m_GraphNumb++]=m_pDoc->GetGraphUpperBound(nn1+1);
}
else
{
delete pCircle;
}
break;
}
case 3: //圆弧
{
CArc* pArc=new CArc(p_View->m_pColor,p_View->m_brColor,1,0,p_View->m_Layer,id,0,0,0,10,0,0,(float)3.141592);
CArcDlg pdlg(pArc);
if(pdlg.DoModal()==IDOK)
{
m_pDoc->AddArc(pArc);
MakeStr(pArc);
plist2->AddString(m_str);
plist2->SetCurSel(m_GraphNumb);
m_pDoc->m_Index[m_GraphNumb++]=m_pDoc->GetGraphUpperBound(nn1+1);
}
else
{
delete pArc;
}
break;
}
case 4: //标注文本
{
CText* pText=new CText(p_View->m_pColor,p_View->m_brColor,1,0,p_View->m_Layer,id,0,
0,0,0,0,p_View->m_FontHeight,p_View->m_FontWide,0,0,"");
CTextDlg pdlg(pText);
if(pdlg.DoModal()==IDOK)
{
m_pDoc->AddText(pText);
MakeStr(pText);
plist2->AddString(m_str);
plist2->SetCurSel(m_GraphNumb);
m_pDoc->m_Index[m_GraphNumb++]=m_pDoc->GetGraphUpperBound(nn1+1);
}
else
{
delete pText;
}
break;
}
case 5: //图例
{
CTag* pTag=new CTag(p_View->m_pColor,p_View->m_brColor,1,0,p_View->m_Layer,0,
0,0,1,1,id,NULL);
CTagDlg pdlg(m_pDoc,pTag);
if(pdlg.DoModal()==IDOK)
{
m_pDoc->AddTag(pTag);
MakeStr(pTag);
plist2->AddString(m_str);
plist2->SetCurSel(m_GraphNumb);
m_pDoc->m_Index[m_GraphNumb++]=m_pDoc->GetGraphUpperBound(nn1+1);
}
else
{
delete pTag;
}
break;
}
}
}
void CGraphDataDlg::OnDelete()
{
int nn1=plist1->GetCurSel();
if(nn1<0)
return;
int nn2=plist2->GetCurSel();
if(nn2<0)
return;
CDraw* pDraw=m_pDoc->GetGraph(nn1+1,m_pDoc->m_Index[nn2]);
if(pDraw->IsDelete()) //如果这个图形元素已经处于删除状态,则恢复这个图形元素
pDraw->Delete(0);
else
pDraw->Delete(1);
MakeStr(pDraw);
plist2->DeleteString(nn2);
if(nn2==m_GraphNumb-1) //如果操作的是列表框中最后一个图形元素
plist2->AddString(m_str);
else
plist2->InsertString(nn2,m_str);
plist2->SetCurSel(nn2);
OnSelchangeList2();
}
//修改图形元素
void CGraphDataDlg::OnModify()
{
int nn1=plist1->GetCurSel();
if(nn1<0)
return;
int nn2=plist2->GetCurSel();
if(nn2<0)
return;
switch(nn1)
{
case 0: //直线
{
CLineDlg pdlg((CLine *)(m_pDoc->GetGraph(nn1+1,m_pDoc->m_Index[nn2])));
pdlg.DoModal();
break;
}
case 1: //连续直线和多边形区域
{
CPLineDlg pdlg((CPline *)(m_pDoc->GetGraph(nn1+1,m_pDoc->m_Index[nn2])));
pdlg.DoModal();
break;
}
case 2: //圆和圆形区域
{
CCircleDlg pdlg((CCircle *)(m_pDoc->GetGraph(nn1+1,m_pDoc->m_Index[nn2])));
pdlg.DoModal();
break;
}
case 3: //圆弧
{
CArcDlg pdlg((CArc *)(m_pDoc->GetGraph(nn1+1,m_pDoc->m_Index[nn2])));
pdlg.DoModal();
break;
}
case 4: //标注文本
{
CTextDlg pdlg((CText *)(m_pDoc->GetGraph(nn1+1,m_pDoc->m_Index[nn2])));
pdlg.DoModal();
break;
}
case 5: //图例
{
CTagDlg pdlg(m_pDoc,(CTag *)(m_pDoc->GetGraph(nn1+1,m_pDoc->m_Index[nn2])));
pdlg.DoModal();
break;
}
}
}
BOOL CGraphDataDlg::OnInitDialog()
{
CDialog::OnInitDialog();
plist1=(CListBox *)GetDlgItem(IDC_LIST1);
plist1->ResetContent();
plist1->AddString("直线");
plist1->AddString("连续直线和多边形区域");
plist1->AddString("圆或圆形区域");
plist1->AddString("圆弧");
plist1->AddString("标注文本");
plist1->AddString("图例");
plist2=(CListBox *)GetDlgItem(IDC_LIST2);
plist2->ResetContent();
OnSelchangeList1();
return TRUE;
}
void CGraphDataDlg::OnSelchangeList2()
{
CButton* pbut;
int nn=plist2->GetCurSel();
if(nn<0)
{
pbut=(CButton *)GetDlgItem(IDC_MODIFY);
pbut->EnableWindow(FALSE);
pbut=(CButton *)GetDlgItem(IDC_DELETE);
pbut->EnableWindow(FALSE);
return;
}
pbut=(CButton *)GetDlgItem(IDC_MODIFY);
pbut->EnableWindow(TRUE);
pbut=(CButton *)GetDlgItem(IDC_DELETE);
pbut->EnableWindow(TRUE);
return;
}
//产生在列表框中显示的字符串
void CGraphDataDlg::MakeStr(CDraw* pDraw)
{
char p1[10];
int lb=pDraw->GetGraphLb();
switch(lb)
{
case 1:
m_str="直线";
break;
case 2:
if(pDraw->IsFill())
m_str="多边形区域";
else
m_str="连续直线";
break;
case 3:
if(pDraw->IsFill())
m_str="圆形区域";
else
m_str="圆";
break;
case 4:
m_str="圆弧";
break;
case 5:
m_str="标注文本";
break;
case 6:
m_str="图例";
break;
default:
break;
}
sprintf(p1," %6d",pDraw->GetID());
m_str+=p1;
m_str+=" ";
if(pDraw->IsDelete())
m_str+="×";
}
void CPLineDlg::OnEditchangeCombo1()
{
// TODO: Add your control notification handler code here
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?