In order to catch the "Enter" key, and other special keys in a CListCtrl
(or any control for that matter) it is necessary to derive your own class and add a handler for the WM_GETDLGCODE
message. To allow all special keys to be processed by the control add the following:
UINT SMUPPGrid::OnGetDlgCode()
{
UINT result = CListCtrl::OnGetDlgCode();
result = result | DLGC_WANTALLKEYS;
return result;
}
Other options include (from MSDEV documentation):
DLGC_WANTALLKEYS
: All keyboard input.
DLGC_WANTARROWS
: Arrow keys.
DLGC_WANTCHARS
: WM_CHAR messages.
DLGC_WANTMESSAGE
: All keyboard input. The application passes this message on to the control.
DLGC_WANTTAB
: TAB key.
DLGC_BUTTON
: Button (generic).
DLGC_DEFPUSHBUTTON
: Default pushbutton.
DLGC_HASSETSEL
: EM_SETSEL messages.
DLGC_UNDEFPUSHBUTTON
: No default pushbutton processing. (An application can use this flag with DLGC_BUTTON
to indicate that it processes button input but relies on the system for default pushbutton processing.)
DLGC_RADIOBUTTON
: Radio button.
DLGC_STATIC
: Static control.
This is a relatively simple process but it is not really all that intuitive or well documented.