spring20002
路人甲
路人甲
  • 注册日期2004-09-23
  • 发帖数86
  • QQ
  • 铜币286枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1780回复:5

表达式属性查询对话框(VC)

楼主#
更多 发布于:2004-09-28 00:39
<P>BOOL CSELDLG::OnInitDialog()
{
 CDialog::OnInitDialog();
 
 // TOD Add extra initialization here
 CMainFrame* pMainFrame;
 pMainFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
 m_pView=(CMyFirstMapView*)pMainFrame->GetActiveView();
    CMoLayers layers(m_pView->m_map1.GetLayers());
 int count = layers.GetCount();
 for(short i=count-1;i>-1;i--)
 {
  CMoMapLayer layer(layers.Item(COleVariant(i)));
  m_map3.GetLayers().Add(layer);</P>
<P>  m_layersel.AddString(layer.GetName());
 }
    m_layersel.SetWindowText("请选择图层 ");
 m_fieldname.SetWindowText("请选择字段");
 m_text.SetWindowText("请选择值");
 m_oper.SetWindowText("请选择查询方法");
 return TRUE;  // return TRUE unless you set the focus to a control
               // EXCEPTION: OCX Property Pages should return FALSE
}</P>
<P>void CSELDLG::OnSellayer()
{
 // TOD Add your control notification handler code here
 
 
 CString str,str1;
 m_layersel.GetWindowText(str);
 CMoLayers layers(m_map3.GetLayers());
 CMoMapLayer layer(layers.Item(COleVariant(TEXT(str))));
 m_sel.SetWindowText("您选择了"+str+"图层");
 layername=str;
    CMoRecordset recs(layer.GetRecords());
 CMoTableDesc tdrecs(recs.GetTableDesc());
 int n=tdrecs.GetFieldCount();
 m_fieldname.ResetContent();
 for(short i=0;i<n;i++)
 {
  if(tdrecs.GetFieldType(i)<20)
  {
   str1=tdrecs.GetFieldName(i);
   m_fieldname.InsertString(i,str1);
  }
 }
 m_fieldname.SelectString(-1,fieldname);
}</P>

<P>void CSELDLG::Comble3add()
{
 m_text.ResetContent();
 
 CString str1;
 <a>file://m_fieldname.GetWindowText</A>(str);
 CMoMapLayer layer(m_map3.GetLayers().Item(COleVariant(TEXT(layername))));
 CMoRecordset recs(layer.GetRecords());
    int i=0;
 recs.MoveFirst();
 while(!recs.GetEof())
 {
  <a>file://m_text.DeleteString</A>(i);
  CString str1=recs.GetFields().Item(COleVariant(TEXT(fieldname))).GetValueAsString();
  m_text.InsertString(i,str1);
  recs.MoveNext();
  i+=1;
 }</P>
<P>}</P>


<P>void CSELDLG::OnCloseupFieldname()
{
 // TOD Add your control notification handler code here
 int nSel;
 if((nSel=m_fieldname.GetCurSel())!=CB_ERR)
 {
  m_fieldname.GetLBText(nSel,fieldname);
 }
 else
 {
  m_fieldname.ResetContent();
  m_fieldname.AddString(fieldname);
  m_fieldname.SelectString(-1,fieldname);
 }
    
 Comble3add();
}</P>
<P>void CSELDLG::OnDropdownOper()
{
 // TOD Add your control notification handler code here
 m_oper.ResetContent();
 m_oper.AddString(">");
 m_oper.AddString(">=");
 m_oper.AddString("=");
 m_oper.AddString("<");
 m_oper.AddString("<=");
    m_oper.AddString("Like");
 m_oper.SelectString(-1,opername);
}</P>
<P>void CSELDLG::OnCloseupText()
{
 // TOD Add your control notification handler code here
 int nSel;
 if((nSel=m_text.GetCurSel())!=CB_ERR)
 {
  m_text.GetLBText(nSel,shujuname);
 }
 else
 {
  m_text.ResetContent();
  m_text.AddString(shujuname);
  m_text.SelectString(-1,shujuname);
 }
}</P>
<P>
void CSELDLG::OnChaxun()
{
 // TOD Add your control notification handler code here
 if(layername=="")
 {
  MessageBox("select one layer please!");
  return;
 }
 if(fieldname=="")
 {  
  MessageBox("select one field please!");
  return;
 }
 
 if(shujuname=="")
 {
  MessageBox("select one value please!");
  return;
 }
    if(opername=="")
 {
  MessageBox("select one oper please!");
  return;
 }
  
 CMoMapLayer layer(m_map3.GetLayers().Item(COleVariant(TEXT(layername))));
    CMoRecordset recs(layer.GetRecords());
 CMoFields fields(recs.GetFields());
 afields=fields;
 CMoField field(fields.Item(COleVariant(TEXT(fieldname))));
 if(field.GetType()==8)
 {
  expression=fieldname + " " + opername + " " +"'"+shujuname+"'"+" ";
 }
 else
 {
  expression=fieldname+""+opername+""+shujuname;
 }
 
 CMoRecordset select(layer.SearchExpression(expression));
 m_selection=select;
 VARIANT va;
 VariantInit(;va);
 va.vt=VT_NULL;
 CMoTrackingLayer tracklayer(m_map3.GetTrackingLayer());
 tracklayer.Refresh(true,va);
}</P>
<P>BEGIN_EVENTSINK_MAP(CSELDLG, CDialog)
    <a>file://{{</A>AFX_EVENTSINK_MAP(CSELDLG)
 ON_EVENT(CSELDLG, IDC_MAP1, 4 /* AfterTrackingLayerDraw */, OnAfterTrackingLayerDrawMap1, VTS_I4)
 <a>file://}}</A>AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()</P>
