📄 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 "mapxsamp.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_CLBN_CHKCHANGE(IDC_FIELDS, OnCheckChange)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CAddThemeDlg message handlers
BOOL CAddThemeDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT(m_pMapX);
// add datasets to combo
// combo is not sorted, so combo index = dataset index
CComboBox *pDatasetCombo = (CComboBox *)GetDlgItem(IDC_DATASETS);
ASSERT(pDatasetCombo);
pDatasetCombo->AddString("<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();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
// add themetypes to combo
// combo is not sorted, so combo index = theme type
CComboBox *pThemeCombo = (CComboBox *)GetDlgItem(IDC_THEMETYPES);
ASSERT(pThemeCombo);
pThemeCombo->AddString("Ranged");
pThemeCombo->AddString("Bar Chart");
pThemeCombo->AddString("Pie Chart");
pThemeCombo->AddString("Graduated Symbol");
pThemeCombo->AddString("Dot Density");
pThemeCombo->AddString("Individual Value");
pThemeCombo->AddString("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 checked
int num=m_ckListBox.GetCount();
int i;
BOOL bFirst=TRUE;
for (i=0;i<num;i++) {
if (m_ckListBox.GetCheck(i)) {
m_ckListBox.SetCheck(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("No Dataset selected");
return;
}
CMapXDataset ds = m_pMapX->GetDatasets().Item(nDataset);
CMapXFields dsflds = ds.GetFields();
// 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.GetCheck(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("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();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
// 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();
}
catch (COleException *e) {
e->ReportError();
e->Delete();
}
}
void CAddThemeDlg::OnCheckChange()
{
int n = m_ckListBox.GetCurSel();
int num=m_ckListBox.GetCount();
int i;
if (n == -1)
return;
BOOL b = m_ckListBox.GetCheck(n);
if (!m_bMultiVar) {
for (i=0;i<num;i++) {
if(i!=n)
m_ckListBox.SetCheck(i, 0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -