1

私はMFCでいくつかのコードを検証しようとしていますが、何も検証しないか範囲内の数値を検証する方法を考えていました.

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 Tech Note 026では、これを行う方法について説明しています。また、Class Wizard を拡張して、すべてのコードを手動で記述せずにカスタム ルーチンを使用する方法についても説明していますが、現在のバージョンの 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 に答える