2012-06-19 25 views
1

我試圖驗證在MFC中的一些代碼,並想知道如何驗證無或即數據對話框驗證:空或者驗證

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

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

} 

任何想法的範圍之間的一個數字?非常感謝! James

+0

如果範圍是-90到90不會0表示沒有?通常,這些類型的彈出式消息框提示不如您自己創建的靜態文本或侵入性較小的驗證方法更可取。 – AJG85

回答

2

爲了得到你所要求的,你可能必須寫一個自定義數據驗證器。 MFC Tech Note 026涵蓋了如何做到這一點。它還有如何擴展類嚮導來使用自定義例程的說明,而無需手動編寫所有代碼,但我不確定當前版本的VS實際上是否支持該方法(給定了多少VS的那部分已經改變了,我傾向於猜測「不」,但是我一點也不確定)。

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(); 
     } 
     } 
    } 
}