void CAddBasicResourceTool::OnMouseDownMap(short Button, short Shift, float X, float Y)
{
CMapXFeature ftr;
CMapXStyle style;
CMapXLayerInfo LayerInfo ;
CMapXFields MapFields ;
CMapXDataset ds ;
CMapXLayer layer ;
int C_ID ;
COleVariant VT_Layer ;
TB_ResourceShare * tb_ResourceShare = NULL ;
if ( !m_pView ) return ;
float screenX,screenY ;
double mapX,mapY ;
screenX = X;
screenY = Y;
CHtMapX & m_MapX = m_pView->GetMapX() ;
if ( m_MapX.GetCurrentTool() == MAP_ADDBASICRESOURCE_TOOL ) {
m_MapX.ConvertCoord(&screenX,&screenY,&mapX,&mapY,miScreenToMap);
CAddResourceDlg dlgAddResource(m_pView) ;
if ( dlgAddResource.DoModal() == IDC_BTN_SUBMIT ) {
//ÔÚÕâÀïÏòÊý¾Ý¿âÀïÃæÌí¼ÓÊý¾Ý
tb_ResourceShare = dlgAddResource.GetResourceShare() ;
tb_ResourceShare->F_Coord_X = mapX ;
tb_ResourceShare->F_Coord_Y = mapY ;
CMainFrame * m_pMainFrame = (CMainFrame *)AfxGetMainWnd() ;
if ( ( C_ID = m_pMainFrame->g_AdoTool.AddOneRecord( *tb_ResourceShare ) ) < 0 ) {
MessageBox( NULL , "Ôö¼Óʧ°Ü" , "",MB_OK);
return;
}
TRACE("Äú½«ÒªÌí¼ÓÒ»¸öµã");
}
else
return ;
try{
if (ftr.CreateDispatch(ftr.GetClsid())){
ftr = m_MapX.GetFeatureFactory().CreateSymbol() ;
style = ftr.GetStyle() ;
style.SetSymbolBitmapName("CAR1-32.BMP");
style.SetSymbolBitmapSize( 32 );
style.SetSymbolBitmapTransparent( TRUE ) ;
ftr.SetStyle( style ) ;
ftr.GetPoint().Set( mapX , mapY ) ;
if ( !m_MapX.LayerExist( LAYER_BASICRESOURCE ) ) {
LayerInfo.CreateDispatch( LayerInfo.GetClsid() ) ;
MapFields.CreateDispatch( MapFields.GetClsid() );
MapFields.AddIntegerField( "C_ID" , TRUE ) ;
MapFields.AddStringField( "Name" , 32 ) ;
COleVariant vFields;
vFields.vt = VT_DISPATCH ;
vFields.pdispVal = MapFields;
vFields.pdispVal->AddRef();
LayerInfo.SetType( miLayerInfoTypeNewTable );
LayerInfo.AddParameter("Filespec" , COleVariant(m_pLayerFilePath) );
LayerInfo.AddParameter("Name" , COleVariant(LAYER_BASICRESOURCE) );
LayerInfo.AddParameter("Fields", vFields );
layer = m_MapX.GetLayers().Add( LayerInfo );
VT_Layer.vt = VT_DISPATCH ;
VT_Layer.pdispVal = layer ;
VT_Layer.pdispVal->AddRef();
ds = m_MapX.GetDatasets().Add( miDataSetLayer , VT_Layer , DS_BASICRESOURCE ) ;
((CMainFrame *)AfxGetMainWnd())->GetEnargEyeForm()->ListMapxLayers(&m_MapX);
}
layer = m_MapX.GetLayers().Item( LAYER_BASICRESOURCE ) ;
layer.SetEditable(TRUE);
VT_Layer.vt = VT_DISPATCH ;
VT_Layer.pdispVal = layer ;
VT_Layer.pdispVal->AddRef();
ds = m_MapX.GetDatasets().Item( DS_BASICRESOURCE ) ;
CMapXFeature feature = m_MapX.GetLayers().Item( LAYER_BASICRESOURCE ).AddFeature( ftr ) ;
char sCID[10];
itoa( C_ID , sCID , 10 ) ;
/* 这一种方法也可以,但本人不喜欢
layer.SetKeyField("C_ID");
feature.SetKeyValue( sCID ) ;
feature.Update();
layer.SetKeyField("Name");
feature.SetKeyValue( tb_ResourceShare->SV_Name );
feature.Update();
*/
COleVariant VTFeature;
VTFeature.vt = VT_DISPATCH ;
VTFeature.pdispVal = feature.m_lpDispatch;
VTFeature.pdispVal->AddRef();
CMapXRowValues RowValues = ds.GetRowValues( VTFeature ) ;
RowValues.Item("C_ID").SetValue( COleVariant(sCID) ) ;
RowValues.Item("Name").SetValue( COleVariant(tb_ResourceShare->SV_Name) ) ;
feature.Update( TRUE , RowValues ); //这一句很重要,一定要这样写,不然写不进数据
}
}
catch(COleDispatchException* e) {
e->ReportError();
e->Delete();
} catch(COleException* e) {
e->ReportError();
e->Delete();
}
}
}