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

VC中Info工具实现的讨论 [转帖]

楼主#
更多 发布于:2003-10-26 11:58
我在VC中做了一个类似MapInfo中的信息工具,还不怎么完善,与大家讨论。
实现思路:
1.自定义一个Info工具MYTOOL_INFO
2.生成必要的数据记录类(我的数据没有绑定在图层上,我用DAO访问ACCESS数据库)
3.建立一个对话框,用来显示数据库中的数据,我把对话框做成了非模式对话框,
     这样具有模式对话框没有的优势。
4.在OnToolUsed()中响应工具消息

当用户选择信息工具,在地图上点击后,OnToolUsed()函数中的代码可以这样写:
if (ToolNum==MYTOOL_INFO)
{
  CMapXPoint pt;//用来表示点击的位置坐标
  CMapXFeatures fs;
  CMapXFeature f;//点击处的对象
  pt.CreateDispatch(pt.GetClsid());
  pt.Set(X1,Y1);//将传进来的坐标给pt对象
  //得到当前图层中被选择的图元集合
  //这里我只处理了当前图层,如果考虑全部图层
  //可以用遍历实现
  fs = m_map.GetLayers().Item(m_currentlayer).SearchAtPoint(pt);//当前图层名称
                                                              //保存在视图类中  
  if (fs.GetCount()!=1)//如果选择的图元数不是一,就返回
    return;
  f=fs.Item(1);//得到第一被选择的图元
  
  //MessageBox(f.GetName(),"你选择的地物为",MB_OK);//测试用
                                                  //看是否选中了一个地物        

  CAnimalDoc* pDoc=GetDocument();//
  CBasicSet* basic=pDoc->m_pBasicSet;//得到文档类中的基本信息记录集指针
  CString cityname="\'"+f.GetName()+"\'";
  CString strCriteria=_T("城市名="+breedname);//生成SQL语句
  if (!basic->FindFirst(strCriteria))//根据SQL语句查询记录集,定位指针
  {
    MessageBox("没有找到!","出错!";
    return;
  }
  

  if (m_pDlg)//非模式对话框在视图类初始化的时候生成了对话框
  {
    m_pDlg->SetValues(distri);//通过RecordSet指针设置对话框数据成员的值
    m_pDlg->UpdateData(FALSE);//更新对话框数据
    m_pDlg->SetActiveWindow();//激活
    m_pDlg->ShowWindow(SW_SHOWNOACTIVATE);
  }
}
喜欢0 评分0
游客

返回顶部