⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dlgimporttable.cpp

📁 一个英国人写的GIS查看/编辑工具。支持标准的shapefile地图文件格式和coverage地图文件格式。同时可以编辑相应的dbf文件。
💻 CPP
📖 第 1 页 / 共 2 页
字号:

			if (s == SHAPEFILE_POINTS && m_nShape == SHPPoint) 
			{				
				m_lbColumn.SetCurSel(j);
				m_lbAttr.SetCurSel(i);
				break;
			}
			else if (s == SHAPEFILE_POLYLINES && (m_nShape == SHPPolyLine || m_nShape == SHPPolygon)) 
			{			
				m_lbAttr.SetCurSel(i);
				m_lbColumn.SetCurSel(j);
				break;
			}
		}
   } else
   {
      // If no attributes associated then display warning message
      
      if (m_nShape == SHPPoint)
      {
         AfxMessageBox(BDString(IDS_NOCOORDATTR) + " " + BDString(IDS_ADDMAPATTR));
      }
      else if (m_nShape == SHPPolyLine || m_nShape == SHPPolygon)
      {
         AfxMessageBox(BDString(IDS_NOPOLYLINEATTR) + " " + BDString(IDS_ADDMAPATTR));
      }      
   }

	// Associate attributes
	OnSelchangeAttribute();   


}

///////////////////////////////////////////////////////////////////////////////

void CDlgImportTable::OnSelchangeFtype() 
{
   InitAttr();	
}

///////////////////////////////////////////////////////////////////////////////
// 
// Associate the attribute with the column
//

void CDlgImportTable::OnSelchangeAttribute() 
{

}  

///////////////////////////////////////////////////////////////////////////////

void CDlgImportTable::OnSelchangeColumn() 
{

}

///////////////////////////////////////////////////////////////////////////////
//
// Given the column name, determines which (if any) attribute the column is
// associated with
//

long CDlgImportTable::GetColumnData(LPCSTR sCol)
{   
   CString sAttr;   

   // Search for column name already used

   for (int i = 0; i < m_importTable.m_aColumn.GetSize(); i++)
   {
      if (m_importTable.m_aColumn[i].m_sNameImport == sCol)
         break;
   }

   // If found search for the corresponding attribute name

   if (i < m_importTable.m_aColumn.GetSize())
   {
      for (int j = 0; j < m_lbAttr.GetCount(); j++)
      {
         m_lbAttr.GetText(j, sAttr);
         if (m_importTable.m_aColumn[i].m_sNameAttr == sAttr)
         {
            return m_lbAttr.GetItemData(j);
         }
      }
   }
  
   return CImportTable::DoNotImport;
}

///////////////////////////////////////////////////////////////////////////////
//
// Freeze the selection of feature type and feature 
//

void CDlgImportTable::OnSelect() 
{
   int i = m_cbFType.GetCurSel();

   if (i != CB_ERR)
   {       
       if (m_cbFType.GetItemData(i) == -1) 
       {
          OnCreate();
          return;
       }
       BeginWaitCursor();

       m_cbFType.GetLBText(i, m_importTable.m_sFType);
       
       GetDlgItem(IDC_SELECT)->EnableWindow(FALSE); 
       GetDlgItem(IDC_DICTIONARY)->EnableWindow(FALSE); 
       GetDlgItem(IDC_FTYPE)->EnableWindow(FALSE);        
       GetDlgItem(IDC_ATTRIBUTE)->EnableWindow(TRUE); 
       GetDlgItem(IDC_COLUMN)->EnableWindow(TRUE); 
       GetDlgItem(IDOK)->EnableWindow(TRUE);        
       ResizeWindow(IDC_EXTENT);
       CenterWindow();

       DetermineShapefile();
       InitAttr();	
       InitColumns();       

       // Clear the list
      
       m_importTable.m_aColumn.RemoveAll();


	   if (m_nShape)
	   {
	      MatchShape();
	   };

       EndWaitCursor();
   };
}

///////////////////////////////////////////////////////////////////////////////
//
// Associate the column and the attribute for importing
//

void CDlgImportTable::OnAdd() 
{
   CImportColumn column;

   // Get the currently selected attributes

   int index1 = m_lbColumn.GetCurSel();
   int index2 = m_lbAttr.GetCurSel();
   if (index1 != LB_ERR && index2 != LB_ERR)
   {
      m_lbColumn.GetText(index1, column.m_sNameImport);      
      m_lbAttr.GetText(index2, column.m_sNameAttr);                     

      column.m_lItemData = m_lbColumn.GetItemData(index1);

      // Remove the items from the lists

      m_lbColumn.DeleteString(index1);
      m_lbAttr.DeleteString(index2);

      // Update table

      m_importTable.m_aColumn.Add(column);

      // Now update lists
   
      InitImport();
   }   
}

///////////////////////////////////////////////////////////////////////////////

void CDlgImportTable::OnDelete() 
{
   // Remove columns

   int index = m_lbColumnAttr.GetCurSel();
   if (index != LB_ERR)
   {
      CImportColumn &column = m_importTable.m_aColumn[index];
      
      int i = m_lbColumn.AddString(column.m_sNameImport);
      m_lbColumn.SetItemData(i, column.m_lItemData);
      m_lbAttr.AddString(column.m_sNameAttr);

      m_importTable.m_aColumn.RemoveAt(index);

      InitImport();
   }
}

///////////////////////////////////////////////////////////////////////////////
//
// Automatically match columns to column names
//

