📄 bmapdlg.cpp
字号:
// BmapDlg.cpp : implementation file
//
#include "stdafx.h"
#include "draw.h"
#include "drawdoc.h"
#include "BmapDlg.h"
#include "math.h"
#include "drawview.h"
#include "bmapdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern void DPtoVP(float x,float y,int *X,int *Y);
/////////////////////////////////////////////////////////////////////////////
// CBasemapDlg dialog
//图象底图的绘制函数
void CBaseMap::Draw(CDrawView* pView,CDC* pDC)
{
int x1,y1,x2,y2;
int xx,yy,height,width;
DPtoVP(m_Basemap1.m_X1,m_Basemap1.m_Y1,&x1,&y1);
DPtoVP(m_Basemap1.m_X2,m_Basemap1.m_Y2,&x2,&y2);
//以下得到绘制区域左上角的坐标和绘制区域的高度和宽度
xx=min(x1,x2);
yy=min(y1,y2);
height=abs(y2-y1);
width=abs(x2-x1);
pView->DrawBmp2(pDC,xx,yy,width,height,m_Basemap1.m_FileName,m_Basemap1.b_Shape+2);
}
//类的串行化函数
void CBaseMap::Serialize(CArchive& ar)
{
if(ar.IsStoring())
{
ar<<m_Basemap1.m_X1<<m_Basemap1.m_Y1<<m_Basemap1.m_X2<<m_Basemap1.m_Y2;
ar<<m_Basemap1.b_Shape<<m_Basemap1.m_FileName;
}
else
{
ar>>m_Basemap1.m_X1>>m_Basemap1.m_Y1>>m_Basemap1.m_X2>>m_Basemap1.m_Y2;
ar>>m_Basemap1.b_Shape>>m_Basemap1.m_FileName;
}
}
//类的构造函数。pDoc-指向当前文档对象的指针
CBasemapDlg::CBasemapDlg(CDrawDoc* pDoc,CWnd* pParent /*=NULL*/)
: CDialog(CBasemapDlg::IDD, pParent)
{
// m_BaseMap=new BasemapStruct[100];
m_pDoc=pDoc;
m_BasemapNumb=pDoc->m_BasemapNumb; //得到图象底图的树木
for(int i=0;i<m_BasemapNumb;i++) //得到并保存各个图象底图
m_BaseMap[i]=pDoc->m_Basemap[i].m_Basemap1;
//{{AFX_DATA_INIT(CBasemapDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CBasemapDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CBasemapDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CBasemapDlg, CDialog)
//{{AFX_MSG_MAP(CBasemapDlg)
ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_MODIFY, OnModify)
ON_BN_CLICKED(IDC_DELETE, OnDelete)
ON_BN_CLICKED(IDC_NAME, OnName)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CBasemapDlg message handlers
//点中对话框中的列表框时的函数,将当前选择的底图的参数填写到控制中
void CBasemapDlg::OnSelchangeList1()
{
char p1[10];
CListBox* plist1=(CListBox *)GetDlgItem(IDC_LIST1);
CButton* pbut;
int nn=plist1->GetCurSel();
if(nn<0) //如果没有选中一个图象底图
{
pbut=(CButton *)GetDlgItem(IDC_MODIFY);
pbut->EnableWindow(FALSE);
pbut=(CButton *)GetDlgItem(IDC_DELETE);
pbut->EnableWindow(FALSE);
return;
}
//将选择的底图的参数填写到控制中
Basemap1=m_BaseMap[nn];
SetDlgItemText(IDC_EDIT1,Basemap1.m_FileName);
sprintf(p1,"%f",Basemap1.m_X1);
SetDlgItemText(IDC_EDIT2,p1);
sprintf(p1,"%f",Basemap1.m_Y1);
SetDlgItemText(IDC_EDIT3,p1);
sprintf(p1,"%f",Basemap1.m_X2);
SetDlgItemText(IDC_EDIT4,p1);
sprintf(p1,"%f",Basemap1.m_Y2);
SetDlgItemText(IDC_EDIT5,p1);
CButton* pchk=(CButton *)GetDlgItem(IDC_CHECK1);
pchk->SetCheck(Basemap1.b_Shape);
//设置各个按钮的状态
pbut=(CButton *)GetDlgItem(IDC_MODIFY);
pbut->EnableWindow(TRUE);
pbut=(CButton *)GetDlgItem(IDC_DELETE);
pbut->EnableWindow(TRUE);
}
//增加一个底图
void CBasemapDlg::OnAdd()
{
if(m_BasemapNumb>=100)
{
AfxMessageBox("最多只能有100个底图");
return;
}
if(MakeBasemap()) //如果能够正确形成一个底图
{
m_BaseMap[m_BasemapNumb++]=Basemap1;
CListBox* plist1=(CListBox *)GetDlgItem(IDC_LIST1);
plist1->AddString(Basemap1.m_FileName);
plist1->SetCurSel(m_BasemapNumb-1);
OnSelchangeList1();
}
}
//修改选中的图象底图
void CBasemapDlg::OnModify()
{
CListBox* plist1=(CListBox *)GetDlgItem(IDC_LIST1);
int nn=plist1->GetCurSel();
if(nn<0) //如果没有在列表框中选中底图
return;
if(MakeBasemap()) //如果能够正确形成一个底图
{
m_BaseMap[nn]=Basemap1;
plist1->DeleteString(nn);
if(nn==m_BasemapNumb-1) //如果修改的是列表框中最后一个底图
plist1->AddString(Basemap1.m_FileName);
else
plist1->InsertString(nn,Basemap1.m_FileName);
plist1->SetCurSel(nn);
OnSelchangeList1();
}
}
//删除在列表框中选择的底图
void CBasemapDlg::OnDelete()
{
CListBox* plist1=(CListBox *)GetDlgItem(IDC_LIST1);
int nn=plist1->GetCurSel();
if(nn<0) //如果没有选中底图
return;
for(int i=nn;i<m_BasemapNumb-1;i++)
m_BaseMap[i]=m_BaseMap[i+1];
plist1->DeleteString(nn);
if(nn==m_BasemapNumb-1) //如果删除的是列表框中最后一个底图
plist1->SetCurSel(nn-1);
else
plist1->SetCurSel(nn);
m_BasemapNumb--;
OnSelchangeList1();
}
//初始化函数
BOOL CBasemapDlg::OnInitDialog()
{
CDialog::OnInitDialog();
CListBox* plist1=(CListBox *)GetDlgItem(IDC_LIST1);
plist1->ResetContent();
//将各个底图的名称填写到列表框
for(int i=0;i<m_BasemapNumb;i++)
plist1->AddString(m_BaseMap[i].m_FileName);
if(m_BasemapNumb>0) //如果底图数目大于0
plist1->SetCurSel(0);
OnSelchangeList1();
return TRUE;
}
//将各控制中的内容形成一个图象底图
BOOL CBasemapDlg::MakeBasemap()
{
CString c1;
GetDlgItemText(IDC_EDIT1,c1);
c1.TrimLeft();
c1.TrimRight();
if(c1.GetLength()<0)
{
AfxMessageBox("没有输入位图文件名称");
return FALSE;
}
Basemap1.m_FileName=c1;
GetDlgItemText(IDC_EDIT2,c1);
c1.TrimLeft();
c1.TrimRight();
if(c1.GetLength()<0)
{
AfxMessageBox("没有输入显示区域左下角点的横坐标");
return FALSE;
}
Basemap1.m_X1=(float)atof(c1);
GetDlgItemText(IDC_EDIT3,c1);
c1.TrimLeft();
c1.TrimRight();
if(c1.GetLength()<0)
{
AfxMessageBox("没有输入显示区域左下角点的纵坐标");
return FALSE;
}
Basemap1.m_Y1=(float)atof(c1);
GetDlgItemText(IDC_EDIT4,c1);
c1.TrimLeft();
c1.TrimRight();
if(c1.GetLength()<0)
{
AfxMessageBox("没有输入显示区域左下角点的纵坐标");
return FALSE;
}
Basemap1.m_X2=(float)atof(c1);
GetDlgItemText(IDC_EDIT5,c1);
c1.TrimLeft();
c1.TrimRight();
if(c1.GetLength()<0)
{
AfxMessageBox("没有输入显示区域左下角点的纵坐标");
return FALSE;
}
Basemap1.m_Y2=(float)atof(c1);
CButton* pchk=(CButton *)GetDlgItem(IDC_CHECK1);
Basemap1.b_Shape=pchk->GetCheck();
return TRUE;
}
//保存退出对话框
void CBasemapDlg::OnOK()
{
m_pDoc->m_BasemapNumb=m_BasemapNumb;
for(int i=0;i<m_BasemapNumb;i++)
m_pDoc->m_Basemap[i].m_Basemap1=m_BaseMap[i];
CDialog::OnOK();
}
//放弃退出对话框
void CBasemapDlg::OnCancel()
{
CDialog::OnCancel();
}
//调用文件选择对话框选择位图文件的名称
void CBasemapDlg::OnName()
{
char szFileFilter[]=
"BMP Files(*.BMP)|*.bmp|"
//"ALL Files(*.*)|*.*|"
// "DXF Files(*.DXF)|*.dxf|"
"| |";
CFileDialog FileDialogBox(TRUE,NULL,"*.bmp",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFileFilter,NULL);
if(FileDialogBox.DoModal()==IDOK)
SetDlgItemText(IDC_EDIT1,FileDialogBox.GetPathName());
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -