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?

Recommended Answers

All 3 Replies

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.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.