void CDlgImportTable::OnAutomatch() 
{   
   CString sCol, sAttr;   

   BeginWaitCursor();
   for (int i = 0; i < m_lbColumn.GetCount(); i++)
   {
	  BOOL bFound = FALSE;
      m_lbColumn.GetText(i, sCol);
      sCol.TrimRight();
      sCol.MakeUpper();

	  // Search for an exact match (excluding postfix)

      for (int j = 0; j < m_lbAttr.GetCount(); j++)
      {         
         m_lbAttr.GetText(j, sAttr);         
         sAttr = CQuery::StripBrackets(sAttr);
         sAttr.TrimRight();

         if (sAttr.CompareNoCase(sCol) == 0)
         {
            m_lbColumn.SetCurSel(i);
            m_lbAttr.SetCurSel(j);
            OnAdd();

            i--;
            break;
			bFound = TRUE;
         }

      }

	  // If no exact match then search on subtext

	  if (!bFound)
	  {
		  for (int j = 0; j < m_lbAttr.GetCount(); j++)
		  {         
			 m_lbAttr.GetText(j, sAttr);         
          sAttr.MakeUpper();
			
          TRACE("sCol="+sCol+" sAttr="+sAttr+"\r\n");

			 if (sAttr.Find(sCol) != -1 || sCol.Find(sAttr) != -1)
			 {
				m_lbColumn.SetCurSel(i);
				m_lbAttr.SetCurSel(j);
				OnAdd();

				i--;
				break;
				bFound = TRUE;
			 }
		  }
	  }

   }
   EndWaitCursor();

	
	
}

///////////////////////////////////////////////////////////////////////////////

void CDlgImportTable::ResizeWindow(int nControl)
{
   CRect rectW, rectC;   
         
   GetWindowRect(rectW);
   GetDlgItem(nControl)->GetWindowRect(rectC);   

   SetWindowPos(NULL,rectW.left,rectW.left,rectW.right - rectW.left, rectC.bottom-rectW.top +5, 
                SWP_NOZORDER);
};

///////////////////////////////////////////////////////////////////////////////
//
// void CDlgImportTable::OnOK() 
//
// Save the selections
//

void CDlgImportTable::OnOK() 
{
   if (Validate()) CDialog::OnOK();
}

///////////////////////////////////////////////////////////////////////////////
//
// Same as OnOK except return IDC_NEXT indicating to return to previous
// dialog
//

void CDlgImportTable::OnNext()
{
   // If no fields selection then don't store results

   if (m_importTable.m_aColumn.GetSize() == 0) EndDialog(IDC_NEXT);

   // Otherwise validate and store selections

   if (Validate()) EndDialog(IDC_NEXT);
}

///////////////////////////////////////////////////////////////////////////////

BOOL CDlgImportTable::Validate()
{
   if (m_importTable.m_aColumn.GetSize() > 0)
   {
      for (int i = 0; i < m_importTable.m_aColumn.GetSize(); i++)
      {
         CImportColumn &column = m_importTable.m_aColumn[i];
         long lAttr = column.m_lItemData;

         // Check that points are matched with points

         if (column.m_sNameImport == SHAPEFILE_POINTS)
         {
            // Check that shapefile columns are linked with appropriate types
            
            if (HIWORD(lAttr) != IMP_COORD && 
                lAttr != CImportTable::DoNotImport)
            {
               AfxMessageBox(BDString(IDS_SHAPEFILECOL));
               m_lbColumn.SetCurSel(i);
               OnSelchangeColumn();        
               return FALSE;
            } else
            {
               column.m_bShapeFile = TRUE;
            }
         }

         // Check that polylines are matched with polylines

         if (column.m_sNameImport == SHAPEFILE_POLYLINES)
         {
            // Check that shapefile columns are linked with appropriate types

            if (HIWORD(lAttr) != IMP_MAPLINE && lAttr != CImportTable::DoNotImport)
            {
               AfxMessageBox(BDString(IDS_SHAPEFILECOL));
               m_lbColumn.SetCurSel(i);
               OnSelchangeColumn();        
               return FALSE;
            } else
            {
               column.m_bShapeFile = TRUE;
            }
         }    
      };

      return TRUE;
   };
   return FALSE;

}

///////////////////////////////////////////////////////////////////////////////

void CDlgImportTable::OnDictionary() 
{
   m_cbFType.OnClickDictionary();	
}

///////////////////////////////////////////////////////////////////////////////
//
// To automatically create feature display dialog where user can select matching
// parent features
//

void CDlgImportTable::OnCreate() 
{
   DetermineShapefile();

   // Don't display this window underneath

   ShowWindow(SW_HIDE);

   CDlgImportCreate2 dlg(m_pDatabase, &m_importTable, m_nShape, m_nFileType);
   if (dlg.DoModal() == IDOK)
   {      
      CDialog::OnOK();
   } else
   {
      EndDialog(IDCANCEL);
   }
}

///////////////////////////////////////////////////////////////////////////////
//
// Determine the file being imported
//

CString CDlgImportTable::GetFilePath(LPCSTR sExt)
{
   CString sPath;

   int i = m_pDatabase->GetConnect().Find("DefaultDir=");      
   sPath = m_pDatabase->GetConnect().Mid(i+11);
   sPath = sPath.Left(sPath.Find(";"));

   if (sPath[sPath.GetLength()-1] != '\\') sPath += '\\';   
   sPath += m_importTable.m_sTableImport + sExt;

   return sPath;
}

///////////////////////////////////////////////////////////////////////////////

void CDlgImportTable::PostNcDestroy() 
{
   BDHwndDialog() = NULL;
   BDToolTip() = NULL;
   
	CDialog::PostNcDestroy();
}

///////////////////////////////////////////////////////////////////////////////

void CDlgImportTable::OnMouseMove(UINT nFlags, CPoint point) 
{
	
	CDialog::OnMouseMove(nFlags, point);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -