www.pudn.com > Geotest.rar > Themes.cpp


// Themes.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "geotest.h" 
#include "Themes.h" 
#include "datasetsdlg.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CThemes dialog 
 
 
CThemes::CThemes(CWnd* pParent /*=NULL*/) 
	: CDialog(CThemes::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CThemes) 
	m_themeName = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
CThemes::CThemes(CMapX* pMapX,CWnd* pParent /*=NULL*/) 
	: CDialog(CThemes::IDD, pParent) 
{ 
	m_pMapX=pMapX; 
	m_themeName = _T(""); 
 
} 
void CThemes::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CThemes) 
	DDX_Control(pDX, IDC_SELFIELD, m_selField); 
	DDX_Control(pDX, IDC_SELDATASET, m_selDataset); 
	DDX_Control(pDX, IDC_THEMETYPE, m_themeType); 
	DDX_Text(pDX, IDC_THEMENAME, m_themeName); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CThemes, CDialog) 
	//{{AFX_MSG_MAP(CThemes) 
	ON_BN_CLICKED(IDC_DATASETS, OnDatasets) 
	ON_BN_CLICKED(IDC_BUTTON2, OnModifyTheme) 
	ON_BN_CLICKED(IDC_BUTTON3, OnCustomTheme) 
	ON_CBN_CLOSEUP(IDC_SELDATASET, OnCloseupSeldataset) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
//////////////////////////////////////////////////////////////////////////////// 
///////////////////////////////////////////////////////////////////////////// 
// CThemes message handlers 
 
//选中需要先数据绑定的响应函数 
void CThemes::OnDatasets()  
{ 
 
	try 
	{CDataSetsDlg datasetdlg(m_pMapX); 
	if(datasetdlg.DoModal()!=IDOK) 
	{ 
		return; 
	} 
	} 
	catch (COleDispatchException *e) { 
	 e->ReportError(); 
	 e->Delete(); 
	}  
	catch (COleException *e) { 
		e->ReportError(); 
		e->Delete(); 
	} 
} 
 
void CThemes::OnOK() 
{ 
	UpdateData(TRUE); 
	int i=m_themeType.GetCurSel();//组合框中被选中的项选中的专题类型 
	//准备要绑定的数据 
	int field = m_selField.GetCurSel(); 
	int dataset =m_selDataset.GetCurSel(); 
    CString cs,  //字段名 
		str;     //数据集名 
	m_selField.GetLBText(field,cs); 
	m_selDataset.GetLBText(dataset,str); 
	CMapXDataset ds; 
	CMapXThemes themes; 
	ds=m_pMapX->GetDatasets().Item(str);   //没有预先绑定,自己指定的情况 
	if(m_pMapX->GetDatasets().GetCount()==0) 
		return;	 
	switch(i) 
	{ 
	case 0 : 
		{    //开始这里错了!主要原因是,我用了指针传递了一个临时指针!!!!不能传递临时指针!! 
			theme=ds.GetThemes().Add(miThemePieChart,cs,m_themeName);//miThemeRanged, ,);//);"TOTPOP" 
		    m_pMapX->Refresh(); 
		} 
		break; 
	case 1 : 
		{ 
			theme=ds.GetThemes().Add(miThemeGradSymbol,cs,m_themeName);//miThemeRanged, ,);//);"TOTPOP" 
		    m_pMapX->Refresh(); 
		} 
		break; 
	case 2 : 
		{ 
			theme=ds.GetThemes().Add(miThemeDotDensity,cs,m_themeName);//miThemeRanged, ,);//);"TOTPOP" 
		    m_pMapX->Refresh(); 
		} 
		break; 
	case 3 : 
		{ 
			theme=ds.GetThemes().Add(miThemeIndividualValue,cs,m_themeName);//miThemeRanged, ,);//);"TOTPOP" 
		    m_pMapX->Refresh(); 
		} 
		break; 
	case 4 : 
		{ 
			theme=ds.GetThemes().Add(miThemeRanged,cs,m_themeName);//miThemeRanged, ,);//);"TOTPOP" 
		    m_pMapX->Refresh(); 
		} 
		break; 
	case 5 : 
		{ 
			theme=ds.GetThemes().Add(miThemeBarChart,cs,m_themeName);//miThemeRanged, ,);//);"TOTPOP" 
		    m_pMapX->Refresh(); 
		} 
		break; 
	} 
	//ds.GetThemes().RemoveAll(); 
} 
//ds.GetThemes().Add(COleVariant((long)miThemePieChart),COptionalVariant(),  
		//COptionalVariant(), COptionalVariant()); 
