📄 addthemedlg.cpp
字号:
// AddThemeDlg.cpp : implementation file
//
/* This sample application and corresponding sample code is provided
* for example purposes only. It has not undergone rigorous testing
* and as such should not be shipped as part of a final application
* without extensive testing on the part of the organization releasing
* the end-user product.
*/
#include "stdafx.h"
#include "MapXMobileViewer.h"
#include "AddThemeDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CAddThemeDlg dialog
CAddThemeDlg::CAddThemeDlg(CWnd* pParent /*=NULL*/)
: CDialog(CAddThemeDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CAddThemeDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_bMultiVar=FALSE;
m_pMapX = NULL;
m_nThemeType = 0;
}
void CAddThemeDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAddThemeDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
DDX_Control(pDX, IDC_FIELDS, m_ckListBox);
}
BEGIN_MESSAGE_MAP(CAddThemeDlg, CDialog)
//{{AFX_MSG_MAP(CAddThemeDlg)
ON_CBN_SELCHANGE(IDC_DATASETS, OnSelchangeDatasets)
ON_CBN_SELCHANGE(IDC_THEMETYPES, OnSelchangeThemetypes)
//}}AFX_MSG_MAP
ON_LBN_SELCHANGE(IDC_FIELDS, OnSelChange)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAddThemeDlg message handlers
BOOL CAddThemeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT(m_pMapX);
CheckDlgButton(IDC_COMPACTLEGEND, m_pMapX->GetPreferCompactLegends());
// add datasets to combo
// combo is not sorted, so combo index = dataset index
CComboBox *pDatasetCombo = (CComboBox *)GetDlgItem(IDC_DATASETS);
ASSERT(pDatasetCombo);
pDatasetCombo->AddString(_T("<None>"));
TRY {
CMapXDatasets dss = m_pMapX->GetDatasets();
long nCount = dss.GetCount();
for (long i=1; i<=nCount; i++) {
CMapXDataset ds = dss[i];
pDatasetCombo->AddString(ds.GetName());
}
if (nCount > 0) {
pDatasetCombo->SetCurSel(1);
}
}
CATCH (COleDispatchException, e) {
e->ReportError();
e->Delete();
}
AND_CATCH (COleException, e) {
e->ReportError();
e->Delete();
}
END_CATCH
// add themetypes to combo
// combo is not sorted, so combo index = theme type
CComboBox *pThemeCombo = (CComboBox *)GetDlgItem(IDC_THEMETYPES);
ASSERT(pThemeCombo);
pThemeCombo->AddString(_T("Ranged"));
pThemeCombo->AddString(_T("Bar Chart"));
pThemeCombo->AddString(_T("Pie Chart"));
pThemeCombo->AddString(_T("Graduated Symbol"));
pThemeCombo->AddString(_T("Dot Density"));
pThemeCombo->AddString(_T("Individual Value"));
pThemeCombo->AddString(_T("Auto"));
pThemeCombo->SetCurSel(6); // auto
m_nThemeType = 6;
// add dataset fields to listbox
InitListBox();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CAddThemeDlg::OnSelchangeDatasets()
{
InitListBox();
}
void CAddThemeDlg::OnSelchangeThemetypes()
{
int n;
CComboBox *pCombo = (CComboBox *)GetDlgItem(IDC_THEMETYPES);
n = pCombo->GetCurSel();
if (n != -1) {
m_nThemeType = n;
m_bMultiVar = (m_nThemeType == miThemeBarChart || m_nThemeType == miThemePieChart);
if (m_bMultiVar)
return;
// single var theme
// make sure only 1 Seled
int num=m_ckListBox.GetCount();
int i;
BOOL bFirst=TRUE;
for (i=0;i<num;i++) {
if (m_ckListBox.GetSel(i)) {
m_ckListBox.SetSel(i, bFirst);
bFirst=FALSE;
}
}
}
}
// Add a theme and keep dialog open
void CAddThemeDlg::OnOK()
{
TRY {
VARIANT Type;
COptionalVariant Name;
VARIANT Field;
CMapXFields flds;
int nDataset = ((CComboBox *)GetDlgItem(IDC_DATASETS))->GetCurSel();
if (nDataset <= 0) {
AfxMessageBox(_T("No Dataset selected"));
return;
}
CMapXDataset ds = m_pMapX->GetDatasets().Item(nDataset);
CMapXFields dsflds = ds.GetFields();
m_pMapX->SetPreferCompactLegends(IsDlgButtonChecked(IDC_COMPACTLEGEND));
// set theme type
Type.vt = VT_I4;
Type.lVal = m_nThemeType;
// use default name
Name.vt = VT_ERROR;
Name.scode = DISP_E_PARAMNOTFOUND;
// create a fields collection of 1 or more fields
// to create theme on
int num=m_ckListBox.GetCount();
long i;
flds.CreateDispatch(flds.GetClsid());
for (i=0;i<num;i++) {
if (m_ckListBox.GetSel(i)) {
CMapXField fld = dsflds[i+1L];
flds.Add(fld.GetName(), fld.GetName());
}
}
if (flds.GetCount() <= 0) {
// assume we are letting mapx pick field
if (m_bMultiVar) {
AfxMessageBox(_T("For Bar and Pie themes, you must choose at least 1 field"));
return;
}
Field.vt = VT_ERROR;
Field.scode = DISP_E_PARAMNOTFOUND;
}
else {
Field.vt = VT_DISPATCH;
Field.pdispVal = flds;
}
// get themes collection
CMapXThemes objThemes = ds.GetThemes();
// add theme - will be visible by default
CMapXTheme thm = objThemes.Add(Type, Field, Name);
}
CATCH (COleDispatchException, e) {
e->ReportError();
e->Delete();
}
AND_CATCH (COleException, e) {
e->ReportError();
e->Delete();
}
END_CATCH
EndDialog(IDOK);
}
// fill in dataset fields based on selected dataset
void CAddThemeDlg::InitListBox()
{
int nDataset = ((CComboBox *)GetDlgItem(IDC_DATASETS))->GetCurSel();
m_ckListBox.ResetContent();
// no dataset selected
if (nDataset <= 0) {
return;
}
TRY {
CMapXDataset ds = m_pMapX->GetDatasets().Item(nDataset);
CMapXFields flds = ds.GetFields();
long nFieldCount = flds.GetCount();
for (long i=1; i<=nFieldCount; i++) {
CMapXField fld = flds[i];
int n=m_ckListBox.AddString(fld.GetName());
m_ckListBox.SetItemData(n, (DWORD)i);
}
}
CATCH (COleDispatchException, e) {
e->ReportError();
e->Delete();
}
AND_CATCH (COleException, e) {
e->ReportError();
e->Delete();
}
END_CATCH
}
void CAddThemeDlg::OnSelChange()
{
int n = m_ckListBox.GetCurSel();
int num=m_ckListBox.GetCount();
int i;
if (n == -1)
return;
BOOL b = m_ckListBox.GetSel(n);
if (!m_bMultiVar) {
for (i=0;i<num;i++) {
if(i!=n)
m_ckListBox.SetSel(i, 0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -