Placing the caret in an Edit control at the right place
Gururaj Kulkarni -- gururajk@cdc.bflsl.soft.net
Wednesday, February 12, 1997
Hello Everybody,
Environment: MSVC 4.0 Win NT 4.0
I have an Edit Control placed over a Dialog. I have trapped the EN_UPDATE Notification for the same
Edit Control to do certain validation. I have a set of characters(like {,},\ , | etc) which are not to be allowed.
I have been able to do this successfully. But the problem is with respect to placing the caret.
Say if the currently entered string is Gururaj after which an invalid character is entered, then I am able
to place the caret at the end of the string entered. Now if the user enters an invalid character
after the character 'a' (Refer to the above string). Still I am able to forcibly place the caret at the
end. I am doing this by getting the string length and pass it to the CEdits' SetSel() member function.
But my problem is to place the caret after the letter 'a' itself (Refer to the above string again)
So How do I control the placing of the Caret ?
Can some one help me out.
Cheers and Happy FAQing,
Gururaj
Burt -- blstampfl@software.rockwell.com
Wednesday, February 12, 1997
[Mini-digest: 5 responses]
Hi Gururaj,
Wouldn't it be acceptable to subclass the edit control and in your
derived CEdit(??) class
implement an override of the OnChar() method. Then just look for the
invalid characters in the
OnChar() and (for those invalid chars) just NOT call the base class
OnChar() ? This way the
cursor should never need to be repositioned (since it never got moved by
the insertion of
an invalid character).
Burt Stampfl
internal ext. 32398
outside line (414)328-2398
BURT.STAMPFL@software.rockwell.com
BURT.STAMPFL@nconnect.net
>----------
>From: Gururaj Kulkarni[SMTP:gururajk@cdc.bflsl.soft.net]
>Sent: Wednesday, February 12, 1997 2:46 AM
>To: 'mfc-l@netcom.com'
>Subject: Placing the caret in an Edit control at the right place
>
>
>Hello Everybody,
>
>Environment: MSVC 4.0 Win NT 4.0
>
> I have an Edit Control placed over a Dialog. I have trapped the
>EN_UPDATE Notification for the same
>Edit Control to do certain validation. I have a set of characters(like {,},\
>, | etc) which are not to be allowed.
>I have been able to do this successfully. But the problem is with respect to
>placing the caret.
>Say if the currently entered string is Gururaj after which an invalid
>character is entered, then I am able
>to place the caret at the end of the string entered. Now if the user enters
>an invalid character
>after the character 'a' (Refer to the above string). Still I am able to
>forcibly place the caret at the
>end. I am doing this by getting the string length and pass it to the CEdits'
>SetSel() member function.
>But my problem is to place the caret after the letter 'a' itself (Refer to
>the above string again)
>
>So How do I control the placing of the Caret ?
>Can some one help me out.
>
>Cheers and Happy FAQing,
>Gururaj
>
>
>
-----From: Bruce DeGraaf
Gururaj,
I think you are going to have to build a new class, derived from CEdit,
and overload the OnChar method (and maybe the OnKeyDown method too).
Something like this (highly simplified, use the MFC Wizards rather than
just type in the code):
class CEditNew : public CEdit
{
//{{AFX_MSG(CEditVideo)
afx_msg void OnChar(UINT nChar, UINT repCount, UINT flags);
//}}AFX_MSG
};
void CEditNew::OnChar(UINT nChar, UINT repCount, UINT flags)
{
if (isalnum(nChar)) // or some other test for acceptability
CEdit::OnChar(nChar, repCount, flags);
}
In your host dialog, where you have declared the edit box member
variable, retype it from CEdit to CEditNew. Jeff Prosise in Programming
Windows 95 with MFC mentions something like this on page 405.
It's not quite as frightening as it first appears.
Be aware that you are almost certainly going to have to overload
OnKeyDown and maybe OnContextMenu as well. See if you can figure out what
happens to the escape character keystroke (remember, it is a dialog based
application).
Best!
-----Original Message-----
From: owner-mfc-l [SMTP:owner-mfc-l@majordomo.netcom.com]
Sent: Wednesday, February 12, 1997 8:46 AM
To: 'mfc-l@netcom.com'
Subject: Placing the caret in an Edit control at the right place
Hello Everybody,
Environment: MSVC 4.0 Win NT 4.0
I have an Edit Control placed over a Dialog. I have trapped the
EN_UPDATE Notification for the same
Edit Control to do certain validation. I have a set of characters(like
{,},\
, | etc) which are not to be allowed.
I have been able to do this successfully. But the problem is with
respect to
placing the caret.
Say if the currently entered string is Gururaj after which an invalid
character is entered, then I am able
to place the caret at the end of the string entered. Now if the user
enters
an invalid character
after the character 'a' (Refer to the above string). Still I am able to
forcibly place the caret at the
end. I am doing this by getting the string length and pass it to the
CEdits'
SetSel() member function.
But my problem is to place the caret after the letter 'a' itself (Refer
to
the above string again)
So How do I control the placing of the Caret ?
Can some one help me out.
Cheers and Happy FAQing,
Gururaj
-----From: "Benoit D'Oncieu"
Sublcass the edit control by creating you own CEdit derivative with
ClassWizard,
then use the WM_CHAR message handler (OnChar) to prevend the user to
enter
invalid characters.
afx_msg void CMyEdit::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )
{
int nStart, nEnd;
BOOL bAllow = FALSE;
CString strPrevText, strNewText;
GetSel(nStart, nEnd);
GetWindowText(strPrevText);
if (nStart != 0)
{
if (nStart == -1)
strNewText = strPrevText;
else
strNewText = strPrevText.Left(nStart);
}
strNewText += CString((TCHAR)nChar , nRepCnt);
if (nEnd != -1)
strNewText += strPrevText.Mid(nEnd);
// Do your own processing here to determine if new string is valid
// ...
if (bAllow)
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
________________________________________
_\|/_ Benoit d'Oncieu,
(o o) Senior Developper
---oOO-(_)-OOo--------------------------------------------
-
ADWAYS - The net for the advertising media
6 rue Godefroy
92800 PUTEAUX
FRANCE
Tel: +33 (1) 97 56 82
Fax: +33 (1) 97 56 57
MailTo:bdoncieu@adways.com
________________________________________
>-----Original Message-----
>From: Gururaj Kulkarni [SMTP:gururajk@cdc.bflsl.soft.net]
>Sent: mercredi 12 fevrier 1997 09:46
>To: 'mfc-l@netcom.com'
>Subject: Placing the caret in an Edit control at the right place
>
>
>Hello Everybody,
>
>Environment: MSVC 4.0 Win NT 4.0
>
> I have an Edit Control placed over a Dialog. I have trapped the
>EN_UPDATE Notification for the same
>Edit Control to do certain validation. I have a set of characters(like
>{,},\ , | etc) which are not to be allowed.
>I have been able to do this successfully. But the problem is with
>respect to placing the caret.
>Say if the currently entered string is Gururaj after which an invalid
>character is entered, then I am able
>to place the caret at the end of the string entered. Now if the user
>enters an invalid character
>after the character 'a' (Refer to the above string). Still I am able
>to forcibly place the caret at the
>end. I am doing this by getting the string length and pass it to the
>CEdits' SetSel() member function.
>But my problem is to place the caret after the letter 'a' itself (Refer
>to the above string again)
>
>So How do I control the placing of the Caret ?
>Can some one help me out.
>
>Cheers and Happy FAQing,
>Gururaj
>
>
-----From: Jim Lawson Williams
At 08:46 12-02-97 +-5-30, Gururaj Kulkarni
wrote:
>
>Hello Everybody,
>
>Environment: MSVC 4.0 Win NT 4.0
>
> I have an Edit Control placed over a Dialog. I have trapped the
EN_UPDATE Notification for the same
>Edit Control to do certain validation. I have a set of characters(like
{,},\ , | etc) which are not to be allowed.
>I have been able to do this successfully. But the problem is with respect
to placing the caret.
>Say if the currently entered string is Gururaj after which an invalid
character is entered, then I am able
>to place the caret at the end of the string entered. Now if the user
enters an invalid character
>after the character 'a' (Refer to the above string). Still I am able to
forcibly place the caret at the
>end. I am doing this by getting the string length and pass it to the
CEdits' SetSel() member function.
>But my problem is to place the caret after the letter 'a' itself (Refer to
the above string again)
>
>So How do I control the placing of the Caret ?
>Can some one help me out.
>
>Cheers and Happy FAQing,
>Gururaj
>
G'day!
You might consider subclassing the edit and examining the characters as
they go by, rejecting those which are unacceptable. That way you will have
no need to worry about the caret: it won't move. See Mike B.'s "nabbed
edit" from Chapter 7 of "The Revolutionary Guide...". The style ES_NUMBER
would be better described as "ES_POSITIVE_INTEGER", so that example helped
me deal with signed numbers, possibly containing fractions. A bit similar
to your case: + or - only in the lead position; one-only decimal
place-signifier; bounce other non-digits.
Regards,
Jim LW
>From the BBC's "Barchester Chronicles":
"I know that ultimately we are not supposed to understand.
But I also know that we must try."
-- the Reverend Septimus Harding,
tax-consultant, crypt-analyst, clog-dancer, C++ programmer
-----From: splinta@cix.compulink.co.uk (Philip Beck)
In-Reply-To: <01BC18C1.5B523440@plutonium.bfl.soft.net>
>So How do I control the placing of the Caret ?
I used the following to place the caret at the beginning :
pMyEdit->SetSel(0,0,FALSE);
Phil.
Become an MFC-L member
| Вернуться в корень Архива
|