15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Type over mode in CEdit control

spillman!bworthen@uunet.uu.net
Monday, October 21, 1996

Environment: VC++ 4.2, Win NT 4.0

     I have a number of CEdit controls that I'm working with.  I want to be 
able to allow the user to "type-over" any characters that might be present 
in the control.  In other words, when the insertion point is positioned to 
the left of a character in the control, and the user types a key, the new 
character will "type-over" the character that is to the right of the insertion 
point.  I would like to turn on (or off) this "type-over" mode either when the 
user toggles the insertion key, or programmatically in the code (possibly 
both).
     I've been looking through the documentation and other sources of 
help for CEdit and its parent classes, and I can't find an easy way to do 
this.  Can anyone tell me if MFC provides an easy way to do this?  If MFC 
doesn't provide a solution, can anyone give me an example of how to go 
about solving this?  I would be very appreciative!!
                                          Thanks in advance
                                                     Brad
                                                     bworthen@spillman.com



Jim Alsup -- epi!alsup@amd.com
Tuesday, October 22, 1996

[Mini-digest: 2 responses]

On 21 Oct 96 at 17:20, spillman!bworthen@uunet.uu.ne wrote about "Type 
over mode in CEdit control":

I had the same issue to deal with and also failed to find anything 
useful in the various sources of help I checked.  I still think this 
ought to be (and probably is) built in, but I found that you can work 
around the issue fairly easily by subclassing CEdit and overriding OnChar 
as follows:  Note that I stored my over type variable in the main frame 
class because insert/overtype mode is generally a sticky global concept.  You 
can also override PreTranslateMessage here to look for the
insert key and toggle modes.

I hope this helps.

void CExtEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    // TODO: Add your message handler code here and/or call default
    int start, end;

    GetSel( start, end );
    CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
    if ( pFrame->m_overtype && start == end )
    {
       SetSel( start, end + 1 );
       ReplaceSel("");  // This is like Clear(), but also deselects the sel.
    }
    CEdit::OnChar(nChar, nRepCnt, nFlags);
}

-jim alsup   ja@episupport.com

> Environment: VC++ 4.2, Win NT 4.0
> 
>      I have a number of CEdit controls that I'm working with.  I want to be 
> able to allow the user to "type-over" any characters that might be present 
> in the control.  In other words, when the insertion point is positioned to 
> the left of a character in the control, and the user types a key, the new 
> character will "type-over" the character that is to the right of the insertion 
> point.  I would like to turn on (or off) this "type-over" mode either when the 
> user toggles the insertion key, or programmatically in the code (possibly 
> both).
>      I've been looking through the documentation and other sources of 
> help for CEdit and its parent classes, and I can't find an easy way to do 
> this.  Can anyone tell me if MFC provides an easy way to do this?  If MFC 
> doesn't provide a solution, can anyone give me an example of how to go 
> about solving this?  I would be very appreciative!!
>                                           Thanks in advance
>                                                      Brad
>                                                      bworthen@spillman.com
> 
> 
-----From: Igor Nedelko 

I would do that this way:

1. Derive a class from CEdit, let's say CMyEdit;
2. Add a handler message function on WM_CHAR:
	void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
	{
		if(m_bOvertype)
		{
			WORD wPosition = LOWORD(GetSel());
			SetSel(wPosition,wPosition++);
		}
		CEdit::OnChar(nChar,nRepCnt,nFlags);
	}
3. Associate your edit with the CMyEdit class through ClassWizard/Member
Variables or subclass it manually ( using SubclassDlgItem call ). 

You just need to set m_bOvertype member variable.
It should work.

Regards,
Igor





| Вернуться в корень Архива |