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

📄 pagequerycalc.cpp

📁 一个英国人写的GIS查看/编辑工具。支持标准的shapefile地图文件格式和coverage地图文件格式。同时可以编辑相应的dbf文件。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
      {
         double d;
         if (m_eValue1.GetValue(d))
         {
            stats.SetValue1(d);
         } else
         {
            return;
         }
      }

     // Get Operator

      index = m_cbOperator.GetCurSel();
      if (index != CB_ERR)
      {
         int nStat = m_cbOperator.GetItemData(index);
         stats.SetStatistic(nStat);

         // Get Second Attribute

         index = m_cbAttr2.GetCurSel();
         if (index != CB_ERR)
         {
            CQueryElement* pElement = (CQueryElement*)m_cbAttr2.GetItemDataPtr(index);
            if (pElement != NULL)
            {               
               stats.SetFTypeId2(pElement->GetFTypeId());
               stats.SetAttrId2(pElement->GetAttrId());
            } 
            // Value
            else
            {
               double d;
               if (m_eValue2.GetValue(d))
               {
                  stats.SetValue2(d);
               } else
               {
                  return;
               }
            }

            // Get the number of decimal places

            int nDP;
            if (m_eDecPlaces.GetValue(nDP, 0, 10))
            {
                stats.SetDecPlaces(nDP);
            } else
            {
               return;
            }

            // Get Name

            m_eStatsName.GetWindowText(sName);
            sName.TrimLeft();
            if (sName.GetLength() != 0)
            {
               stats.SetDesc(sName);

              // Add to list

               CQueryStats* pStats = new CQueryStats(stats);               
               
               pElement = m_pQuery;
               while (pElement->GetNextQuery() != NULL)
               {
                  pElement = pElement->GetNextQuery();
               }
               ASSERT(pElement != NULL);
               pElement->SetNextQuery(pStats);

              // Update the list

               UpdateQueryStats();
               
            } else
            {
               AfxMessageBox(BDString(IDS_NOCALCNAME));
               m_eStatsName.SetFocus();
            }

         }         
      }
   }   	
   m_bChanged = FALSE;
}

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

void CPageQueryCalc::OnDelete() 
{
   int index = m_lbQueryStats.GetCurSel();
   if (index != CB_ERR)
   {
      CQueryStats* pStats = (CQueryStats*)m_lbQueryStats.GetItemDataPtr(index);

      // Remove stats from list

      m_lbQueryStats.DeleteString(index);

      // Remove from query

      CQueryElement* pElement = m_pQuery;
      while (pElement != NULL)
      {
         if (pElement->GetNextQuery() == pStats)
         {
            CQueryElement* pNext = pStats->GetNextQuery();

            // Prevent other calculations being deleted
            pStats->SetNextQuery(NULL); 
            delete pStats;

            pElement->SetNextQuery(pNext);
            
            break;
         }         
         pElement = pElement->GetNextQuery();
      }
   }
	
}

/////////////////////////////////////////////////////////////////////////////
//
// Set a default name

