OnCharとOnKeydownを上書きして、特定の種類の文字が編集コントロールに挿入されないようにブロックしようとしています。複数のポイントをブロックしようとしています'。' そして数ではないものは何でも。
まず、すでに「。」があるかどうかを確認します。ダイアログクラスで定義された変数を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で、入力されている文字をチェックしています。それがポイントであるかどうかの数ではないが、すでにポイントがあった場合、私はCDialogからOnCharを呼び出さない:
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()の呼び出しを防ぐことなのか、それとも表示される文字がnullになるようにnChar=0にする必要があるのか疑問に思っています。しかし、それに加えて、OnCharで表示しようとしているメッセージも表示されていません。つまり、MyMainDialog :: OnChar()が呼び出されていません。代わりにCDialogEx::OnChar()を上書きする必要がありますか?
ご清聴ありがとうございました