gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:19239回复:60

使用Visual C++ 6.0开发MAPGIS浏览器

楼主#
更多 发布于:2004-07-13 11:54
地理信息系统(GIS)是集计算机科学、地理学、测绘遥感学、环境科学、城市科学、空间科学、信息科学和管理科学为一体的新兴边缘学科,目前发展已相当成熟,国内外高水平软件分别有ARC/INFO、MAPINFO、MAPGIS等。下文介绍一个以MAPGIS为平台进行二次开发的实例。
<P>使用Visual C++ 6.0开发MAPGIS浏览器  </P>
<P>  近日,笔者一直在进行MAPGIS的二次开发,略有所得。现将部分心得整理出来,与大家分享。

一、MAPGIS简介

  信息作为一种新兴的产业越来越受到人们的重视,信息革命的浪潮正冲击着人类社会,在这场革命中,地理信息系统(GIS)作为集计算机科学、地理学、测绘遥感学、环境科学、城市科学、空间科学、信息科学和管理科学为一体的新兴边缘学科迅速地兴起和发展起来。地理信息系统研究计算机技术和空间地理分布数据的结合,通过一系列空间操作和分析方法,为地球科学、环境科学和工程设计,乃至企业管理提供对规划、管理和决策有用的信息,并回答用户所提出的有关问题。
  地理信息系统目前发展已相当成熟,国外高水平软件分别有ARC/INFO、MAPINFO等;同时国内高水平软件也较多,尤其以中国地质大学(武汉)研制的MAPGIS最为先进,其功能达到甚至超过国外同类软件的水平,而且为我国自主开发、自主版权的纯中文软件。本次软件的开发所采用的地理信息系统平台是MAPGIS平台。该平台在十几年数字制图软件开发的基础上,开发成为GIS软件以及GIS应用系统。目前该地理信息系统已达到国际先进水平。1997年、1998年、1999年、2000年连续全国评测第一。目前,在该原型系统的基础上目前已完成了管网系统、警用电子地图系统、作战指挥系统、城市规划建设系统、旅游系统等一系列应用系统的开发。MAPGIS地理信息系统适用于地质、矿产、地理、测绘、水利、石油、煤炭、铁道、交通、城建、规划及土地管理专业。
  MAPGIS是具有国际先进水平的完整的地理信息系统,它分为"输入"、"图形编辑"、"库管理"、"空间分析"、"输出"以及"实用服务"六大部分,共计十六个子系统。功能十分强大,而且好懂易用,界面友好,兼容性教好。
  因此本GIS浏览器采用MAPGIS的二次开发,为MAPGIS浏览器。</P>
<P>二、MAPGIS浏览器的开发目的

  MAPGIS既然具有那么多的好处,功能又是如此的强大,那为什么还要似乎多此一举地开发什么MAPGIS浏览器呢?
  首先,经济方面问题。MAPGIS本身的功能是十分的强大,而且应用又非常广泛,但是这种专业性极强的软件的价钱也是很可观的。并不是每个人都能买得起该软件。
  其次,用途方面问题。花那么多的钱买功能这么强大的软件究竟要干什么,是否能够用到其中的全部功能或者大部分功能。显而易见,大多数的单位或者个人只能用到其中的一部分功能,甚至有的单位只用其中的一小部分功能。
  近日,笔者一直在进行着的MAPGIS的二次开发就是一个与上述很相似的问题。该软件只是负责浏览MAPGIS绘制的地图,因而不需要MAPGIS这个庞大的系统来支持,只需要一个MAPGIS的浏览器即可。这就是为什么要开发MAPGIS浏览器的原因。</P>
<P>三、系统浏览器的组成

  本系统浏览器以MAPGIS的图形库作为底层支持,主要由文件输入、图形浏览、查询、工具、其它等几个模块组成。下面分别叙述。

(一)、文件输入
  该部分功能为将各图件的组成,如点、线、面等三类文件以工程文件形式输入浏览器。
  文件输入以菜单事件驱动,当点击各图形对应的菜单时,即调入相应的项目文件,将项目文件中所含的图形组成部分全部读入计算机内,立即显示。
各项目文件格式为:如XXX.PRJ项目文件内容:
  1、 图形库组成文件数:N
  2、 区图元文件:XXX.WP
  3、 线图元文件:XXX.WL =N
  4、 点图元文件:XXX.WT
  格式中区、线、点图元文件各点一行,总数为N。区、线、点图元文件不一定齐全,例如,可以只有区程线图元文
件。
  该种格式的方便之处在于,图库的变化只需修改项目文件即可,无需重新修改软件代码。

(二)、图形浏览
  图形浏览一方面浏览图形,另一方面浏览图形的属性信息。该部分功能具有浏览单点图元文件点图元文件点图元文件一或多个属性的能力,以及选择图形工作区和图漫游。

图形浏览菜单下内容,其中有:
1、 浏览属性
  点击此项菜单时,弹出所有图元文件,可任意选择需要浏览的图形,及其属性。选择后立即弹出一属性表单,表单中各子图元与图形联动,一但属性表单中某项被选中,相应的图形立即位于窗口中心闪烁显示,选择图形也可联动,十分方便于浏览全部图形与属性。
2、 浏览单个属性
  此项为浏览单个图形的属性,使用时先选择单个工作区,双击所需浏览的图形,被选择者即以闪烁方式显示,同时弹出其属性。
3、 停止闪烁
  单击时可终止点、线、区或全部正在显示的图形。
4、 图形漫游
  选择该项后,移动鼠标图形可随之移动,呈漫游状态显示。
5、 选择工作区
  即选择点、线或者区进行显示,可突出个别图形。

(三)、查询
  该部分具有点、线、面的查询能力,并能对点线面按其属性进行查询、提取保存,十分方便于专业性应用;同时查询结果能与数据库相关联,从数据库中查询更丰富的资料。
  查询菜单项包括点线面查询与提取,两者均通过对话框输入条件进行查询与提取。

(四)、工具
  工具部分主要为图形显示操作。
  该工具对图形窗口进行操作,如放大、缩小、移动窗口等。上级窗口为恢复前一次窗口形式;复位窗口则自动将图形大小恰好显示于窗口中;更新窗口则用于将窗口刷新显示;清窗口使窗口内容全部清除。
