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

📄 bmapdlg.cpp

📁 VC做的矢量画图程序!
💻 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 + -