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);
}