(五)、其它
  该部分为辅助功能,可分别单个输入点、线、面文件,以及面积、周长、长度统计。
  输入点、线、面文件:用于输入其它点、线、面图形文件,方便于浏览其它图形文件,同时可使用该浏览器的其它功能。
  面积、周长、长度统计:该统计功能适用于快速计算区域面积、周长,以及线段(如河流、道路等)的长度。</P>
喜欢0 评分0
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
1楼#
发布于:2004-07-13 11:54
<P><FONT color=#386490><b>四、系统实现的部分程序清单

</b>// CGisView_Demo1View.cpp : implementation of the CCGisView_Demo1View class
//
#include "stdafx.h"
#include "CGisView_Demo1.h"
#include "ddeobj.h"
#include "CGisView_Demo1Doc.h"
#include "CGisView_Demo1View.h"
#include "dialog2.h"
#include "Win_area.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif</FONT> </P><P><FONT color=#386490>#include "childfrm.h"</FONT></P><P><FONT color=#386490>/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View</FONT></P><P><FONT color=#386490>IMPLEMENT_DYNCREATE(CCGisView_Demo1View, CGisView)</FONT></P><P><FONT color=#386490>BEGIN_MESSAGE_MAP(CCGisView_Demo1View, CGisView)
……
END_MESSAGE_MAP()</FONT></P><P><FONT color=#386490>/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View construction/destruction
extern HDDEDATA CALLBACK EXPORT DdeCallback(UINT iType,UINT iFmt,HCONV hCconv, HSZ hsz1, HSZ hsz2,HDDEDATA hData,DWORD dwData1,DWORD dwData2);</FONT></P><P><FONT color=#386490>CDDEObj theDDE;
HWND hwnd;
char * Dwarfs[]={"Grumpy","Sleepy","Sneezy","Bashful","Dopey","Happy","Doc"};</FONT></P><P><FONT color=#386490>char *Reindeer[]={"Dasher","Dancer","Prancer","Vixen","Comet","Cupid","Donner","Blitzen"};</FONT></P><P><FONT color=#386490>CCGisView_Demo1View::CCGisView_Demo1View()
{bmp1.LoadBitmap(IDB_BITMAP1);
LButtonPos=(0,0);
gotoanywhere_flage=false;
querybore_flage=false;
flashtype=-1;
connectToDbs=false;
curview_area=-1;
curview_type=-1;
//DDE Initialize
DdeInitialize(;(theDDE.idInst),DdeCallback,APPCLASS_STANDARD |CBF_FAIL_ADVISES |
CBF_FAIL_EXECUTES |CBF_FAIL_POKES |CBF_SKIP_REGISTRATIONS | CBF_SKIP_UNREGISTRATIONS,0L);
HSZ hszService;
theDDE.AppName="MyDDEApp";
hszService=DdeCreateStringHandle(theDDE.idInst,theDDE.AppName,0);
DdeNameService(theDDE.idInst,hszService,NULL,DNS_REGISTER);
//DDE end
}</FONT></P><P><FONT color=#386490>HDDEDATA CALLBACK EXPORT DdeCallback(UINT iType,UINT iFmt,HCONV hCconv,
HSZ hsz1, HSZ hsz2,HDDEDATA hData,DWORD dwData1,DWORD dwData2)
{//Topic=hsz1 Item=hsz2.
char szBuffer[32];
switch(iType) {
case XTYP_CONNECT:
//GET the application name
DdeQueryString((theDDE.fakeThis)->idInst,hsz2,szBuffer,sizeof(szBuffer),0);
if((theDDE.fakeThis)->AppName!=szBuffer)
return false;
DdeQueryString((theDDE.fakeThis)->idInst,hsz1,
szBuffer,sizeof(szBuffer),0);
if(strcmp(szBuffer,"Dwarfs") ;; strcmp(szBuffer,"Reindeer"))
return false;
return (HDDEDATA)TRUE;
break;
case XTYP_REQUEST:
DdeQueryString((theDDE.fakeThis)->idInst,hsz1,
szBuffer,sizeof(szBuffer),0);
if(strcmp(szBuffer,"Dwarfs")==0)
{ //get the item name
DdeQueryString((theDDE.fakeThis)->idInst,hsz2,
szBuffer,sizeof(szBuffer),0);
int dwarfcode=atoi(szBuffer);
// SendMessage(hwnd,WM_COMMAND,ID_TRY2,0L);
if((dwarfcode<0) || (dwarfcode>6))
return false;
return DdeCreateDataHandle((theDDE.fakeThis)->idInst,
(LPBYTE)Dwarfs[dwarfcode],
strlen(Dwarfs[dwarfcode])+1,
0,hsz2,CF_TEXT,0);
}
}
return NULL;
}</FONT></P><P><FONT color=#386490>CCGisView_Demo1View::~CCGisView_Demo1View()
{}</FONT></P><P><FONT color=#386490>BOOL CCGisView_Demo1View::PreCreateWindow(CREATESTRUCT; cs)
{
// TOD Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
// ptai=NULL;//选择显示区
return CGisView::PreCreateWindow(cs);
}</FONT></P><P><FONT color=#386490>/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View drawing</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnDraw(CDC* pDC)
{
CCGisView_Demo1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
hwnd=m_hWnd;
// TOD add draw code for native data here
CGisView::OnDraw(pDC);
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::_OwnerDraw(MyDC myDC)
{
short ti,i,j,k;
short *pLst;
short type;
BOOL flage=false;
CCGisView_Demo1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
_GetAreaList(;pLst);
if(pLst==NULL)
return;
for(ti=0;ti<4;ti++) //循环4次,依次显示 区,线,点,网
{
switch(ti)
{
case 0: type=REG; break;
case 1: type=NET; break;
case 2: type=LIN; break;
case 3: type=PNT; break;
}
if(pDoc->ptai==NULL) //选择显示区)
{
for(i=1;i<=pLst[0];i++)
{
if(type!=_GetAreaType(pLst))
continue;
switch(type)
{
case PNT: _DispPntArea(myDC,pLst); break;
case LIN: _DispLinArea(myDC,pLst); break;
case REG: _DispRegArea(myDC,pLst); break;
case NET: _DispLinArea(myDC,pLst); break;
default: break;
}
}

}
else
for(i=1;i<=pDoc->ptai[0];i++)
{
if(type!=_GetAreaType(pDoc->ptai))
continue;
for(k=1;k<=pLst[0];k++) {
if(pLst[k]==pDoc->ptai) {flage=true; break;}
flage=false;
}
if(flage)
switch(type)
{
case PNT: _DispPntArea(myDC,pDoc->ptai); break;
case LIN: _DispLinArea(myDC,pDoc->ptai); break;
case REG: _DispRegArea(myDC,pDoc->ptai); break;
case NET: _DispLinArea(myDC,pDoc->ptai); break;
default: break;
}
}

}</FONT></P><P><FONT color=#386490>}
</FONT></P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2004-07-13 11:54
<P><FONT color=#386490>/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View diagnostics</FONT></P><P><FONT color=#386490>#ifdef _DEBUG
void CCGisView_Demo1View::AssertValid() const
{
CGisView::AssertValid();
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::Dump(CDumpContext; dc) const
{
CGisView::Dump(dc);
}</FONT></P><P><FONT color=#386490>CCGisView_Demo1Doc* CCGisView_Demo1View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCGisView_Demo1Doc)));
return (CCGisView_Demo1Doc*)m_pDocument;
}
#endif //_DEBUG</FONT></P><P><FONT color=#386490>/////////////////////////////////////////////////////////////////////////////
// CCGisView_Demo1View message handlers</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::LoadAFile(short fType)
{
CCGisView_Demo1App *ptApp;
short ai,i;
short *pOldLst;
short *pNewLst;

ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址
ai=_OpenArea(ptApp->m_AHInst,fType); //打开一个fType类型的空工作区
if(ai<=0) //失败则返回
return;
if(!_LoadFile(ai)) //装入文件到ai工作区,若失败则关闭工作区,然后返回
{
_CloseArea(ai);
return;
}
_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
pNewLst=new short [pOldLst[0]+2];//
pNewLst[0]=pOldLst[0]+1;
for(i=1;i<=pOldLst[0];i++)
pNewLst=pOldLst;
}
else
{
pNewLst=new short [2];
pNewLst[0]=1;
i=1;
}
pNewLst=ai; //再添加新的工作区
_SetAreaList(pNewLst); //重新设置当前视窗口对应的工作区
delete[] pNewLst;
_RestoreWindow(); //复位当前视窗口
return;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnLoadPnt()
{
LoadAFile(PNT); //装入点文件
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnLoadLIN()
{
LoadAFile(LIN); //装入线文件
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnLoadREG()
{
LoadAFile(REG); //装入区文件
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnStartFlash()
{
// char _WillGetRect(char yesOrNo);
//是否将要取鼠标左键按住移动的矩型范围,该函数必须在_SetCommandFlag后面调用。
_SetCommandFlag(ID_START_FLASH);
_WillGetRect(1);
return;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TOD Add your message handler code here and/or call default
RECT rc;
F_RECT frc;
long *ptLst;
short *ptAiLst;
short i;
CGisView::OnLButtonUp(nFlags, point);</FONT></P><P><FONT color=#386490>long cmd=_GetCommandFlag();
switch(cmd)
{
case IDMN_ENLARGE: //放大窗口
_EnlargeWindowLxy(point.x,point.y);break;
case IDMN_REDUCE: //缩小窗口
_ReduceWindowLxy(point.x,point.y);break;
case IDMN_MOVE: //移动窗口
_MoveWindowLxy(LButtonPos.x-point.x,LButtonPos.y-point.y);break;
case IDMN_LASTWIN: //上级窗口
_PrevWindow();break;
// case IDMN_RESTORE: //复位窗口
// _RestoreWindow();break;
// case IDMN_UPDATE: //更新窗口
// _UpdateWindow();break;
// case IDMN_CLEAR: //清窗口
// _CleanWindow(); break;
case ID_START_FLASH://闪烁图元
if(_GetRect(;rc))
{
_WpToLp(rc.left , rc.top , ;(frc.xmin), ;(frc.ymax));
_WpToLp(rc.right, rc.bottom, ;(frc.xmax), ;(frc.ymin));
if(_GetAreaList(;ptAiLst))
{
for(i=1;i<=1 /*ptAiLst[0]*/;i++)
{
switch(_AType(ptAiLst))
{
case PNT:
ptLst=_RectAskPntToList(ptAiLst,;frc,NULL);
if(ptLst) {
_FlashPnt(ptAiLst, ptLst+1, ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst,PNT,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
break;
case LIN:
ptLst=_RectAskLinToList(ptAiLst,;frc,NULL);
if(ptLst ;; querybore_flage==false) {
_FlashLin(ptAiLst, ptLst+1,1);//ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst,LIN,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
break;
case REG:
ptLst=_RectAskRegToList(ptAiLst,;frc,NULL);
if(ptLst ;; querybore_flage==false) {
_FlashReg(ptAiLst, ptLst+1, ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst,REG,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
break;
default:
break;
}
}
}
}break;
default:break;
}</FONT></P><P><FONT color=#386490>}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnStopFlashPnt()
{
_StopFlash(PNT);//停止闪烁点
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnStopFlashLin()
{
_StopFlash(LIN);//停止闪烁线
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnStopFlashReg()
{
_StopFlash(REG);//停止闪烁区
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnEnlarge()
{//MessageBox("sdsdsd","vfsfsfs",MB_OK);
_SetCommandFlag(IDMN_ENLARGE);

}</FONT></P><P>
</P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
3楼#
发布于:2004-07-13 11:55
<P><FONT color=#386490>void CCGisView_Demo1View::OnReduce()
{
_SetCommandFlag(IDMN_REDUCE);
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnMove()
{
_SetCommandFlag(IDMN_MOVE);
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnRestore()
{
_RestoreWindow();//复位窗口
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnUpdate()
{
_UpdateWindow();//更新窗口
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnLastwin()
{
_PrevWindow();//上级窗口</FONT></P><P><FONT color=#386490>
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnClear()
{
_CleanWindow();//清窗口
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnLButtonDown(UINT nFlags, CPoint point)
{
LButtonPos=point;
CGisView::OnLButtonDown(nFlags, point);
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnRButtonDown(UINT nFlags, CPoint point)
{
// TOD Add your message handler code here and/or call default
if(gotoanywhere_flage)
CheckMenuItem(m_hGisViewPopMn,ID_GOTOANYWHERE, MF_CHECKED );
else
CheckMenuItem(m_hGisViewPopMn,ID_GOTOANYWHERE, MF_UNCHECKED);</FONT></P><P><FONT color=#386490>_SetCommandFlag(0);
CGisView::OnRButtonDown(nFlags, point);
}</FONT></P><P><FONT color=#386490>int CCGisView_Demo1View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CGisView::OnCreate(lpCreateStruct) == -1)
return -1;</FONT></P><P><FONT color=#386490>// TOD Add your specialized creation code hereID_BMP
AppendMenu( m_hGisViewPopMn, MF_SEPARATOR,NULL,NULL);
//AppendMenu( m_hGisViewPopMn, MF_BITMAP,ID_BMP, (LPCSTR)bmp1.GetSafeHandle());//(CBitmap::FromHandle(bmp1)));//MAKEINTRESOURCE(IDB_BITMAP1));
AppendMenu( m_hGisViewPopMn, MF_STRING,ID_TRY,"浏览属性");
AppendMenu( m_hGisViewPopMn, MF_SEPARATOR,NULL,NULL);
AppendMenu( m_hGisViewPopMn, MF_STRING,ID_START_FLASH,"浏览单个属性");
AppendMenu( m_hGisViewPopMn, MF_SEPARATOR,NULL,NULL);
AppendMenu( m_hGisViewPopMn, MF_STRING,IDMN_STOP_FLASH_PNT,"停止闪烁点");
AppendMenu( m_hGisViewPopMn, MF_STRING,IDMN_STOP_FLASH_LIN,"停止闪烁线");
AppendMenu( m_hGisViewPopMn, MF_STRING,IDMN_STOP_FLASH_REG,"停止闪烁区");
AppendMenu( m_hGisViewPopMn, MF_STRING,ID_STOPALL_FLASH,"停止全部闪烁");
AppendMenu( m_hGisViewPopMn, MF_SEPARATOR,NULL,NULL);
AppendMenu( m_hGisViewPopMn, MF_UNCHECKED ,ID_GOTOANYWHERE,"图形漫游");
return 0;
}</FONT></P><P><FONT color=#386490>BOOL CCGisView_Demo1View::OnCommand(WPARAM wParam, LPARAM lParam)
{
// TOD Add your specialized code here and/or call the base class
switch(wParam)
{
case ID_BMP://MessageBox("vvvvvv");
dialog2 dlg;
dlg.DoModal();
break;
}
return CGisView::OnCommand(wParam, lParam);
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnTry()
{
CCGisView_Demo1App *ptApp;</FONT></P><P><FONT color=#386490>//AREA_HINST hinst=GetAreaInst();</FONT></P><P><FONT color=#386490>ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址
//ai=_OpenArea(ptApp->m_AHInst
attHwnd=_ViewAtt(GetSafeHwnd() ,ptApp->m_AHInst,WS_CAPTION);
//if(_ViewAtt(GetSafeHwnd() ,ptApp->m_AHInst,WS_CAPTION)==NULL)
//MessageBox("error","",MB_OK);

}</FONT></P><P><FONT color=#386490>LRESULT CCGisView_Demo1View::OnMyMessage(WPARAM wParam,LPARAM lParam)
{
LIN_INFO lin_info;
REG_INFO reg_info;
PNT_INFO pnt_info;
/* sprintf(str,"area=%d type=%d element=%d \n",((MGMSG *) lParam)->ai,
((MGMSG *) lParam)->type,
((MGMSG *) lParam)->elmi);
*/ //MessageBox(str,"",MB_OK);</FONT></P><P><FONT color=#386490>curview_area=((MGMSG *) lParam)->ai;
curview_type=((MGMSG *) lParam)->type;
switch(((MGMSG *) lParam)->type){
case PNT:
_GetPntInfo(((MGMSG *) lParam)->ai,((MGMSG *) lParam)->elmi,;pnt_info);
_GotoWindowFxy(0.5*(pnt_info.rect.xmin+pnt_info.rect.xmax),
0.5*(pnt_info.rect.ymin+pnt_info.rect.ymax));
_FlashPnt(((MGMSG *) lParam)->ai, ;(((MGMSG *) lParam)->elmi), 1);
flashtype=PNT;
break;
case LIN:
_GetLinInfo(((MGMSG *) lParam)->ai,((MGMSG *) lParam)->elmi,;lin_info);
_GotoWindowFxy(0.5*(lin_info.rect.xmin+lin_info.rect.xmax),
0.5*(lin_info.rect.ymin+lin_info.rect.ymax));
_FlashLin(((MGMSG *) lParam)->ai, ;(((MGMSG *) lParam)->elmi), 1);
flashtype=LIN;
//MessageBox("flash lin","MSG",MB_OK);
break;
case REG:
_GetRegInfo(((MGMSG *) lParam)->ai,((MGMSG *) lParam)->elmi,;reg_info);
_GotoWindowFxy(0.5*(reg_info.rect.xmin+reg_info.rect.xmax),
0.5*(reg_info.rect.ymin+reg_info.rect.ymax));
_FlashReg(((MGMSG *) lParam)->ai, ;(((MGMSG *) lParam)->elmi), 1);
flashtype=REG;
break;
default:
break;

}</FONT></P><P><FONT color=#386490>return 0;
}</FONT></P><P><FONT color=#386490>LRESULT CCGisView_Demo1View::OnDestroyAttWnd(WPARAM wParam,LPARAM lParam){
if(lParam==0 ;; attHwnd!=NULL) {
attHwnd=NULL;
curview_area=-1;
curview_type=-1;
_StopFlash(LIN);_StopFlash(PNT);_StopFlash(REG);
}
return 0;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnLButtonDblClk(UINT nFlags, CPoint point)
{
RECT rc;
F_RECT frc;
long *ptLst;
short *ptAiLst;
short i;
ATT_STRU *stru;
char *att;
char ptStr[256];
long cmd=_GetCommandFlag();
if(cmd==ID_START_FLASH || attHwnd!=NULL)//闪烁图元
{
rc.left=point.x-10; rc.bottom=point.y+10;
rc.right=point.x+10; rc.top=point.y-10;
{
_WpToLp(rc.left , rc.top , ;(frc.xmin), ;(frc.ymax));
_WpToLp(rc.right, rc.bottom, ;(frc.xmax), ;(frc.ymin));
if(_GetAreaList(;ptAiLst))
{
for(i=1;i<=ptAiLst[0];i++)
{</FONT></P><P><FONT color=#386490>switch(_AType(ptAiLst))
{
case PNT:
ptLst=_RectAskPntToList(ptAiLst,;frc,NULL);
if(ptLst) {
if(attHwnd==NULL;; curview_area==-1) {
_FlashPnt(ptAiLst, ptLst+1,1); //ptLst[0]);
if(connectToDbs) {
_GetAtt(ptAiLst,PNT,*(ptLst+1),;stru,;att);
if(_CvtFldToString1(stru,att,"钻孔号",ptStr,256,NULL,NULL))
{// MessageBox(ptStr,ptStr,MB_OK);
pb.ExcuteServiceCmd(ptStr);}
else
_ViewARcd(GetSafeHwnd(),ptAiLst,PNT,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
else
_ViewARcd(GetSafeHwnd(),ptAiLst,PNT,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");</FONT></P><P><FONT color=#386490>}
else if(flashtype==PNT) {
//_FlashPnt(ptAiLst, ptLst+1,1); //ptLst[0]);
::SendMessage(attHwnd,WM_COMMAND,GOTO_ATT,*(ptLst+1));
}</FONT></P><P><FONT color=#386490>
break;
}

case LIN:
ptLst=_RectAskLinToList(ptAiLst,;frc,NULL);
if(ptLst ;; querybore_flage==false)
{
if(attHwnd==NULL;; curview_area==-1) {
_FlashLin(ptAiLst, ptLst+1,1); // ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst,LIN,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
else if(flashtype==LIN) {
//_FlashLin(ptAiLst, ptLst+1,1); // ptLst[0]);
::SendMessage(attHwnd,WM_COMMAND,GOTO_ATT,*(ptLst+1));
//MessageBox("flash lin","",MB_OK);
}
break;
}
case REG:
ptLst=_RectAskRegToList(ptAiLst,;frc,NULL);
if(ptLst ;; querybore_flage==false)
{
if(attHwnd==NULL;; curview_area==-1) {
_FlashReg(ptAiLst, ptLst+1,1); // ptLst[0]);
_ViewARcd(GetSafeHwnd(),ptAiLst,REG,*(ptLst+1),"忻州地区滹沱河管理信息系统--浏览资料");
}
else if(flashtype==REG) {
//_FlashLin(ptAiLst, ptLst+1,1); // ptLst[0]);
::SendMessage(attHwnd,WM_COMMAND,GOTO_ATT,*(ptLst+1));
//MessageBox("flash reg","regg",MB_OK);
}
break;
}
default:
break;
}
}
}
}
}
CGisView::OnLButtonDblClk(nFlags, point);
}</FONT></P><P><FONT color=#386490>
void CCGisView_Demo1View::OnDestroy()
{ short *ptAiLst;
int i;</FONT></P><P><FONT color=#386490>if(_GetAreaList(;ptAiLst))
{
for(i=1;i<=ptAiLst[0];i++)
{
//_SaveFile(ptAiLst);
_CloseArea(ptAiLst);
}
}
CGisView::OnDestroy();

//MessageBox("Close Child Frame view","",MB_OK);
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnMouseMove(UINT nFlags, CPoint point)
{
F_DOT xy1;
//F_RECT frc;
RECT frc;
long dx,dy;
CPoint point2;
GetClientRect(;frc);
if(gotoanywhere_flage){
if(point.x<=frc.left+50) dx=50;
if(point.x>=frc.right-50) dx=-50;
if(point.y<=frc.top+50) dy=50;
if(point.y>=frc.bottom-50) dy=-50;
if(point.x<=frc.left+50 || point.x>=frc.right-50 ||
point.y<=frc.top+50 || point.y>=frc.bottom-50 ){
GetCursorPos(;point2);
point2.x+=dx; point2.y+=dy;
_WpToLp(;point,;xy1);
_GotoWindowFxy(xy1.x,xy1.y);
SetCursorPos(point2.x,point2.y);//0.5*(frc.left+frc.right),0.5*(frc.top+frc.bottom));
}
}</FONT></P><P><FONT color=#386490>CGisView::OnMouseMove(nFlags, point);</FONT></P><P><FONT color=#386490>}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnGotoanywhere()
{
gotoanywhere_flage=!gotoanywhere_flage;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnUpdateGotoanywhere(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(gotoanywhere_flage); // TOD Add your command update UI handler code here

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnStopallFlash()
{
_StopFlash(LIN);_StopFlash(PNT);_StopFlash(REG);
}
/*
void CCGisView_Demo1View::OnTry2()
{
//MessageBox("I am trying DDE Connection" ,"DDE OnTry2",MB_OK);
//OnStartFlash();
long *p;
short *pOldLst;
int i,ai;
LPTSTR pstr;
CString name;</FONT></P><P><FONT color=#386490>char c[2];
c[0]='"'; c[1]='\0';</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
for(i=1;i<=pOldLst[0];i++) {
ai=pOldLst;
name.Empty();
name="钻孔编号!=";
name=name+c;
name=name+"001";
name=name+c;
pstr = name.GetBuffer(name.GetLength());
MessageBox(pstr,pstr,MB_OK);
p=_AttAskToList0(ai,PNT,pstr);

//_ _AttAskToList(ai,PNT);
if(p!=NULL) {
_FlashPnt(ai,p+1,p[0]);
}
}
}
}
*/
BOOL CCGisView_Demo1View::OpenMap(char *prj)
{
CCGisView_Demo1App *ptApp;
short ai,i;
short *pOldLst;
short *pNewLst;
FILE *fp;
short fType;
CString name;
CString path;
int j,num_file;
LPTSTR p;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址
char dir[256];
//GetCurrentDirectory(200,dir);
TCHAR szFullPath[256];
TCHAR szDir[256];
TCHAR szDrive[256];
::GetModuleFileName(NULL,szFullPath,256);
_splitpath(szFullPath,szDrive,szDir,NULL,NULL);</FONT></P><P><FONT color=#386490>name=szDrive;//dir;
//name=name.Left(2);
name=name+"\\mapgis32\\xzhmap";
path=name;
name=path+"\\"+prj;</FONT></P><P><FONT color=#386490>//MessageBox(name,name,MB_OK);
if((fp=fopen(name,"r"))!=NULL) {
fscanf(fp,"%d\n",;num_file);
for(j=1;j<=num_file;j++) {
fscanf(fp,"%s\n",dir);
name=dir;
name.MakeUpper();
fType=-1;
if(name.Find(".WL")!=-1) fType=LIN;
if(name.Find(".WT")!=-1) fType=PNT;
if(name.Find(".WP")!=-1) fType=REG;
if(fType==-1) continue;
name=path+name;
p = name.GetBuffer(name.GetLength());

ai=_OpenArea(ptApp->m_AHInst,fType); //打开一个fType类型的空工作区
if(ai<=0) //失败则返回
return false;</FONT></P><P><FONT color=#386490>if(!_LoadAFile(p/*"F:\\mapgis32\\yqmap\\china.wl"*/,ai,NULL,NULL,NULL))//_LoadFile(ai)) //装入文件到ai工作区,若失败则关闭工作区,然后返回
{
MessageBox(name,"文件不存在!!!",MB_OK);
_CloseArea(ai);
//return false;
continue;
}
_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
pNewLst=new short [pOldLst[0]+2];//
pNewLst[0]=pOldLst[0]+1;
for(i=1;i<=pOldLst[0];i++)
pNewLst=pOldLst;
}
else
{
pNewLst=new short [2];
pNewLst[0]=1;
i=1;
}
pNewLst=ai; //再添加新的工作区
_SetAreaList(pNewLst); //重新设置当前视窗口对应的工作区
delete[] pNewLst;
}
}
else {
MessageBox(name,"文件不存在!!!",MB_OK);
return false;
}
_RestoreWindow(); //复位当前视窗口
fclose(fp);
return true;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnQueryPnt()
{
long *p;
short *pOldLst;
int i,j,ai;
LPTSTR pstr;
ATT_STRU *stru;
char expStr[256];
char c[2];
PNT_INFO pnt_info;</FONT></P><P><FONT color=#386490>c[0]='"'; c[1]='\0';</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
for(i=1;i<=pOldLst[0];i++) {
ai=pOldLst;

if(_AType(ai)==PNT) {
if(_GetAttStru(ai,PNT,;stru))
if(_InputExpresion(hwnd,stru,expStr,256,"点属性查询",NULL))
{ //MessageBox(expStr,expStr,MB_OK);
p=_AttAskToList0(ai,PNT,expStr);

//_ _AttAskToList(ai,PNT);
if(p!=NULL) {
for(j=1;j<=p[0];j++) {
_FlashPnt(ai,p+j,1 /*p[0]*/);
_GetPntInfo(ai,*(p+j),;pnt_info);
_GotoWindowFxy(0.5*(pnt_info.rect.xmin+pnt_info.rect.xmax),
0.5*(pnt_info.rect.ymin+pnt_info.rect.ymax));</FONT></P><P><FONT color=#386490>//_ViewARcd(NULL/*GetSafeHwnd()*/,ai,PNT,*(p+j),"忻州地区滹沱河管理信息系统--浏览资料");
_ViewCurAtt(ai,PNT,*(p+j),"忻州地区滹沱河管理信息系统--浏览资料");</FONT></P><P><FONT color=#386490>}
}</FONT></P><P><FONT color=#386490>}
}
}
}
}</FONT></P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15945
  • QQ554730525
  • 铜币25337枚
  • 威望15352点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
4楼#
发布于:2004-07-13 11:55
<P><FONT color=#386490>void CCGisView_Demo1View::OnQueryLin()
{
long *p;
short *pOldLst;
int i,j,ai;
LPTSTR pstr;
ATT_STRU *stru;
char expStr[256];
LIN_INFO lin_info;
char c[2];
c[0]='"'; c[1]='\0';</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
for(i=1;i<=pOldLst[0];i++) {
ai=pOldLst;

if(_AType(ai)==LIN) {
if(_GetAttStru(ai,LIN,;stru))
if(_InputExpresion(hwnd,stru,expStr,256,"线属性查询",NULL))
{ //MessageBox(expStr,expStr,MB_OK);
p=_AttAskToList0(ai,LIN,expStr);

//_ _AttAskToList(ai,PNT);
if(p!=NULL) {
for(j=1;j<=p[0];j++) {
_FlashLin(ai,p+j,1 /*p[0]*/);
_GetLinInfo(ai,*(p+j),;lin_info);
_GotoWindowFxy(0.5*(lin_info.rect.xmin+lin_info.rect.xmax),
0.5*(lin_info.rect.ymin+lin_info.rect.ymax));</FONT></P><P><FONT color=#386490>//_ViewARcd(NULL/*GetSafeHwnd()*/,ai,PNT,*(p+j),"忻州地区滹沱河管理信息系统--浏览资料");
_ViewCurAtt(ai,LIN,*(p+j),"忻州地区滹沱河管理信息系统--浏览资料");</FONT></P><P><FONT color=#386490>}
}</FONT></P><P><FONT color=#386490>}
}
}
}
}</FONT></P><P>
 </P><P><FONT color=#386490>void CCGisView_Demo1View::OnQueryReg()
{
long *p;
short *pOldLst;</FONT></P><P><FONT color=#386490>int i,j,ai;
LPTSTR pstr;
ATT_STRU *stru;
char expStr[256];
REG_INFO reg_info;</FONT></P><P><FONT color=#386490>char c[2];
c[0]='"'; c[1]='\0';</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
for(i=1;i<=pOldLst[0];i++) {
ai=pOldLst;

if(_AType(ai)==REG) {
if(_GetAttStru(ai,REG,;stru))
if(_InputExpresion(hwnd,stru,expStr,256,"区属性查询",NULL))
{ //MessageBox(expStr,expStr,MB_OK);
p=_AttAskToList0(ai,REG,expStr);

//_ _AttAskToList(ai,PNT);
if(p!=NULL) {
for(j=1;j<=p[0];j++) {
_FlashReg(ai,p+j,1 /*p[0]*/);
_GetRegInfo(ai,*(p+j),;reg_info);
_GotoWindowFxy(0.5*(reg_info.rect.xmin+reg_info.rect.xmax),
0.5*(reg_info.rect.ymin+reg_info.rect.ymax));</FONT></P><P><FONT color=#386490>//_ViewARcd(NULL/*GetSafeHwnd()*/,ai,PNT,*(p+j),"忻州地区滹沱河管理信息系统--浏览资料");
_ViewCurAtt(ai,REG,*(p+j),"忻州地区滹沱河管理信息系统--浏览资料");</FONT></P><P><FONT color=#386490>}
}</FONT></P><P><FONT color=#386490>}
}
}
}
}</FONT></P><P><FONT color=#386490>
/*void CCGisView_Demo1View::OnTry3()
{
TCHAR szFullPath[256];
TCHAR szDir[256];
TCHAR szDrive[256];
::GetModuleFileName(NULL,szFullPath,256);
_splitpath(szFullPath,szDrive,szDir,NULL,NULL);
MessageBox(szFullPath,szDrive,MB_OK);
MessageBox(szFullPath,szDir,MB_OK);
::GetShortPathName(szFullPath,szDrive,256);
MessageBox(szFullPath,szDrive,MB_OK);</FONT></P><P><FONT color=#386490>
return;
}*/</FONT></P><P><FONT color=#386490>
void CCGisView_Demo1View::OnExtractPnt()
{
short *pOldLst;
short *pNewLst;
int i,j,ai,ai2,oldlist;
CCGisView_Demo1App *ptApp;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
oldlist=pOldLst[0];
for(i=1;i<=oldlist;i++)
{//MessageBox("gdjfgdjgdj","daddad",MB_OK);
_GetAreaList(;pOldLst);
ai=pOldLst;
if(_AType(ai)==PNT)
{
ai2=_OpenArea(ptApp->m_AHInst,PNT); //打开一个fType类型的空工作区
if(ai2<=0) //失败则返回
{//MessageBox("1111111","daddad",MB_OK);
return;}
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
pNewLst=new short [pOldLst[0]+2];//
pNewLst[0]=pOldLst[0]+1;
for(j=1;j<=pOldLst[0];j++)
pNewLst[j]=pOldLst[j];
}
/* else
{
pNewLst=new short [2];
pNewLst[0]=1;
i=1;
}*/
pNewLst[j]=ai2; //再添加新的工作区
_SetAreaList(pNewLst); //重新设置当前视窗口对应的工作区
if(_AttAskToArea(ai,PNT,ai2))
{
//_SaveFile(ai2);
_CloseArea(ai2);
}
//MessageBox("adsasasas","daddad",MB_OK);
delete[] pNewLst;
}
}
_RestoreWindow(); //复位当前视窗口
}return;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnExtractLin()
{
short *pOldLst;
short *pNewLst;
int i,j,ai,ai2,oldlist;
// LPTSTR pstr;
// ATT_STRU *stru;
// char expStr[256];
CCGisView_Demo1App *ptApp;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
// sprintf(expStr,"area==%d\n",pOldLst[0]);
// MessageBox(expStr,expStr,MB_OK);
oldlist=pOldLst[0];
for(i=1;i<=oldlist;i++)
{//MessageBox("gdjfgdjgdj","daddad",MB_OK);
_GetAreaList(;pOldLst);
ai=pOldLst;
if(_AType(ai)==LIN)
{
ai2=_OpenArea(ptApp->m_AHInst,LIN); //打开一个fType类型的空工作区
if(ai2<=0) //失败则返回
{//MessageBox("1111111","daddad",MB_OK);
return;}
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
pNewLst=new short [pOldLst[0]+2];//
pNewLst[0]=pOldLst[0]+1;
for(j=1;j<=pOldLst[0];j++)
pNewLst[j]=pOldLst[j];
}
/* else
{
pNewLst=new short [2];
pNewLst[0]=1;
i=1;
}*/
pNewLst[j]=ai2; //再添加新的工作区
_SetAreaList(pNewLst); //重新设置当前视窗口对应的工作区
if(_AttAskToArea(ai,LIN,ai2))
{
//_SaveFile(ai2);
_CloseArea(ai2);
}
//MessageBox("adsasasas","daddad",MB_OK);
delete[] pNewLst;
}
}

_RestoreWindow(); //复位当前视窗口
}return;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnExtractReg()
{
short *pOldLst;
short *pNewLst;
int i,j,ai,ai2,oldlist;
CCGisView_Demo1App *ptApp;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
oldlist=pOldLst[0];//保存工作区数
for(i=1;i<=oldlist;i++)
{//MessageBox("gdjfgdjgdj","daddad",MB_OK);
_GetAreaList(;pOldLst);
ai=pOldLst;
if(_AType(ai)==REG)
{
ai2=_OpenArea(ptApp->m_AHInst,REG); //打开一个fType类型的空工作区
if(ai2<=0) //失败则返回
{//MessageBox("1111111","daddad",MB_OK);
return;}
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
pNewLst=new short [pOldLst[0]+2];//
pNewLst[0]=pOldLst[0]+1;
for(j=1;j<=pOldLst[0];j++)
pNewLst[j]=pOldLst[j];
}
/* else
{
pNewLst=new short [2];
pNewLst[0]=1;
i=1;
}*/
pNewLst[j]=ai2; //再添加新的工作区
_SetAreaList(pNewLst); //重新设置当前视窗口对应的工作区
if(_AttAskToArea(ai,REG,ai2))
{
//_SaveFile(ai2);
_CloseArea(ai2);
}
//MessageBox("adsasasas","daddad",MB_OK);
delete[] pNewLst;
}
}

_RestoreWindow(); //复位当前视窗口
} return;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnSelectarea()
{
CCGisView_Demo1App *ptApp;
int i,j;
short *tai;
CCGisView_Demo1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址
if(tai=_SelectAreaList(ptApp->m_AHInst,hwnd,-1,"选择显示图件")) {
if(pDoc->ptai!=NULL) delete pDoc->ptai;
pDoc->ptai=new short [tai[0]+1];
for(i=0;i<=tai[0];i++) pDoc->ptai=tai;
_UpdateWindow();
}</FONT></P><P><FONT color=#386490>
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnMapChina()
{
if(OpenMap("china.prj"))
GetParentFrame()->SetWindowText("中国地图");</FONT></P><P><FONT color=#386490>}</FONT></P><P><FONT color=#386490>
void CCGisView_Demo1View::OnYqmapBasmap()
{
if(OpenMap("basemap.prj"))//地理底图.prj"))
GetParentFrame()->SetWindowText("地理底图");

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapKcms()
{ if(OpenMap("channel.prj"))//渠系现状图.prj"))
GetParentFrame()->SetWindowText("渠系现状图");

}
void CCGisView_Demo1View::OnYqmapWaterquality()
{
if(OpenMap("burydep.prj"))
GetParentFrame()->SetWindowText("潜水埋深图");

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapWrcd()
{
if(OpenMap("level.prj"))
GetParentFrame()->SetWindowText("潜水等水位线图");

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapGeology()
{
if(OpenMap("borehole.prj"))
GetParentFrame()->SetWindowText("孔位布置图");

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapEnvhydrogeo()
{
if(OpenMap("soilsalt.prj"))
GetParentFrame()->SetWindowText("土壤含盐量分布图");

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapProfile()
{
if(OpenMap("yanzitu.prj"))
GetParentFrame()->SetWindowText("盐渍土分类图");

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapRecharge()
{
if(OpenMap("tuzi.prj"))//土质分布图.prj"))
GetParentFrame()->SetWindowText("土质分布图");

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapHydrogeo()
{
if(OpenMap("hydrog.prj"))//水文地质图.prj"))
GetParentFrame()->SetWindowText("水文地质图");

}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapKarstwaterlevel()
{
if(OpenMap("karst.prj"))//岩溶水等水位线图.prj"))
GetParentFrame()->SetWindowText("岩溶水等水位线图");
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnYqmapHardness()
{
if( OpenMap("T_hard.prj"))//总硬度矿化度图.prj"))
GetParentFrame()->SetWindowText("总硬度矿化度图");
}
/*
void CCGisView_Demo1View::OnExecute()
{
pb.ExcuteServiceCmd("YQ0009");

}
*/
void CCGisView_Demo1View::OnConnectToDbs()
{
if(connectToDbs==false) {
pb.CMDCAD="MyPBApp";
pb.LinkToService();
if(pb.hConv==0L) {MessageBox(" 数据库系统未准备好 \n 启动后再试...",
"数据传输信息",MB_OK); return;}
}
//else pb.UnLinkToService();
connectToDbs=!connectToDbs;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnUpdateConnectToDbs(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(connectToDbs);
}
/*
void CCGisView_Demo1View::OnTry()
{
// TOD Add your command handler code here

}
*/</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnAreaSum()
{
short *pOldLst;
int i,j,ai;
LPTSTR pstr;
long *p;
double area_sum=0.0;
ATT_STRU *stru;
char *att;
char msg[200];
CString exp="面积>0.0";
CCGisView_Demo1App *ptApp;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
for(i=1;i<=pOldLst[0];i++) {
ai=pOldLst;
if(_AType(ai)==REG)
{
pstr = exp.GetBuffer(exp.GetLength());
p=_AttAskToList0(ai,REG,pstr);
if(p)
for(j=1;j<=p[0];j++) {
if(_GetAtt(ai,_AType(ai),p[j],;stru,;att)==1)
area_sum+=_GetFld(att,stru,"面积",NULL,NULL);
}
}
}

sprintf(msg," 总面积=%.3f \n",area_sum);
MessageBox(msg,"总面积统计",MB_OK);
}return;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnArcSum()
{
short *pOldLst;
int i,j,ai;
LPTSTR pstr;
long *p;
double area_sum=0.0;
ATT_STRU *stru;
char *att;
char msg[200];
CString exp="面积>0.0";
CCGisView_Demo1App *ptApp;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
for(i=1;i<=pOldLst[0];i++) {
ai=pOldLst;
if(_AType(ai)==REG)
{
pstr = exp.GetBuffer(exp.GetLength());
p=_AttAskToList0(ai,REG,pstr);
if(p)
for(j=1;j<=p[0];j++) {
if(_GetAtt(ai,_AType(ai),p[j],;stru,;att)==1)
area_sum+=_GetFld(att,stru,"周长",NULL,NULL);
}
}
}

sprintf(msg," 总周长=%.3f \n",area_sum);
MessageBox(msg,"总周长统计",MB_OK);
}return;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnLineSum()
{
short *pOldLst;
int i,j,ai;
LPTSTR pstr;
long *p;
double area_sum=0.0;
ATT_STRU *stru;
char *att;
char msg[200];
CString exp="长度>0.0";
CCGisView_Demo1App *ptApp;
ptApp=(CCGisView_Demo1App *)AfxGetApp(); //取当前应用程序对象地址</FONT></P><P><FONT color=#386490>_GetAreaList(;pOldLst); //取当前视窗口对应的工作区,若没有,则pOldLst返回NULL
if(pOldLst) //pOldLst!=NULL,说明当前视窗口已经有对应的工作区,保存原来对应的工作区
{
for(i=1;i<=pOldLst[0];i++) {
ai=pOldLst;
if(_AType(ai)==LIN)
{
pstr = exp.GetBuffer(exp.GetLength());
p=_AttAskToList0(ai,LIN,pstr);
if(p)
for(j=1;j<=p[0];j++) {
if(_GetAtt(ai,_AType(ai),p[j],;stru,;att)==1)
area_sum+=_GetFld(att,stru,"长度",NULL,NULL);
}
}
}

sprintf(msg," 总线长度=%.3f \n",area_sum);
MessageBox(msg,"线长度统计",MB_OK);
}
return;
}</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnQueryBore()
{ querybore_flage=!querybore_flage; }</FONT></P><P><FONT color=#386490>void CCGisView_Demo1View::OnUpdateQueryBore(CCmdUI* pCmdUI)
{ pCmdUI->SetCheck(querybore_flage);
// TOD Add your command update UI handler code here }
</FONT></P>
举报 回复(0) 喜欢(0)     评分
lxwd
路人甲
路人甲
  • 注册日期2003-08-03
  • 发帖数14
  • QQ
  • 铜币132枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-07-13 13:43
<P>如何打包</P>
举报 回复(0) 喜欢(0)     评分
lym0813
路人甲
路人甲
  • 注册日期2004-06-14
  • 发帖数284
  • QQ
  • 铜币8枚
  • 威望0点
  • 贡献值0点
  • 银元0个
6楼#
发布于:2004-07-13 20:30
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
peng8748
论坛版主
论坛版主
  • 注册日期2003-08-07
  • 发帖数1712
  • QQ
  • 铜币52枚
  • 威望0点
  • 贡献值0点
  • 银元0个
7楼#
发布于:2004-07-13 21:16
好,这样VB、VC都有了,固个顶吧。
有什么要求PM我 email : peng8748@163.com
举报 回复(0) 喜欢(0)     评分
tom_jz
路人甲
路人甲
  • 注册日期2004-07-29
  • 发帖数23
  • QQ
  • 铜币156枚
  • 威望0点
  • 贡献值0点
  • 银元0个
8楼#
发布于:2004-07-29 17:22
支持啊!
举报 回复(0) 喜欢(0)     评分
zjjtwmj
路人甲
路人甲
  • 注册日期2003-08-02
  • 发帖数370
  • QQ
  • 铜币988枚
  • 威望0点
  • 贡献值0点
  • 银元0个
9楼#
发布于:2004-08-06 09:42
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em05.gif" />我们大家学习的楷模。
举报 回复(0) 喜欢(0)     评分
上一页
游客

返回顶部