2012-06-19 3 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(); 
     } 
     } 
    } 
} 
Смежные вопросы