Re: CEdit AND enter-key
"RAN" <nijenhuis@wish.nl> ha scritto nel messaggio
news:1186750597.981398.160060@x35g2000prf.googlegroups.com...
How do i
intercept the enter key so i can addstring() it to the listbox ?
If you want to intercept the enter key from the edit-box, you may want to
derive a class from CEdit, and:
1. override OnGetDlgCode (WM_GETDLGCODE message), to make sure that the
derived edit-box receives the Enter key event
2. override OnChar (WM_CHAR message), to intercept the enter key
(VK_RETURN), and do proper action.
Here you can find a little sample I wrote of a CEdit-derived class, which
displays a message-box with the content of the edit-box when Enter key is
pressed.
This is the header file for CEditEnter sample class:
<CODE file="EditEnter.h">
#pragma once
//////////////////////////////////////////////////////////////////////////
// CLASS: CEditEnter
// DESCR: An edit control that intercepts the enter key
//////////////////////////////////////////////////////////////////////////
class CEditEnter : public CEdit
{
DECLARE_DYNAMIC(CEditEnter)
public:
CEditEnter();
virtual ~CEditEnter();
public:
protected:
// Called when enter key is pressed
virtual void OnKeyEnterPressed();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg UINT OnGetDlgCode();
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
};
</CODE>
And this is the implementation file:
<CODE file="EditEnter.cpp">
// EditEnter.cpp : implementation file
//
#include "stdafx.h"
#include "EditEnter.h"
// CEditEnter
IMPLEMENT_DYNAMIC(CEditEnter, CEdit)
CEditEnter::CEditEnter()
{
}
CEditEnter::~CEditEnter()
{
}
BEGIN_MESSAGE_MAP(CEditEnter, CEdit)
ON_WM_GETDLGCODE()
ON_WM_CHAR()
END_MESSAGE_MAP()
// CEditEnter message handlers
UINT CEditEnter::OnGetDlgCode()
{
// Assure we will receive Enter key
return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS;
}
void CEditEnter::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if ( nChar == VK_RETURN )
{
// Intercept return key and call the handler
OnKeyEnterPressed();
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
void CEditEnter::OnKeyEnterPressed()
{
//
// Do something when Enter key is pressed
//
CString msg( _T("User entered:\n\n") );
CString text;
GetWindowText(text);
msg += text;
AfxMessageBox( msg );
}
</CODE>
Giovanni