⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainfrm.cpp

📁 程序编写环境为Visual Studio.NET 2002
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// MainFrm.cpp : CMainFrame 类的实现
//

#include "stdafx.h"
#include "NameGis.h"
#include "NameGisView.h"
#include "HawkView.h"
#include "MapControlView.h"
#include "AppApi.h"
#include "Crack.h"
#include "MoFields.h"
#include "MoField.h"
#include "MoLine.h"
#include "MoParts.h"
#include "MoPoints.h"
#include "font.h"
#include "MoPolygon.h"
#include "MapObjects2.h"

#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CMainFrame

IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
	ON_WM_CREATE()
END_MESSAGE_MAP()

static UINT indicators[] =
{
	ID_SEPARATOR,           // 状态行指示器
	0, //ID_INDICATOR_CAPS,
	0, //ID_INDICATOR_NUM,
	//ID_INDICATOR_SCRL,
};


// CMainFrame 构造/销毁
//-----------------------------------------------------------------------------------------
CMainFrame::CMainFrame()
{
	CString StartupPath = GetModulePath();
	m_environment.m_szSDBPath = StartupPath + "\\电子地图\\";
	m_environment.m_szDBName = StartupPath + "\\地名数据库.mdb";
	m_environment.m_AppPath  = StartupPath;
	m_environment.m_szHelpPath = StartupPath + "\\帮助\\start.htm";
	m_environment.m_db.CreateDispatch(TEXT("MapObjects2.DataConnection"));
	m_environment.m_db.SetDatabase(m_environment.m_szSDBPath);

	NOFILTER = "(全部类型)";
	NOSUBFILTER = "(全部子类型)";
	FONTNAME = "楷体";
	FONTHEIGHT = 2500;
	MAX_SCALE = 4000;
	MIN_SCALE = 20000;
}
//-----------------------------------------------------------------------------------------
CMainFrame::~CMainFrame()
{
	if(m_pImageList)
	{
		delete m_pImageList;
		m_pImageList = NULL;
	}
}


int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
		!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
	{
		TRACE0("未能创建工具栏\n");
		return -1;      // 未能创建
	}

	if (!m_wndStatusBar.Create(this) ||
		!m_wndStatusBar.SetIndicators(indicators,
		  sizeof(indicators)/sizeof(UINT)))
	{
		TRACE0("未能创建状态栏\n");
		return -1;      // 未能创建
	}

	m_wndStatusBar.SetPaneInfo(1,ID_ROW_COL,SBPS_NORMAL,240);
	m_wndStatusBar.SetPaneInfo(2,ID_MAP_SCALE,SBPS_NORMAL,180);	

	// TODO: 如果不需要工具栏可停靠,则删除这三行
	m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_wndToolBar);

	if (!m_featureToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE 
		                           | CBRS_LEFT	| CBRS_GRIPPER | CBRS_TOOLTIPS 
								   | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) 
		|| !m_featureToolBar.LoadToolBar(IDR_TOOLBAR_FEATURE))
	{
		TRACE0("未能创建工具栏\n");
		return -1;      // 未能创建
	}

	// 使工具栏可停靠
	m_featureToolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);	
	DockControlBar(&m_featureToolBar);

	return 0;
}

//-----------------------------------------------------------------------------------------
BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
	if( !CFrameWnd::PreCreateWindow(cs) )
		return FALSE;

	// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
	// 样式
	cs.style &= ~FWS_PREFIXTITLE;
	cs.style &= ~FWS_ADDTOTITLE;

	return TRUE;
}
//-----------------------------------------------------------------------------------------

// CMainFrame 诊断

#ifdef _DEBUG
void CMainFrame::AssertValid() const
{
	CFrameWnd::AssertValid();
}

void CMainFrame::Dump(CDumpContext& dc) const
{
	CFrameWnd::Dump(dc);
}

#endif //_DEBUG


// CMainFrame 消息处理程序