void CPageQueryCalc::OnSelchange() 
{
   CQueryElement *pElement1 = NULL, *pElement2 = NULL;
   int nStat = 0;
   CString sName, sStat;
   int i;

   // Update the operators based on the first attribute

   UpdateOperators();

   // Retrieve selections

   int index = m_cbAttr1.GetCurSel();
   if (index != CB_ERR)
   {
      pElement1 = (CQueryElement*)m_cbAttr1.GetItemDataPtr(index);
      
     // Get Operator

      index = m_cbOperator.GetCurSel();
      if (index != CB_ERR)
      {
         nStat = m_cbOperator.GetItemData(index);
      
         // Get Second Attribute

         index = m_cbAttr2.GetCurSel();
         if (index != CB_ERR && m_cbAttr2.IsWindowEnabled() && m_cbAttr2.GetItemDataPtr(index) != NULL)
         {
            pElement2 = (CQueryElement*)m_cbAttr2.GetItemDataPtr(index);
         }         
      }
   }   	

   // Create name
   
   if (pElement1 != NULL) 
   {
      sName = pElement1->GetDesc();
      i = sName.Find('[');  
      if (i >= 0) sStat = sName.Left(i-1);
      else sStat = sName;

      if (nStat == CQueryStats::area) sStat += " " + BDString(IDS_AREASQM);
   };

   if (pElement1 != NULL && pElement2 != NULL)
   {
      if (nStat == CQueryStats::add) sStat += " + ";
      if (nStat == CQueryStats::subtract) sStat += " - ";
      if (nStat == CQueryStats::multiply) sStat += " x ";
      if (nStat == CQueryStats::divide) sStat += " / ";
      if (nStat == CQueryStats::percent) sStat += " % ";      
   };

   if (pElement2 != NULL) 
   {
      sName = pElement2->GetDesc();
      i = sName.Find('[');
      if (i >= 0) sStat += sName.Left(i);   
      else sStat += sName;
   };

   m_eStatsName.SetWindowText(sStat);

   m_bChanged = TRUE;

   // Enable value control as required

   m_eValue1.EnableWindow(m_cbAttr1.GetItemData(m_cbAttr1.GetCurSel()) == NULL);
   m_eValue2.EnableWindow(m_cbAttr2.GetItemData(m_cbAttr2.GetCurSel()) == NULL);
   
}

///////////////////////////////////////////////////////////////////////////////
//
// Set available operators for the currently selected attribute
//

void CPageQueryCalc::UpdateOperators()
{
   CQueryElement *pElement1 = NULL;
   int nStat = -1;

   int index = m_cbAttr1.GetCurSel();
   if (index != CB_ERR)
   {
      pElement1 = (CQueryElement*)m_cbAttr1.GetItemDataPtr(index);      
      index = m_cbOperator.GetCurSel();
      if (index != CB_ERR)
      {
         nStat = m_cbOperator.GetItemData(index);
      };

      m_cbOperator.ResetContent();

      // Add numeric operators

      if (pElement1 == NULL || pElement1->GetDataType() == BDNUMBER)
      {
         m_cbOperator.AddStringX(BDString(IDS_ADD),CQueryStats::add);
         m_cbOperator.AddStringX(BDString(IDS_SUBTRACT),CQueryStats::subtract);
         m_cbOperator.AddStringX(BDString(IDS_DIVIDE),CQueryStats::divide);
         m_cbOperator.AddStringX(BDString(IDS_MULTIPLY),CQueryStats::multiply);
         m_cbOperator.AddStringX(BDString(IDS_PERCENT),CQueryStats::percent);	
      } 

      // Add spatial operators

      else if (pElement1->GetDataType() == BDMAPLINES)
      {
         m_cbOperator.AddStringX(BDString(IDS_AREASQM),CQueryStats::area);            
      }

      // Restore previous selection

      for (int i = 0; i < m_cbOperator.GetCount(); i++)
      {
         if ((int)m_cbOperator.GetItemData(i) == nStat) m_cbOperator.SetCurSel(i);
      }
      if (m_cbOperator.GetCurSel() == CB_ERR) m_cbOperator.SetCurSel(0);

      index = m_cbOperator.GetCurSel();
      nStat = m_cbOperator.GetItemData(index);

      m_cbAttr2.EnableWindow(nStat != CQueryStats::area);      
   }   

}

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

BOOL CPageQueryCalc::OnKillActive() 
{
   CString sName;
   m_eStatsName.GetWindowText(sName);
   sName.TrimRight();

   if (m_bChanged)
   {
      int nRet = AfxMessageBox(BDString(IDS_ADDCALC) + sName + "?", MB_YESNOCANCEL);
      if (nRet == IDYES) OnAdd();
      else if (nRet == IDCANCEL) return FALSE;
   }
   m_bChanged = FALSE;

	return CPropertyPage::OnKillActive();
}


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

void CPageQueryCalc::OnOK() 
{
   *m_pQueryPrev = *m_pQuery;      	  			
	CPropertyPage::OnOK();
}

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

⌨️ 快捷键说明

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