|
[讨论]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);
}
} |
|