|
You can subclass the edit control and look for the enter key press. When the enter key is pressed you can post
a message to another window to do the processing of the edit control contents.
See method II here: How To Use the ENTER Key from Edit Controls in a Dialog Box[^]
Also, a Google search on "enter key edit control" yields much info.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thx for your quick reply !
The prob. ist that i don't know where i have to do what to get the datas after pressing return.
And i haven't got a Dlg, the EditControl is on a Toolbar !
Thanx a lot
best regards Croc
modified on Monday, April 7, 2008 1:24 PM
|
|
|
|
|
Subclassing a control is the same for a window as it is for a dialog.
You must have an HWND for the edit control if you put it there
Subclassing Controls[^]
If you're using MFC it's much simpler.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mr.Salsbery,
>>>If you're using MFC it's much simpler.<<<<br mode="hold" />
...but i am usin g the glory MFC *heut* i tried it for more than 4 hours and i think i couldn't findd my mistake !!!
best regards
hopefullx Croc
|
|
|
|
|
CrocodileBuck wrote: i am usin g the glory MFC
In that case...
Derive a class from CEdit
Create the edit control using your derived class
In the derived class, add a handler for WM_CHAR
In the WM_CHAR handler, look for the enter key (as shown in the first link I posted)
If the enter key was pressed - do whatever you need to do
For all other keys, pass the message on to the edit control (call Default();)
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Ok,
i'put this code in the newToolBar.cpp:
BOOL New_cToolBar::PreTranslateMessage(MSG* pMsg)<br />
{<br />
if (pMsg->message==WM_KEYDOWN && pMsg->wParam == VK_RETURN )<br />
{<br />
if (pMsg->message==WM_KEYDOWN && pMsg->wParam == VK_RETURN )<br />
{<br />
<br />
if ( ID_nEDIT )<br />
{<br />
MessageBox( _T("Got it!") );<br />
}<br />
}<br />
}<br />
return New_cToolBar::PreTranslateMessage( pMsg );<br />
}<br />
but int won't work ???
best regards Croc
|
|
|
|
|
That won't work because the message goes to the edit control, not to the toolbar
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thx Mr. Salsbery,
are there any CodeSnippets out there ?
I think i couldn't manage it without ...
Best regards Croc
|
|
|
|
|
Perhaps you could have a look on my Code i posted !?
Thx
Best regards
croc
|
|
|
|
|
<font color="Green">
#pragma once
class CMyEdit : public CEdit
{
DECLARE_DYNAMIC(CMyEdit)
public:
CMyEdit();
virtual ~CMyEdit();
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
};
<font color="Green">
<font color="Green">
#include "stdafx.h"
#include "MyEdit.h"
IMPLEMENT_DYNAMIC(CMyEdit, CEdit)
CMyEdit::CMyEdit() : CEdit()
{
}
CMyEdit::~CMyEdit()
{
}
BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
ON_WM_CHAR()
END_MESSAGE_MAP()
void CMyEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
if (nChar == VK_RETURN)
{
<font color="Green">
return;
}
CEdit::OnChar(nChar, nRepCnt, nFlags);
}
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Many thx Mr. Salsbery,
this will work, but only in a seperate project!
Now i try to put your code in my code with the edit in the toolbar !
Where and how have i to implement it ???
I never did anything in the MFC that was as complicated like this !
Many Thanx
Croc
|
|
|
|
|
CrocodileBuck wrote: this will work, but only in a seperate project!
You can't add another class to your project?
How did you get the edit control on the toolbar (the code)?
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
??? Shur i can add classes but i'm .... !
I don't know where i have to implement your code and i don't know how to do it !
I tried it too long i think !
This is the declaration of the membervariable of my edit in NewToolBar.h :
public:<br />
CEdit m_Ctrl_EDIT;<br />
In NewToolBar.cpp:
BOOL NewToolBar::LoadToolBarEx(UINT id)<br />
{<br />
BOOL bReturn;<br />
<br />
bReturn = CToolBar::LoadToolBar(id);
int iPosition = CommandToIndex(ID_nEDIT);<br />
SetButtonInfo(iPosition,ID_nEDIT,TBBS_SEPARATOR,EDITLEN);<br />
<br />
CRect rect;<br />
<br />
GetItemRect(iPosition, rect);<br />
<br />
rect.bottom = 20;<br />
<br />
DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL;<br />
m_Ctrl_EDIT.CreateEx(WS_EX_CLIENTEDGE,_T("EDIT"),NULL, dwStyle, rect, this, ID_nEDIT); <br />
<br />
<br />
return bReturn;<br />
}<br />
i use the menber !!!
i don't know how to implement code into mine, this is the prob !
Could you perhaps show it on my sample i posted, i know it's not the general way, im not to lazy, it simply won'work
Thanx a lot
Best regards
Croc(master of desaster)
|
|
|
|
|
CrocodileBuck wrote: CEdit m_Ctrl_EDIT;
Change that line to
CMyEdit m_Ctrl_EDIT;
I gave you code that can be separated into a .h and a .cpp file.
Do that, and add the files to your project.
Add the following line above the NewToolBar class decalration:
#include "MyEdit.h"
That's it!
CrocodileBuck wrote: Could you perhaps show it on my sample i posted
I could, but you wouldn't learn anything. You should (IMO) be able to easily add classes to your projects.
You'll be happier in the long run I bet
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mr.Salsbery,
yap i'm sure you are right, the long way is better, and i'm able to add classes to my project
I added your code bur it still won't work !
http://www.filehosting.at/files/download.php?file=422e731948daac3a203df0de8c83b21b
Thax a lot
Best regards
Croc
|
|
|
|
|
Hi,
i don't get an error message !
It simpy dont work
Best regards
Croc
|
|
|
|
|
If you put a breakpoint in OnChar() and run it in the debugger, is it ever hit when you type in the control?
If not, put a breakpoint in the CMyEdit constructor. Is that ever hit? If not then you didn't use a CMyEdit
instead of a CEdit.
I'd look at your code if it was in a ZIP - I have no unrar utility.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi Mr.Salsbery,
no problem, here is the zip:
http://www.filehosting.at/files/download.php?file=28f8239afa7e8afc1de1773edd074a02
best regards
Croc
|
|
|
|
|
I'll take a look....
In the meantime, see if adding this to the CMyEdit class works:
Add to CMyEdit.h, in the CMyEdit class declaration:
public:
virtual BOOL PreTranslateMessage(MSG* pMsg);
Add to CMyEdit.cpp
BOOL CTestEdit::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN && VK_RETURN == pMsg->wParam)
{
return TRUE;
}
else if (pMsg->message == WM_KEYUP && VK_RETURN == pMsg->wParam)
{
return TRUE;
}
return CEdit::PreTranslateMessage(pMsg);
}
Maybe that will work better!
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Wow 20 some messages to get text from an edit control? WOW
I can't get myself to read this thread. Be afraid, very afraid.
led mike
|
|
|
|
|
Ok, I steered you wrong with the enter key, sorry. Change your CMyEdit class like this and it works fine in your code:
#pragma once
class CMyEdit : public CEdit
{
DECLARE_DYNAMIC(CMyEdit)
public:
CMyEdit();
virtual ~CMyEdit();
virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
DECLARE_MESSAGE_MAP()
};
#include "stdafx.h"
#include "MyEdit.h"
IMPLEMENT_DYNAMIC(CMyEdit, CEdit)
CMyEdit::CMyEdit() : CEdit()
{
}
CMyEdit::~CMyEdit()
{
}
BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
END_MESSAGE_MAP()
BOOL CMyEdit::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN && VK_RETURN == pMsg->wParam)
{
return TRUE;
}
else if (pMsg->message == WM_KEYUP && VK_RETURN == pMsg->wParam)
{
MessageBox("Works","Works" ,MB_OK);
return TRUE;
}
return CEdit::PreTranslateMessage(pMsg);
}
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanx Mr. Salsbery,
many, many Thanx !
no i will go to bed
Perhabs tomorrow i have some questions about the code, but meanwhile
10000000 Thanx
)
Croc
|
|
|
|
|
CMyListCtrl myLst;
CMyListCtrl::OnCreate()
{
...
m_hThrd=_beginthreadex(...);
...
}
CMyListCtrl::OnDestroy()
{
WaitForSingleObject(m_hThrd,INFINITE);
CListCtrl::OnDestroy();
}
|
|
|
|
|
followait wrote: m_hThrd=_beginthreadex(...); //to fill the list
Why are you not using AfxBeginThread() ?
"Love people and use things, not love things and use people." - Unknown
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Because it doesn't initialize for C libraries.
Will using AfxBeginThread() solve the problem? If so , I'll use it.
|
|
|
|