Re: Prevent invalid chars in editbox
You might have better luck if you handle the WM_CHAR message
void CNumericEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (isprint(nChar) && !(isdigit(nChar) || nChar == '-'))
{
return;
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
Here is one step further (only let the user enter the - sign in the
begining)
void CNumericEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (isprint(nChar) && !(isdigit(nChar) || nChar == '-'))
{
return;
}
if (nChar == '-')
{
int Start;
int End;
GetSel(Start,End);
if (Start != 0)
{
SetSel(0,0);
}
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
Next step would be to toggle it on and off (instead of multiple - ).
AliR.
"Eric Lilja" <mindcoolerremoveme@gmail.com> wrote in message
news:ONG95sjyHHA.5408@TK2MSFTNGP02.phx.gbl...
Hello, I have an editbox in a dialog where the user is only allowed to
enter integers. However, I cannot simply set the number flag in the
resource editor because the user must be able to enter negative integers
too. Therefore, I didn't create it with that flag. Instead I subclassed
CEdit and redefined OnKeyDown():
void
NumberEditBox::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
static const std::string valid_chars = "0123456789-";
if (valid_chars.find(nChar) != std::string::npos)
{
TRACE1("%c is a valid char\n", (char)nChar);
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
}
}
This is basically the only code in my NumberEditBox class, no other member
functions have been introduced or redefined by me.
When the program is run, I only see traces of the valid chars, however the
invalid ones still appear in the editbox itself. What else do I need to
do? I was suprised that not letting the CEdit do anything for the unwanted
chars was not enough.
I'm using MSVC++ 8.0 SP1 on WinXP Pro SP2.
- Eric