阅读:1622回复:1
VC中Info工具实现的讨论 [转帖]我在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); } } |
|
|