PRB: Property Sheet w/ Multiline Edit Control Ignores ESC Key

ID: Q130765

The information in this article applies to:

SYMPTOMS

Pressing the ESC key when the focus is on a Multiline Edit control that is a child of a property sheet page, does not dismiss the property sheet control as expected.

CAUSE

When the ESC key is pressed while focus is on a Mutiline Edit control, the IDCANCEL notification (sent with a WM_COMMAND message) is sent to the property sheet dialog proc whose template contains the Multiline Edit control. Property sheet dialog procs do not process this message, so it is not forwarded to the property sheet control.

RESOLUTION

Trap the IDCANCEL notification that is sent along with the WM_COMMAND message in the property sheet dialog proc that contains the multiline edit control. Then forward the message to the property sheet control. (The property sheet control is the parent of all the property sheet page dialogs.) The following code shows how to do this:

Sample Code

   // 
   //  FUNCTION: SheetDialogProc(HWND, UINT, WPARAM, LPARAM)
   // 
   //  PURPOSE:  Processes messages for a page in the PPT sheet control.
   // 
   //  PARAMETERS:
   //    hdlg - Window handle of the property sheet.
   //    wMessage - Type of message.
   //    wparam - Message-specific information.
   //    lparam - Message-specific information.
   // 
   //  RETURN VALUE:
   //    TRUE -  Message handled.
   //    FALSE - Message not handled.
   // 

   LRESULT CALLBACK SheetDialogProc(HWND hdlg,
                         UINT uMessage,
                        WPARAM wparam,
                        LPARAM lparam)
   {
       LPNMHDR lpnmhdr;
       HWND    hwndPropSheet;
       switch (uMessage)
       {
      case WM_INITDIALOG:

         // Do whatever initializations you have here.
         return TRUE;

      case WM_NOTIFY:

         // More code here.

         break;

       case WM_COMMAND:

          switch(LOWORD(wparam))
         {

            case IDCANCEL:

            // Forward this message to the parent window
            // so that the PPT sheet is dismissed.
               SendMessage(GetParent(hdlg),
                             uMessage,
                             wparam,
                             lparam);
            beak;

            default:
            break;
         }
         break;

      }

NOTE: This solution also works with wizard controls. This behavior is seen under both Windows NT and Windows 95; the solution in this article works for both platforms.

Additional query words: user styles

Keywords          : kbcode kbCtrl kbNTOS351 kbPropSheet kbGrpUser kbWinOS95 
Issue type        : kbprb

Last Reviewed: January 2, 1999