When you process the WM_KEYDOWN, you successfully clear the edit control.
Then you pass that message on to the base class, which is the edit control, and it inserts a carriage return into the text. That's one theory. If it's correct, then simply not sending the WM_KEYDOWN message on to the base class will solve the problem.
Another theory is that the WM_KEYDOWN is followed by a WM_CHAR (synthesized by the TranslateMessage), and the edit control is added the carriage return based on that message. If it's correct, then you have an interesting situation where you've said you wanted a multiline edit control, but you're trying to clear the content every time the user tries to create a new line.
I misspoke about the ES_WANTRETURN. That works with the dialog box code to make sure it doesn't steal the carriage return keypresses altogether. That's why I changed my original answer.