<P>CSELDLG::CSELDLG(CView* pView)
{
  
}
BOOL CSELDLG::Create()
{
 return CDialog::Create(CSELDLG::IDD);
}</P>
<P>
void CSELDLG::OnCloseupOper()
{
 // TOD Add your control notification handler code here
 int nSel;
 if((nSel=m_oper.GetCurSel())!=CB_ERR)
 {
  m_oper.GetLBText(nSel,opername);
 }
 else
 {
  m_oper.ResetContent();
  m_oper.AddString(opername);
  m_oper.SelectString(-1,opername);
 }
}</P>
<P>void CSELDLG::OnAfterTrackingLayerDrawMap1(long hDC)
{
 // TOD Add your control notification handler code here
 if(LPDISPATCH(m_selection)==0)
  return;
 CMoSymbol sym;
 sym.CreateDispatch(TEXT("MapObjects2.Symbol"));
 sym.SetColor(0xFF00FF);
 
 m_selection.MoveFirst();
 sym.SetSymbolType(2);
 sym.SetStyle(8);
 while(!m_selection.GetEof())
 {
  CMoFields fields1(m_selection.GetFields());
  CMoField field1(fields1.Item(COleVariant(TEXT("Shape"))));
        if(afields.Item(COleVariant(TEXT("Shape"))).GetType()==21)
  {
   CMoPoint point(field1.GetValue().pdispVal);
   sym.SetSize(8);
   sym.SetStyle(2);
   <a>file://m_map3.FlashShape</A>(point,3);
   m_map3.DrawShape(point,sym);
  }
        else if(afields.Item(COleVariant(TEXT("Shape"))).GetType()==23)
  {   CMoPolygon shape(field1.GetValue().pdispVal);
      <a>file://m_map3.FlashShape</A>(shape,3);
      m_map3.DrawShape(shape,sym);
  }
  else
  {
   CMoLine line(field1.GetValue().pdispVal);
   <a>file://m_map3.FlashShape</A>(line,3);
   m_map3.DrawShape(line,sym);
  }
  m_selection.MoveNext();
 }
    m_selection=NULL;
}</P>
<P>void CSELDLG::OnChongzhi()
{
 // TOD Add your control notification handler code here
 m_fieldname.ResetContent();
 m_oper.ResetContent();
 m_text.ResetContent();
}
</P>
喜欢0 评分0
edward22
路人甲
路人甲
  • 注册日期2004-07-01
  • 发帖数121
  • QQ
  • 铜币506枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-09-28 08:41
<P>虽然我用的vb+mo,但是还是感谢你的无私,这可能是其他潜水者需要学习的!</P>
如果你爱他就让他学GIS,如果你恨他就让他学GIS!
举报 回复(0) 喜欢(0)     评分
lixaokui
路人甲
路人甲
  • 注册日期2003-12-25
  • 发帖数768
  • QQ28796446
  • 铜币27枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2004-09-28 08:51
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
西门吹血,有了鼓风机,就不用吹啦!
举报 回复(0) 喜欢(0)     评分
gis_fnc
路人甲
路人甲
  • 注册日期2004-10-04
  • 发帖数38
  • QQ
  • 铜币268枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2004-10-08 22:10
<img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" /><img src="images/post/smile/dvbbs/em02.gif" />
别人笑我太疯癫,我笑他人看不穿,不见五陵豪杰墓,无花无酒锄做田。
举报 回复(0) 喜欢(0)     评分
xiashuke
路人甲
路人甲
  • 注册日期2004-06-23
  • 发帖数56
  • QQ
  • 铜币171枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2004-10-09 22:57
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
kmxl
路人甲
路人甲
  • 注册日期2004-10-30
  • 发帖数94
  • QQ
  • 铜币294枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2004-11-08 17:32
太深了----不过还是来顶一下
举报 回复(0) 喜欢(0)     评分
游客

返回顶部