Я пытаюсь заблокировать вставку определенных типов символов в свой элемент управления редактированием, перезаписывая OnChar и OnKeydown.Я пытаюсь заблокировать более одной точки ».и все, что не является числом.
Сначала я проверяю, есть ли уже "."в элементе управления Edit, который имеет фокус, установив для переменной, определенной в классе диалога, значение false:
void MyMainDialog::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CWnd * eb1 = GetDlgItem(IDC_EDIT1); //Reference dimension 1 box;
CWnd * eb2 = GetDlgItem(IDC_EDIT2); //Reference dimension 2 box
CWnd * eb3 = GetDlgItem(IDC_EDIT3); //Reference dimension 3 box
CString temp;
CWnd * focusedHand = MyMainDialog::GetFocus(); //Reference edit box being focused
if(focusedHand == eb1)
{
eb1->GetWindowTextA(temp);
if(temp.Find('.') != -1)
checkPoint = true;
else
checkPoint = false;
}
else if(focusedHand == eb2)
{
eb2->GetWindowTextA(temp);
if(temp.Find('.') != -1)
checkPoint = true;
else
checkPoint = false;
}
else if(focusedHand == eb3)
{
eb3->GetWindowTextA(temp);
if(temp.Find('.') != -1)
checkPoint = true;
else
checkPoint = false;
}
CDialogEx::OnKeyDown(nChar, nRepCnt, nFlags);
}
В OnChar я проверяю вводимый символ.Если это не число, если это точка, но точка уже была, то я не вызываю OnChar с CDialog:
void MyMainDialog::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if(nChar == '.' && checkPoint == false) //Is a point and there is no other point
{
CDialogEx::OnChar(nChar, nRepCnt, nFlags);
}
if((nChar < '0' || nChar > '9')) //Is not a number
{
//Show message to user
}
else //Is a number
{
CDialogEx::OnChar(nChar, nRepCnt, nFlags);
}
}
Ну, мой код не работает.Он компилируется и не вылетает при наборе в редакторе, но просто ничего не делает.Мне интересно, если правильный способ перезаписать это было бы предотвратить вызов CDialogEx :: OnChar () или я должен сделать nChar = 0, чтобы отображаемый символ был нулевым.Но кроме того, сообщение, которое я пытаюсь отобразить в OnChar, также не отображается, то есть MyMainDialog :: OnChar () даже не вызывается.Должен ли я вместо этого перезаписать CDialogEx :: OnChar ()?
Спасибо за ваше внимание