65.9K
CodeProject is changing. Read more.
Home

Catching the 'Enter' Key in windows and controls

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (8 votes)

Jan 13, 2000

viewsIcon

78452

How to handle the WM_GETDLGCODE message in order to catch special key strokes.

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.