//-----------------------------------------------------------------------------------------
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
	if (!m_wndSplitter.CreateStatic(this, 1, 2))
	{
		return FALSE;
	}

	if (!m_wndSplitter.CreateView(0, 0,
		RUNTIME_CLASS(CNameGisView), CSize(650, 0), pContext))
	{
		TRACE0("创建视图失败!\n");
		return FALSE;
	}

	if (!m_wndSplitter2.CreateStatic(
		&m_wndSplitter,     // 父窗口是第一个CSplitter变量
		2, 1,               // 新的分视包括2行1列
		WS_CHILD | WS_VISIBLE | WS_BORDER,  // 视图样式,必须设置WS_BORDER属性
		m_wndSplitter.IdFromRowCol(0, 1)
		))
	{
		return FALSE;
	}

	if (!m_wndSplitter2.CreateView(0, 0,
		RUNTIME_CLASS(CMapControlView), CSize(0, 400), pContext))
	{
		TRACE0("创建视图失败!\n");
		return FALSE;
	}

	if (!m_wndSplitter2.CreateView(1, 0,
		RUNTIME_CLASS(CHawkView), CSize(0, 0), pContext))
	{
		TRACE0("创建视图失败!\n");
		return FALSE;
	}

	return TRUE;
	//return CFrameWnd::OnCreateClient(lpcs, pContext);
}
//----------------------------------------------------------------------------------------------
BOOL CMainFrame::CreateDataSet()
{
	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		// 建立与数据库的连接
		tmpDB->Open(m_environment.m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return FALSE;
	}

	CDaoRecordset rs(tmpDB);
	try
	{
		int nIndex = 0;
		CString strSelect(_T("Select * From [地图集信息表]"));
		// 从数据库中读取“地图集信息表”数据表
		rs.Open(dbOpenDynaset,strSelect);

		m_environment.m_nMapNum = rs.GetRecordCount(); // 得到记录数目
		m_environment.m_mapInfos = new MapInfo [m_environment.m_nMapNum];

		// 循环得到各条记录中的各字段的值
		while (!rs.IsEOF())
		{
			COleVariant var;
			// 得到当前记录“表名”字段的值
			var = rs.GetFieldValue("表名");
			// 利用CCrack类的strVARIANT方法将结果转变为CString 类型
			CString szTableName = CCrack::strVARIANT(var);

			if (szTableName != "")
			{
				var = rs.GetFieldValue("名称");
				m_environment.m_mapInfos[nIndex].szName 
					= CCrack::strVARIANT(var);
				m_environment.m_mapInfos[nIndex].szMetaTable = szTableName;
				var = rs.GetFieldValue("索引表名");
				m_environment.m_mapInfos[nIndex].szIndexTable 
					= CCrack::strVARIANT(var);
				
				var = rs.GetFieldValue("X1");				
				m_environment.m_mapInfos[nIndex].rect.SetLeft(
					atof(CCrack::strVARIANT(var)));
				var = rs.GetFieldValue("Y1");
				m_environment.m_mapInfos[nIndex].rect.SetTop(
					atof(CCrack::strVARIANT(var)));
				var = rs.GetFieldValue("X2");
				m_environment.m_mapInfos[nIndex].rect.SetRight(
					atof(CCrack::strVARIANT(var)));
				var = rs.GetFieldValue("Y2");
				m_environment.m_mapInfos[nIndex].rect.SetBottom(
					atof(CCrack::strVARIANT(var)));               
              
				nIndex ++;
			}

			// 将游标移动到下一条记录
			rs.MoveNext();
		}

		rs.Close(); // 关闭数据表
		m_environment.m_nCurrMapIndex = 0;
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		tmpDB->Close();
		delete tmpDB;
		e->Delete();
		return FALSE;
	}

	if(tmpDB)
	{
		if(tmpDB->IsOpen())
		{
			// 关闭与数据库的连接
			tmpDB->Close();
		}

		// 释放资源
		delete tmpDB;
		tmpDB = NULL;
	}

	return TRUE;
}
//----------------------------------------------------------------------------------------------
// 从元数据表中读取数据,设置指定索引的地图中的图层信息
// 参数nIndex是需要设置图层信息的地图在地图集合中的索引
BOOL CMainFrame::LoadLayerInfos(int nIndex)
{
	// 元数据表名
	CString szMetaTable = m_environment.m_mapInfos[nIndex].szMetaTable;

	CDaoDatabase* tmpDB = new CDaoDatabase;
	try
	{
		// 连接数据库
		tmpDB->Open(m_environment.m_szDBName);
	}
	catch (CDaoException* e)
	{
		DisplayDaoException(e);
		delete tmpDB;
		e->Delete();
		return FALSE;
	}

	CDaoRecordset rs(tmpDB);
	try
	{
		int nIndex = 0;
		CString strSelect(_T("Select * From ["));
		strSelect += szMetaTable;
		strSelect += _T("] Where 存在 = true Order By 显示次序1,显示次序2,id");
		// 打开元数据表
		rs.Open(dbOpenDynaset,strSelect);
   
		m_environment.m_nLayerNum = rs.GetRecordCount();
		m_environment.m_layerInfos = NULL;
		m_environment.m_layerInfos = new LayerInfo[m_environment.m_nLayerNum]; 
		
		int nIdx = 0;
		// 循环访问各条记录
		while(!rs.IsEOF())
		{
			COleVariant var;
			var = rs.GetFieldValue("名称");
			m_environment.m_layerInfos[nIdx].szName = CCrack::strVARIANT(var);
			var = rs.GetFieldValue("大类");
			m_environment.m_layerInfos[nIdx].szType = CCrack::strVARIANT(var);
			var = rs.GetFieldValue("图形文件");
			m_environment.m_layerInfos[nIdx].szFileName
				= CCrack::strVARIANT(var); 
			var = rs.GetFieldValue("中类");
			m_environment.m_layerInfos[nIdx].szSubType = CCrack::strVARIANT(var);
			var = rs.GetFieldValue("属性表名");
			m_environment.m_layerInfos[nIdx].szTableName
				= CCrack::strVARIANT(var); 
			var = rs.GetFieldValue("图层名");
			m_environment.m_layerInfos[nIdx].szLayerName
				= CCrack::strVARIANT(var);
			var = rs.GetFieldValue("显示");
			m_environment.m_layerInfos[nIdx].bVisible = CCrack::boolVARIANT(var); 
			var = rs.GetFieldValue("注记");
			m_environment.m_layerInfos[nIdx].bLable = CCrack::boolVARIANT(var); 
			var = rs.GetFieldValue("选择");
			m_environment.m_layerInfos[nIdx].bCanSelected
				= CCrack::boolVARIANT(var); 
			var = rs.GetFieldValue("控制");
			m_environment.m_layerInfos[nIdx].bCanControl
				= CCrack::boolVARIANT(var); 
			var = rs.GetFieldValue("地物");
			m_environment.m_layerInfos[nIdx].bBackground
				= CCrack::boolVARIANT(var); 
            
			var = rs.GetFieldValue("小类");
			if (var.vt != VT_NULL)
			{				
				m_environment.m_layerInfos[nIdx].szSubType2
					= CCrack::strVARIANT(var);
			}
			else
			{
				m_environment.m_layerInfos[nIdx].szSubType2 = "";
			}
            
			var = rs.GetFieldValue("次小类");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -