数据对话验证:为空或已验证

时间:2012-06-19 16:15:12

标签: c++ mfc

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

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

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

}

有什么想法吗?非常感谢! 詹姆斯

2 个答案:

答案 0 :(得分:2)

要获得您所要求的内容,您可能需要编写自定义数据验证程序。 MFC Tech Note 026介绍了如何执行此操作。它还有关于如何扩展类向导以使用自定义例程的说明,而无需手动编写所有代码,但我不确定当前版本的VS是否实际支持这个(给定多少) VS的那部分发生了变化,我倾向于猜测“不是”,但不管怎么说,我都不确定。

答案 1 :(得分: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();
        }
      }
    } 
}