Hi there.

I am using

Operating System: Windows XP
Project: Visual Studio 2003 C++ MFC Dialog Based Application

I subclassed an edit box control because I want to capture the WM_KEYDOWN messages when a user enters characters in the edit box. I need this because I want to measure the time interval between keystrokes for the phrase (a password in this case) that the user enters in the edit box.

But I want the user to enter the password twice, once in one edit box and again in another. So I created two edit boxes and then to each edit box added a control variable of type the custom edit box subclass I created.

Now the problem is that when a enter a character in either of the edit boxes, the OnKeyDown function of the subclass is called.

How do I know in which edit box did the user type in the key?

Should I rather create two subclasses for the edit boxes, and create a control variable for the one editbox that is of type: the one subclass, and to the other editbox I add a control variable that is of type: the other subclass?

I want the user to enter the password twice, once in one edit box and again in another. So I created two edit boxes and then to each edit box added a control variable of type the custom edit box subclass I created.

Now the problem is that when a enter a character in either of the edit boxes, the OnKeyDown function of the subclass is called.

How do I know in which edit box did the user type in the key?

I barely can understand that thing about "a control variable of type....". Are you implementing what I suggested a few days ago??

In such case, I would compare the passed hWnd with one of the two edit boxes' hWnd's:

(hWnd==GetDlgItem(GetParent(hWnd),IDC_PASSWORD1))
or
(hWnd==GetDlgItem(GetParent(hWnd),IDC_PASSWORD2))

And decide accordingly.

Hi Alvein

I am not processing in the WndProc function where the HWND handle is passed as parameter.

Lets say the class that I created, the custom edit box class, is called CMyEditControl. Then the function that I use to process the event that a key was pressed in the edit box looks like this:

void CMyEditControl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// TODO: Add your message handler code here and/or call default

	char pressedKey;
	pressedKey = char(nChar); 
	short keystate;

	switch(nChar)
	{
	case VK_SHIFT:
		// do whatever
                case VK_LEFT:
                         // do whatever
	}

}

where CMyEditControl is the custom edit box class I created.

The OnKeyDown is the default name for the event handler( the one that MFC creates for you). How do I get hold of the HWND handle from here (from within this function).

This above function is called when any of the edit boxes generates a WM_KEYDOWN message, I want to know how to know which one it was.

Thinkin aloud....is it possible to include a protected variable in your custom class, and initialize it accordingly in the constructor? that way you could simply check its value in the OnKeyDown() event.

This article has been dead for over six months. Start a new discussion instead.