BOOL CThemes :: Create() 
{ 
	return CDialog :: Create(IDD_THEMES); 
} 
 
BOOL CThemes::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
	 
	// TODO: Add extra initialization here 
	m_themeType.SetCurSel(0); //设置组合框初始选中项 
	//如果没有绑定数据,提示要先进行数据绑定,如果绑定了,默认使用最后一个数据集(即刚添加的数据集) 
	CString msg; 
	msg.Format("There are %d Datasets attached to the map,Please attach Dataset first !",m_pMapX->GetDatasets().GetCount()); 
	if(m_pMapX->GetDatasets().GetCount()==0) 
    {AfxMessageBox(msg);} 
//动态设置数据集和字段名下拉列表 
	m_selDataset.ResetContent(); 
	for(long j=1;j<=m_pMapX->GetDatasets().GetCount();j++) 
	{ 
		m_selDataset.AddString(m_pMapX->GetDatasets().Item((COleVariant(j))).GetName()); 
	} 
	m_selDataset.SetCurSel(0); 
//设置初始字段组合框 
	m_selField.ResetContent(); 
	CString str; 
	int selcul=m_selDataset.GetCurSel(); 
	m_selDataset.GetLBText(selcul,str);    //把选中的项的字符串拷贝给STR 
	for(long t=1;t<=m_pMapX->GetDatasets().Item(str).GetFields().GetCount();t++) 
	{  
		m_selField.AddString(m_pMapX->GetDatasets().Item(str).GetFields().Item(t).GetName()); 
	} 
	m_selField.SetCurSel(0); 
	UpdateData(FALSE); 
	return TRUE; 
} 
 
void CThemes::OnModifyTheme() 
{ 
	if(theme==NULL) 
	{AfxMessageBox("请先创建专题图!");return;} 
	long n = m_pMapX->GetDatasets().Item(m_pMapX->GetDatasets().GetCount()).GetThemes().GetCount(); 
	CMapXTheme theme = m_pMapX->GetDatasets().Item(m_pMapX->GetDatasets().GetCount()).GetThemes().Item(n); 
	theme.ThemeDlg(); 
 
} 
 
void CThemes::OnCustomTheme()  
{ 
	try  
	{if(theme==NULL) 
	{AfxMessageBox("请先创建专题图!");return;} 
 
	theme.GetLegend().LegendDlg(); 
	} 
	catch (COleDispatchException *e) { 
 e->ReportError(); 
 e->Delete(); 
 } catch (COleException *e) { 
 e->ReportError(); 
 e->Delete(); 
 } 
} 
 
 
void CThemes::OnCloseupSeldataset()  
{ 
	CString str; 
	int selcul = m_selDataset.GetCurSel(); 
	m_selDataset.GetLBText(selcul,str); 
	//动态设置字段选项 
	if(m_pMapX->GetDatasets().Item(str).GetFields().GetCount()==0) 
	{ 
		AfxMessageBox("The dataset have no field ! please change the dataset"); 
		return; 
	} 
	m_selField.ResetContent(); 
	for(long t=1;t<=m_pMapX->GetDatasets().Item(str).GetFields().GetCount();t++) 
	{ 
		if(m_pMapX->GetDatasets().Item(str).GetFields().Item(t).GetType()== miTypeFloat|| 
			m_pMapX->GetDatasets().Item(str).GetFields().Item(t).GetType()== miTypeNumeric|| 
			m_pMapX->GetDatasets().Item(str).GetFields().Item(t).GetType() ==miTypeInteger|| 
			m_pMapX->GetDatasets().Item(str).GetFields().Item(t).GetType() ==miTypeSmallInt) 
		m_selField.AddString(m_pMapX->GetDatasets().Item(str).GetFields().Item(t).GetName()); 
	} 
	m_selField.SetCurSel(0); 
	UpdateData(FALSE); 
}