?? svftogeomediadlg.cpp
字號:
// SvfToGeoMediaDlg.cpp : implementation file
//
#include "stdafx.h"
#include "SvfToGeoMedia.h"
#include "SvfToGeoMediaDlg.h"
#include "ADOConn.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CTranslate* ptranslate;
//全局函數
void SendMsg(CString str)
{
CWnd* pWnd=NULL;
pWnd = AfxGetMainWnd();
HWND hwnd = pWnd->GetSafeHwnd();
SendMessage(hwnd,WM_MSG,(WPARAM)str.GetBuffer(0),0);
}
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSvfToGeoMediaDlg dialog
CSvfToGeoMediaDlg::CSvfToGeoMediaDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSvfToGeoMediaDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSvfToGeoMediaDlg)
m_strUser = _T("");
m_strPassWord = _T("");
m_strPath = _T("");
m_strServer = _T("");
m_strPath_DB = _T("");
m_strDb = _T("");
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_bInitialized =false;
m_strType= _T("");
m_pThread=NULL;
m_pevent = new CEvent(0,1);
}
void CSvfToGeoMediaDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSvfToGeoMediaDlg)
DDX_Control(pDX, IDC_LIST, m_ctrlListBox);
DDX_Text(pDX, IDC_EDIT_User, m_strUser);
DDX_Text(pDX, IDC_Pass, m_strPassWord);
DDX_Text(pDX, IDC_EDIT_Path, m_strPath);
DDX_Text(pDX, IDC_EDIT_Server, m_strServer);
DDX_Text(pDX, IDC_EDIT_PathDB, m_strPath_DB);
DDX_Text(pDX, IDC_EDIT_DB, m_strDb);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSvfToGeoMediaDlg, CDialog)
//{{AFX_MSG_MAP(CSvfToGeoMediaDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON, OnButton)
ON_BN_CLICKED(IDC_BUTTON_Connect, OnBUTTONConnect)
ON_BN_CLICKED(IDC_BUTTON_Browse, OnBUTTONBrowse)
ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOk)
ON_BN_CLICKED(IDC_BUTTON_Browse_DbFile, OnBUTTONBrowseDbFile)
ON_BN_CLICKED(IDC_RADIO_acess, OnRADIOacess)
ON_BN_CLICKED(IDC_RADIO_Oracle, OnRADIOOracle)
ON_BN_CLICKED(IDC_RADIO_SQLSERVER, OnRadioSqlserver)
ON_BN_CLICKED(IDC_BUTTON_DO, OnButtonDo)
ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_MSG, ONSTRING)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSvfToGeoMediaDlg message handlers
BOOL CSvfToGeoMediaDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//
CheckRadioButton(IDC_RADIO_acess,IDC_RADIO_acess,IDC_RADIO_acess);
OnRADIOacess();
return TRUE; // return TRUE unless you set the focus to a control
}
void CSvfToGeoMediaDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CSvfToGeoMediaDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// The system calls this to obtain the cursor to display while the user drags
// the minimized window.
HCURSOR CSvfToGeoMediaDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CSvfToGeoMediaDlg::CreateObject()
{
try
{
//添加面
//添加線
_DGMPolylineGeometryPtr ptrLine;
ptrLine.CreateInstance(__uuidof(PolylineGeometry));
_DGMPointPtr pPoint0;
pPoint0.CreateInstance("GeoMedia.Point");
pPoint0->X = -444600;
pPoint0->Y = 417600;
pPoint0->Z = 0;
ptrLine->Points->Add(pPoint0);
pPoint0.CreateInstance("GeoMedia.Point");
pPoint0->X = -1200000;
pPoint0->Y = 690000;
pPoint0->Z = 0;
ptrLine->Points->Add(pPoint0);
//創建管道
OriginatingPipePtr ptrOrigPipe;
//從數據庫連接創建管道
m_ptrDVIConnection->CreateOriginatingPipe(&ptrOrigPipe);
//管道表名
ptrOrigPipe->put_Table(_bstr_t("Rivers"));
//創建記錄集
GRecordsetPtr ptrAddRs ;
//從管道當中得到紀錄集
ptrOrigPipe->get_OutputRecordset(&ptrAddRs);
////////////////////////////////////////////////////////////////
//取得目前最大記錄
long temp_v;
ptrAddRs->MoveLast();
for(long i = 0;i < ptrAddRs->GFields->Count;i++)
{
BSTR fieldname;
ptrAddRs->GFields->Item[(long)i]->get_Name(&fieldname);
CString strfieldname = fieldname;
if(strfieldname == "ID")
temp_v = ptrAddRs->GFields->Item[(long)i]->Value;
}
//添加新記錄
ptrAddRs->AddNew();
for ( i=0;i<ptrAddRs->GFields->Count; i++)
{
BSTR fieldname;
ptrAddRs->GFields->Item[(long)i]->get_Name(&fieldname);
CString strfieldname = fieldname;
if(strfieldname == "Geometry")
ptrGSS->SetGeometry(ptrAddRs->GFields->Item[(long)i],ptrLine);
else if(strfieldname == "id")
ptrAddRs->GFields->Item[(long)i]->put_Value(_variant_t((long)++temp_v));
else
ptrAddRs->GFields->Item[(long)i]->put_Value(_variant_t("0"));
}
ptrAddRs->Update();
}
catch (_com_error e) {
AfxMessageBox(e.Description());
}
//添加面
//_DGMPolygonGeometryPtr ptrPolygon;
//ptrPolygon.CreateInstance(__uuidof(PolygonGeometry));
}
//連接到數據庫
bool CSvfToGeoMediaDlg::ConnectOarcle(CString strUse, CString strPass, CString strServer)
{
return true;
}
void CSvfToGeoMediaDlg::OnButton()
{
// TODO: Add your control notification handler code here
//CStringArray strlist;
//if (!ConnectOarcle("system","manager","svf"))
//{
// AfxMessageBox("連接數據庫過程中出現錯誤!");
// return;
//}
//_MetadataServicePtr ptrMetaData ;
//ptrMetaData.CreateInstance(__uuidof(MetadataService)) ;
//ptrMetaData->putref_Connection((IDispatch**)&G_ptrDVIConnection) ;
//long nTableMask = ~(64) ; // ~gmmtNonGraphic
//_variant_t vTables ;
//ptrMetaData->GetTables(&nTableMask,&vTables) ;
//if (vTables.vt != (VT_ARRAY | VT_BSTR)) HR_CHECK( E_FAIL ) ;
//SAFEARRAY *pSA = vTables.parray ;
//long LBound = pSA->rgsabound[0].lLbound ;
//long UBound = LBound + pSA->rgsabound[0].cElements ;
//if (LBound == UBound) HR_CHECK( E_FAIL ) ;
//BSTR pBstr = NULL ;
//for (long nCount = LBound ; nCount < UBound ; nCount++)
//{
// SafeArrayGetElement(pSA, &nCount, (void *)&pBstr) ;
// CString strTable = pBstr ;
// SysFreeString(pBstr) ;
// pBstr = NULL ;
// if (strTable.IsEmpty()) continue ;
// strlist.Add(strTable);
//}
//pSA = NULL ;
//vTables.Clear() ;
//if (!m_CListBox.GetCount()) HR_CHECK( E_FAIL ) ;
//m_CListBox.SetCurSel(0) ;
//CreateObject();
}
//連接Acess數據庫
bool CSvfToGeoMediaDlg::ConnectAcess()
{
return true;
}
void CSvfToGeoMediaDlg::OnBUTTONConnect()
{
// TODO: Add your control notification handler code here
//CTranslate translate("","","","測試.txt");
//translate.Init();
//translate.Translate();
}
void CSvfToGeoMediaDlg::OnBUTTONBrowse()
{
// TODO: Add your control notification handler code here
UpdateData(true);
char szFilters[]= "SVF Files (*.svf)|*.svf|All Files (*.*)|*.*||";
CFileDialog dlg(true,"svf","*.svf",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilters,this);
if (dlg.DoModal()==IDOK)
{
CString strFileName = dlg.GetPathName();
m_strPath = strFileName;
UpdateData(false);
}
}
void CSvfToGeoMediaDlg::OnButtonOk()
{
// TODO: Add your control notification handler code here
}
void CSvfToGeoMediaDlg::OnBUTTONBrowseDbFile()
{
// TODO: Add your control notification handler code here
UpdateData(true);
char szFilters[]= "MDB Files (*.mdb)|*.mdb|All Files (*.*)|*.*||";
CFileDialog dlg(true,"mdb","*.mdb",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilters,this);
if (dlg.DoModal()==IDOK)
{
CString strFileName = dlg.GetPathName();
m_strPath_DB = strFileName;
UpdateData(false);
}
}
void CSvfToGeoMediaDlg::OnRADIOacess()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_STATIC_User)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_User)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_PassWord)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_Pass)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_Server)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_Server)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_Connect)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_DB)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_DB)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_DBPATH)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_PathDB)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_Browse_DbFile)->ShowWindow(SW_SHOW);
m_strType= "ACCESS";
}
void CSvfToGeoMediaDlg::OnRADIOOracle()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_STATIC_User)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_User)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_PassWord)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_Pass)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_Server)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_Server)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_Connect)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_DB)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_DB)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_STATIC_DBPATH)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_PathDB)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_Browse_DbFile)->ShowWindow(SW_HIDE);
m_strType = "ORACLE";
}
void CSvfToGeoMediaDlg::OnRadioSqlserver()
{
// TODO: Add your control notification handler code here
GetDlgItem(IDC_STATIC_User)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_User)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_PassWord)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_Pass)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_Server)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_Server)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_BUTTON_Connect)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_DB)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_EDIT_DB)->ShowWindow(SW_SHOW);
GetDlgItem(IDC_STATIC_DBPATH)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_EDIT_PathDB)->ShowWindow(SW_HIDE);
GetDlgItem(IDC_BUTTON_Browse_DbFile)->ShowWindow(SW_HIDE);
m_strType = "SQLSERVER";
}
UINT DOTaskThread(LPVOID lpParam)
{
// 初始化OLE/COM庫環境
//::CoInitialize(NULL);
CTranslate translate;
CSvfToGeoMediaDlg * pDlg = (CSvfToGeoMediaDlg*)lpParam;
translate.m_strDbType = pDlg->m_strType;
translate.m_strAccess = pDlg->m_strPath_DB;
translate.m_strDataBase =pDlg->m_strServer;
translate.m_strUser = pDlg->m_strUser;
translate.m_strPassWord = pDlg->m_strPassWord;
translate.m_strDB = pDlg->m_strDb;
translate.m_strSvfFile = pDlg->m_strPath;
translate.m_pevent = pDlg->m_pevent;
try
{
if (!translate.Translate())
{
translate.DelGeoObj();
}
}catch (CException* e )
{
try
{
translate.DelGeoObj();
}
catch (...) {
AfxMessageBox("數據回退過程中出現錯誤!");
}
AfxMessageBox("數據轉換過程中出現錯誤!");
}
return 1;
}
UINT DOTaskBackThread(LPVOID lpParam)
{
// 初始化OLE/COM庫環境
/*
::CoInitialize(NULL);
CSvfToGeoMediaDlg * pDlg = (CSvfToGeoMediaDlg*)lpParam;
ptranslate->m_strDbType = pDlg->m_strType;
ptranslate->m_strAccess = pDlg->m_strPath_DB;
ptranslate->m_strDataBase =pDlg->m_strServer;
ptranslate->m_strUser = pDlg->m_strUser;
ptranslate->m_strPassWord = pDlg->m_strPassWord;
ptranslate->m_strDB = pDlg->m_strDb;
ptranslate->m_strSvfFile = pDlg->m_strPath;
ptranslate->m_pevent = pDlg->m_pevent;
try
{
ptranslate->DelGeoObj();
}catch (CException* e )
{
AfxMessageBox("數據回退過程中出現錯誤!");
}
*/
return 0;
}
void CSvfToGeoMediaDlg::OnButtonDo()
{
// TODO: Add your control notification handler code here
UpdateData();
if (m_strPath=="")
{
AfxMessageBox("輸入SVF數據文件路徑!");
return;
}
DOTaskThread(this);
//m_pevent->ResetEvent();
//m_pThread = AfxBeginThread(DOTaskThread,this);
}
LRESULT CSvfToGeoMediaDlg::ONSTRING(WPARAM wparam,LPARAM lparam)
{
m_ctrlListBox.InsertString(-1,(LPCTSTR)wparam);
//m_ctrlListBox.PostMessage(SB_LINEDOWN,0,0);
m_ctrlListBox.SetCurSel(m_ctrlListBox.GetCount()-1);
return 0;
}
void CSvfToGeoMediaDlg::OnButtonCancel()
{
// TODO: Add your control notification handler code here
if (m_pThread!=NULL)
{
if (WaitForSingleObject(m_pThread->m_hThread,0)== WAIT_TIMEOUT)
{
m_pThread->SuspendThread();
if (AfxMessageBox("你確定要取消的數據導入嗎?",MB_YESNO)== IDYES )
{
m_pevent->SetEvent();
}
m_pThread->ResumeThread();
}
}
//取消轉換過程,回退
//if (ptranslate!=NULL)
//{
// m_pevent->ResetEvent();
// m_pThread = AfxBeginThread(DOTaskBackThread,this);
//}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -