Do you get any msgs in the ExpInputWndProc()?
try....
setting the edit to a child of the listview
and/or...
Ensure that all the child controls of the main window have different ID numbers by setting the HMENU param in the create to an int.
MSDN on CreateWindow()
"For a child window, hMenu specifies the child-window identifier, an integer value used by a dialog box control to notify its parent about events. The application determines the child-window identifier; it must be unique for all child windows with the same parent window."
(Could be that the LV and edit (and TAB ect) all have the ID number NULL (and same parent) and are so conflicting.)
I also process WM_KILLFOCUS msgs and set the edited LV item to 'selected', destroy the edit and return focus to the LV.
On create I use SendMessage() with WM_SETTEXT (and EM_SETSEL 0,-1), then with the edits hwnd ShowWindow(), UpdateWindow() and SetFocus()
EDIT: I have working code for exactly this in MFC and WIN32 C. The number of controls 'stacked' on top of each other is not a problem.
Let me know if you are still having problems.