1

我正在尝试验证 MFC 中的一些代码,并且想知道如何验证 none 或范围之间的数字,即

void AddBuilding::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);

    DDX_Text(pDX, IDC_BUILDINGLATITUDE, m_Latitude);
    DDV_MinMaxFloat(pDX, m_Latitude, -90, 90);

}

有任何想法吗?非常感谢!詹姆士

4

2 回答 2

2

要获得所需的内容,您可能必须编写自定义数据验证器。MFC技术说明 026介绍了如何执行此操作。它还包含有关如何扩展类向导以使用您的自定义例程的说明,而无需手动为其编写所有代码,但我不确定当前版本的 VS 是否真的支持这一点(考虑到VS 的那部分已经改变,我倾向于猜测“不是”,但我完全不确定)。

于 2012-06-19T16:28:16.847 回答
1
void AddBuilding::DoDataExchange(CDataExchange* pDX) 
{ 
    CDialogEx::DoDataExchange(pDX); 

    DDX_Text(pDX, IDC_BUILDINGLATITUDE, m_Latitude); 

    if (pDX->m_bSaveAndValidate)
    {
      if (m_Latitude.GetLength()>0) // You may want to trim the string first.
      {
        m_fLatitude = _tsof(LPCTSTR(m_Latitude));
          // You probably need a better conversion function, that would tell you if
          // the string isn't a number, such as strtod() or sscanf().

        if (m_fLatitude<-90.0 || m_fLatitude>90.0)
        {
          pDX->PrepareEditCtrl(IDC_BUILDINGLATITUDE);
          AfxMessageBox(_T("Wrong latitude"),...);
          pDX->Fail();
        }
      }
    } 
}
于 2012-06-19T19:00:12.657 回答