C++ 数据对话框验证:为空或已验证

C++ 数据对话框验证:为空或已验证,c++,mfc,C++,Mfc,我正在尝试验证MFC中的一些代码,并且想知道如何验证none或介于范围(即 void AddBuilding::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_BUILDINGLATITUDE, m_Latitude); DDV_MinMaxFloat(pDX, m_Latitude, -90, 90); } 有什么想法吗?非常感谢! Jam

我正在尝试验证MFC中的一些代码,并且想知道如何验证none或介于范围(即

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

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

}
有什么想法吗?非常感谢!
James

要得到您想要的,您可能需要编写一个自定义数据验证程序。MFC介绍了如何做到这一点。它还提供了如何扩展类向导以使用自定义例程的说明,而无需手动编写所有代码,但我不确定当前版本的VS是否真的支持这一点(考虑到VS的这一部分发生了多大变化,我倾向于猜测“不”,但我也不确定这两种方式).

void AddBuilding::DoDataExchange(CDATA Exchange*pDX)
{ 
CDialogEx::DoDataExchange(pDX);
DDX_文本(pDX、IDC_建筑纬度、m_纬度);
如果(pDX->m_bsavead and validate)
{
如果(m_Latitude.GetLength()>0)//您可能需要首先修剪字符串。
{
m_平度=_tsof(LPCTSTR(m_纬度));
//您可能需要一个更好的转换函数,这将告诉您
//字符串不是数字,例如strtod()或sscanf()。
如果(m_平直度90.0)
{
pDX->PrepareEditCtrl(IDC\U BUILDINGLATITUDE);
AfxMessageBox(_T(“错误纬度”),…);
pDX->Fail();
}
}
} 
}

如果范围为-90到90,0不代表无?通常,这些弹出消息框提示不如您自己使用的静态文本或侵入性较小的验证方法。
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();
        }
      }
    } 
}