datasetcopydlg.cpp
来自「用VC+SuperMap开发的校园GIS系统」· C++ 代码 · 共 336 行
CPP
336 行
// DatasetCopyDlg.cpp : implementation file
//
#include "stdafx.h"
#include "CampusGis.h"
#include "DatasetCopyDlg.h"
#include "sodatasources.h"
#include "sodatasource.h"
#include "sodatasets.h"
#include "sodataset.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDatasetCopyDlg dialog
CDatasetCopyDlg::CDatasetCopyDlg(CWnd* pParent /*=NULL*/)
: CDialog(CDatasetCopyDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CDatasetCopyDlg)
//}}AFX_DATA_INIT
}
void CDatasetCopyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDatasetCopyDlg)
DDX_Control(pDX, IDC_EDIT, m_EditName);
DDX_Control(pDX, IDOK, m_Ok);
DDX_Control(pDX, IDC_REMOVEALL, m_RemoveAll);
DDX_Control(pDX, IDC_REMOVE, m_Remove);
DDX_Control(pDX, IDC_ADDALL, m_AddAll);
DDX_Control(pDX, IDC_ADD, m_Add);
DDX_Control(pDX, IDC_CHECKNAME, m_chkRenameCopy);
DDX_Control(pDX, IDC_LISTSOURCEDT, m_ListSourceDt);
DDX_Control(pDX, IDC_LISTDESTDT, m_ListDestDt);
DDX_Control(pDX, IDC_CMBSOURCEDS, m_cmbSourceDs);
DDX_Control(pDX, IDC_CMBDESTDS, m_cmbDestDs);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDatasetCopyDlg, CDialog)
//{{AFX_MSG_MAP(CDatasetCopyDlg)
ON_CBN_SELCHANGE(IDC_CMBSOURCEDS, OnSelchangeCmbsourceds)
ON_CBN_SELCHANGE(IDC_CMBDESTDS, OnSelchangeCmbdestds)
ON_BN_CLICKED(IDC_ADD, OnAdd)
ON_BN_CLICKED(IDC_ADDALL, OnAddAll)
ON_BN_CLICKED(IDC_REMOVE, OnRemove)
ON_BN_CLICKED(IDC_REMOVEALL, OnRemoveAll)
ON_LBN_DBLCLK(IDC_LISTSOURCEDT, OnDblclkListsourcedt)
ON_LBN_DBLCLK(IDC_LISTDESTDT, OnDblclkListdestdt)
ON_BN_CLICKED(IDC_CHECKNAME, OnCheckName)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDatasetCopyDlg message handlers
BOOL CDatasetCopyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//初始化和添加源数据源,目标数据源列表
CsoDataSource objDs;
m_pSuperWorkspace=&GetMainFramePointer()->m_SuperWorkspace;
m_cmbSourceDs.ResetContent();
m_cmbDestDs.ResetContent();
for(long i=1;i<=m_pSuperWorkspace->GetDatasources().GetCount();i++)
{
objDs=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(i));
if(objDs)
{
m_cmbSourceDs.AddString((LPCTSTR )objDs.GetAlias());
m_cmbDestDs.AddString((LPCTSTR )objDs.GetAlias());
}
}
objDs.ReleaseDispatch();
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDatasetCopyDlg::OnSelchangeCmbsourceds()
{
//选择需复制源数据源
CsoDatasets objDts;
CString strSourceDs;
int index;
index=m_cmbSourceDs.GetCurSel();
if(index < 0)
return;
m_cmbSourceDs.GetLBText(index,strSourceDs);
objDts=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(strSourceDs)).GetDatasets();
if(!objDts)
{
AfxMessageBox("数据源"+strSourceDs+"错误!");
return;
}
m_ListSourceDt.ResetContent();
CsoDataset objSourceDt;
for(long i=1;i<objDts.GetCount();i++)
{
objSourceDt=objDts.GetItem(COleVariant(i));
if(objSourceDt)
m_ListSourceDt.AddString((LPCTSTR )objSourceDt.GetName());
}
if(m_ListSourceDt.GetCount() > 0)
m_ListSourceDt.SetCurSel(0);
objDts.ReleaseDispatch();
objSourceDt.ReleaseDispatch();
}
void CDatasetCopyDlg::OnSelchangeCmbdestds()
{
//选择追加的目标数据源
CString strDestDs,strSourceDs;
int index;
index=m_cmbDestDs.GetCurSel();
if(index < 0)
return;
m_cmbDestDs.GetLBText(index,strDestDs);
index=m_cmbSourceDs.GetCurSel();
if(index < 0)
return;
m_cmbSourceDs.GetLBText(index,strSourceDs);
if(strDestDs==strSourceDs)
m_chkRenameCopy.SetCheck(1);
else
m_chkRenameCopy.SetCheck(0);
if(m_chkRenameCopy.GetCheck()==1)
m_EditName.ShowWindow(SW_SHOW);
}
void CDatasetCopyDlg::OnAdd()
{
//把选中的数据集对象作为复制对象
CString strSourceDt;
int index;
index=m_ListSourceDt.GetCurSel();
m_ListSourceDt.GetText(index,strSourceDt);
m_ListDestDt.AddString(strSourceDt);
m_ListSourceDt.DeleteString(index);
m_ListDestDt.SetCurSel(0);
if(m_ListSourceDt.GetCount() > 0)
m_ListSourceDt.SetCurSel(0);
else
{
m_Add.EnableWindow(FALSE);
m_AddAll.EnableWindow(FALSE);
}
m_Ok.EnableWindow(TRUE);
m_Remove.EnableWindow(TRUE);
m_RemoveAll.EnableWindow(TRUE);
}
void CDatasetCopyDlg::OnAddAll()
{
//把源数据源中的所有数据集都作为复制的对象
CString strSourceDt;
for(int i=0;i<m_ListSourceDt.GetCount();i++)
{
m_ListSourceDt.GetText(i,strSourceDt);
m_ListDestDt.AddString(strSourceDt);
}
m_ListDestDt.SetCurSel(0);
m_ListSourceDt.ResetContent();
m_Remove.EnableWindow(TRUE);
m_RemoveAll.EnableWindow(TRUE);
m_Ok.EnableWindow(TRUE);
m_Add.EnableWindow(FALSE);
m_AddAll.EnableWindow(FALSE);
}
void CDatasetCopyDlg::OnRemove()
{
//移除以前添加的用来复制的数据集
int index;
CString strDestDt;
index=m_ListDestDt.GetCurSel();
if(index < 0)
return;
m_ListDestDt.GetText(index,strDestDt);
m_ListSourceDt.AddString(strDestDt);
m_ListDestDt.DeleteString(index);
m_ListSourceDt.SetCurSel(0);
if(m_ListDestDt.GetCount()==0)
{
m_Ok.EnableWindow(FALSE);
m_RemoveAll.EnableWindow(FALSE);
m_Remove.EnableWindow(FALSE);
}
else
m_ListDestDt.SetCurSel(0);
m_Add.EnableWindow(TRUE);
m_AddAll.EnableWindow(TRUE);
}
void CDatasetCopyDlg::OnRemoveAll()
{
//移除全部的数据集
CString strDestDt;
for(int i=0;i<m_ListDestDt.GetCount();i++)
{
m_ListDestDt.GetText(i,strDestDt);
m_ListSourceDt.AddString(strDestDt);
}
m_ListSourceDt.SetCurSel(0);
m_ListDestDt.ResetContent();
m_Ok.EnableWindow(FALSE);
m_RemoveAll.EnableWindow(FALSE);
m_Add.EnableWindow(TRUE);
m_AddAll.EnableWindow(TRUE);
}
void CDatasetCopyDlg::OnDblclkListsourcedt()
{
//双击添加数据集
OnAdd();
}
void CDatasetCopyDlg::OnDblclkListdestdt()
{
//双击移除数据集
OnRemove();
}
void CDatasetCopyDlg::OnOK()
{
//确定复制源数据源中的部分或全部数据集到目标数据源中
CsoDataSource objDestDs,objSourceDs;
CsoDataset objDt;
CString strName,strDestDs,strSourceDs;
int index;
index=m_cmbSourceDs.GetCurSel();
if(index < 0)
return;
m_cmbSourceDs.GetLBText(index,strSourceDs);
objSourceDs=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(strSourceDs));
if(!objSourceDs)
{
AfxMessageBox("数据源"+strSourceDs+"内部错误,无法继续!");
return;
}
index=m_cmbDestDs.GetCurSel();
if(index < 0)
return;
m_cmbDestDs.GetLBText(index,strDestDs);
if(strDestDs==strSourceDs)//同数据源复制必须改名
{
m_chkRenameCopy.SetCheck(1);
m_EditName.EnableWindow();
}
objDestDs=m_pSuperWorkspace->GetDatasources().GetItem(COleVariant(strDestDs));
if(!objDestDs)
{
AfxMessageBox("数据源"+strDestDs+"内部错误,无法继续!");
objSourceDs.ReleaseDispatch();
return;
}
for(int i=0;i<m_ListDestDt.GetCount();i++)
{
m_ListDestDt.SetCurSel(i);
m_ListDestDt.GetText(i,strName);
strDestDs=strName;
if(objDestDs.IsAvailableDatasetName(strName)==false)//数据集名合法判断
{
m_chkRenameCopy.SetCheck(1);
m_EditName.EnableWindow();
}
if(m_chkRenameCopy.GetCheck()==1)//改名复制,进行改名同名判断
{
GetDlgItemText(IDC_EDIT,strName);
if(strName.IsEmpty())
{
int nResponse=MessageBox("数据集名为空!\n是否取消复制?","消息框",MB_ICONQUESTION | MB_OKCANCEL);
if(nResponse==IDYES)
{
objDestDs.ReleaseDispatch();
objSourceDs.ReleaseDispatch();
objDt.ReleaseDispatch();
CDialog::OnOK();
}
}
}
if(objDestDs.IsAvailableDatasetName(strName))
{
objDt=objDestDs.CopyDataset(objSourceDs.GetDatasets().GetItem(COleVariant(strDestDs)),
strName,true);
if(objDt)
AfxMessageBox("复制成功!");
else
AfxMessageBox("复制失败!");
}
}
GetMainFramePointer()->GetManager()->Refresh();
objDestDs.ReleaseDispatch();
objSourceDs.ReleaseDispatch();
objDt.ReleaseDispatch();
CDialog::OnOK();
}
void CDatasetCopyDlg::OnCheckName()
{
// TODO: Add your control notification handler code here
if(m_chkRenameCopy.GetCheck()==1)
m_EditName.ShowWindow(SW_SHOW);
else
m_EditName.ShowWindow(SW_HIDE);
}
CMainFrame* CDatasetCopyDlg::GetMainFramePointer()
{
CMainFrame *pFrame=(CMainFrame *)::AfxGetMainWnd();
return pFrame;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?