How to get datas from an edit control (in the toolbar) by pressing return (enter) ?
-
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++ :java:
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
-
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++ :java:
-
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
Ok, i'put this code in the newToolBar.cpp:
BOOL New_cToolBar::PreTranslateMessage(MSG* pMsg) { if (pMsg->message==WM_KEYDOWN && pMsg->wParam == VK_RETURN ) { if (pMsg->message==WM_KEYDOWN && pMsg->wParam == VK_RETURN ) { if ( ID_nEDIT ) { MessageBox( _T("Got it!") ); } } } return New_cToolBar::PreTranslateMessage( pMsg ); }
but int won't work ??? best regards Croc -
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++ :java:
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
-
Ok, i'put this code in the newToolBar.cpp:
BOOL New_cToolBar::PreTranslateMessage(MSG* pMsg) { if (pMsg->message==WM_KEYDOWN && pMsg->wParam == VK_RETURN ) { if (pMsg->message==WM_KEYDOWN && pMsg->wParam == VK_RETURN ) { if ( ID_nEDIT ) { MessageBox( _T("Got it!") ); } } } return New_cToolBar::PreTranslateMessage( pMsg ); }
but int won't work ??? best regards CrocThat won't work because the message goes to the edit control, not to the toolbar :) Mark
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
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++ :java:
-
That won't work because the message goes to the edit control, not to the toolbar :) Mark
Mark Salsbery Microsoft MVP - Visual C++ :java:
Thx Mr. Salsbery, are there any CodeSnippets out there ? I think i couldn't manage it without ... :sigh: Best regards Croc
-
Thx Mr. Salsbery, are there any CodeSnippets out there ? I think i couldn't manage it without ... :sigh: Best regards Croc
Perhaps you could have a look on my Code i posted !? Thx Best regards croc
-
Thx Mr. Salsbery, are there any CodeSnippets out there ? I think i couldn't manage it without ... :sigh: Best regards Croc
// MyEdit.h
#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);
};////////////////////////////////////////////////////////////////////////
// MyEdit.cpp
#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)
{
// do stuff!return;
}CEdit::OnChar(nChar, nRepCnt, nFlags);
}Mark Salsbery Microsoft MVP - Visual C++ :java:
-
// MyEdit.h
#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);
};////////////////////////////////////////////////////////////////////////
// MyEdit.cpp
#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)
{
// do stuff!return;
}CEdit::OnChar(nChar, nRepCnt, nFlags);
}Mark Salsbery Microsoft MVP - Visual C++ :java:
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 ???:confused: I never did anything in the MFC that was as complicated like this ! Many Thanx Croc
-
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 ???:confused: 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++ :java:
-
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++ :java:
??? Shur i can add classes but i'm ....:confused: ! 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: //************************************************************************************************************ CEdit m_Ctrl_EDIT; //************************************************************************************************************
In NewToolBar.cpp:BOOL NewToolBar::LoadToolBarEx(UINT id) { BOOL bReturn; bReturn = CToolBar::LoadToolBar(id); // Zugriff auf Elemente der Funktion LoadToolbar() int iPosition = CommandToIndex(ID_nEDIT); SetButtonInfo(iPosition,ID_nEDIT,TBBS_SEPARATOR,EDITLEN); CRect rect; GetItemRect(iPosition, rect); rect.bottom = 20; DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL;/*ES_NUMBER|*/ m_Ctrl_EDIT.CreateEx(WS_EX_CLIENTEDGE,_T("EDIT"),NULL, dwStyle, rect, this, ID_nEDIT); return bReturn; }
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 :( :( :( :sigh: :sigh: :sigh: :(( :(( :(( Thanx a lot Best regards Croc(master of desaster) -
??? Shur i can add classes but i'm ....:confused: ! 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: //************************************************************************************************************ CEdit m_Ctrl_EDIT; //************************************************************************************************************
In NewToolBar.cpp:BOOL NewToolBar::LoadToolBarEx(UINT id) { BOOL bReturn; bReturn = CToolBar::LoadToolBar(id); // Zugriff auf Elemente der Funktion LoadToolbar() int iPosition = CommandToIndex(ID_nEDIT); SetButtonInfo(iPosition,ID_nEDIT,TBBS_SEPARATOR,EDITLEN); CRect rect; GetItemRect(iPosition, rect); rect.bottom = 20; DWORD dwStyle = WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_AUTOHSCROLL;/*ES_NUMBER|*/ m_Ctrl_EDIT.CreateEx(WS_EX_CLIENTEDGE,_T("EDIT"),NULL, dwStyle, rect, this, ID_nEDIT); return bReturn; }
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 :( :( :( :sigh: :sigh: :sigh: :(( :(( :(( 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++ :java:
-
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++ :java:
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 :sigh: 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 :sigh:
-
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 :sigh: 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 :sigh:
Hi, i don't get an error message ! It simpy dont work ;) :^) :sigh: Best regards Croc
-
Hi, i don't get an error message ! It simpy dont work ;) :^) :sigh: 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++ :java:
-
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++ :java:
Hi Mr.Salsbery, no problem, here is the zip: http://www.filehosting.at/files/download.php?file=28f8239afa7e8afc1de1773edd074a02 best regards Croc
-
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)
{
// Do stuff!return TRUE;
}return CEdit::PreTranslateMessage(pMsg);
}Maybe that will work better! :) Mark
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
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)
{
// Do stuff!return TRUE;
}return CEdit::PreTranslateMessage(pMsg);
}Maybe that will work better! :) Mark
Mark Salsbery Microsoft MVP - Visual C++ :java:
-
Hi Mr.Salsbery, no problem, here is the zip: http://www.filehosting.at/files/download.php?file=28f8239afa7e8afc1de1773edd074a02 best regards Croc
Ok, I steered you wrong with the enter key, sorry. Change your CMyEdit class like this and it works fine in your code:
// MyEdit.h
#pragma once
class CMyEdit : public CEdit
{
DECLARE_DYNAMIC(CMyEdit)
public:
CMyEdit();
virtual ~CMyEdit();virtual BOOL PreTranslateMessage(MSG* pMsg);
protected:
DECLARE_MESSAGE_MAP()
};///////////////////////////////////////////////////////////////////////////
// MyEdit.cpp
#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)
{
// Do stuff!MessageBox("Works","Works" ,MB_OK);
return TRUE;
}return CEdit::PreTranslateMessage(pMsg);
}Mark
Mark Salsbery Microsoft MVP - Visual C++ :java: