CGisView、CGisEditView显示MAPGIS地图

1、 建立一个SDI程序,在stdafx.h文件中添加#include "mapgis.h"

2、 配置工程属性:设置文件输出路径到MAPGIS SDK安装目录下的program目录下,设置字节对齐。

3、 **View.h文件**View.cpp文件中的CView全部替换为CGisView

4、 C**ViewOnDraw成员函数体的最后添加CGisView::OnDraw(pDC);

5、 C**View类添加四个成员变量,代码片段:

public :
    AREA_HINST m_AreaHinst;
    
short  m_LineArea;

6、 C**View类的构造函数中加入初始化工作区实例句柄和工作区的语句,代码片段:

C ** View::C ** View()
{
       
//  TODO: add construction code here
       m_AreaHinst  =  _InitWorkArea(NULL);
       m_LineArea   
=  _OpenLinArea(m_AreaHinst);
}
7、 C**View 类的析构函数中加入释放资源的语句,代码片段:
C ** View:: ~ C ** View()
{
       _CloseAllArea(m_AreaHinst);
       _FreeWorkArea(m_AreaHinst);
}

8、

C**View 类中重载 CGisView 类的 _OwnerDraw(MyDC mdc) 函数,代码片段:

**View.h文件:

public :
       
void  _OwnerDraw(MyDC mdc);

**View.cpp文件:

void  C ** View::_OwnerDraw(MyDC mdc)
{
       _SetMyDCMode(mdc);
       _DispLinArea(mdc,m_LineArea);
}

9、 添加打开点、线、区的菜单,菜单IDIDM_OPEN_LINE_FILE,在C**View中添加该菜单的消息处理函数OnOpenLineFile,代码片段:

void  C ** View::OnOpenLineFile() 
{
       
if (_LoadFile(m_ LineArea) > 0 )
       {
              D_RECT rc;
              _GetFileRange(_GetAreaFileName(m_ LineArea),
& rc);
              
//  设置图形范围
                _SetWinMapRange( & rc);
              
//  设置显示范围
                _SetWinDispRect( & rc);
       }
}

_SetWinMapRange_SetWinDispRect是显示地图的关键所在,默认的图形范围和显示范围可以通过_GetWinMapRange_GetWinDispRect取到,然后默认的范围与打开的地图文件的范围不同,所以如果不在打开文件后设置图形范围和显示范围就可能出现看不到地图的情况。

10、             CGisEditViewCGisView类似,唯一的区别是将_OwnerDraw改为DispAllMap

11、             打开MAPGIS工程和打开单文件的情况类似,由于工程的打开一般是在文档类的OnOpenDocument中实现,而打开文档时会调用视图类的OnInitialUpdate函数,因此可以在视图类的OnInitialUpdate中设置图形范围和显示范围。

12、             为文档类添加成员变量:

MAPPROJECT m_Project;

13、             重载文档类的OnOpenDocument成员函数:

BOOL C ** Doc::OnOpenDocument(LPCTSTR lpszPathName) 
{
    
if  ( ! CDocument::OnOpenDocument(lpszPathName))
        
return  FALSE;
    
    m_Project 
=  _PRJLoadAProject(( char * )lpszPathName,m_AreaHinst);
    
    
return  TRUE;
}

14、             _OwnerDrawDispAllMap中添加以下代码:

if  (pDoc -> m_Project != NULL)
{
       _PRJDisplay(pDoc
-> m_Project,mdc);
}

15、             重载视图类的OnInitialUpdate成员函数:

void  C ** View::OnInitialUpdate() 
{
    CGisEditView::OnInitialUpdate();
    
    C
** Doc *  pDoc  =  GetDocument();
    ASSERT_VALID(pDoc);
    
    
if  (pDoc -> m_Project != NULL)
    {
        D_RECT rc;
        _PRJGetRange(pDoc
-> m_Project, & rc);
        _SetWinMapRange(
& rc);
        _SetWinDispRect(
& rc);
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值