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



The information in this article applies to:

  • Microsoft Platform Software Development Kit (SDK) 1.0, when used with:
    • Microsoft Windows 95
    • the operating system: Microsoft Windows NT 3.51
    • the operating system: Microsoft Windows 2000

This article was previously published under Q130765

SYMPTOMS

When you press the ESC key and the focus is on a Multiline Edit control that is a child of a property sheet page, it 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 procedure whose template contains the Multiline Edit control. Property sheet dialog procedures 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 procedure 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.

Modification Type:MinorLast Reviewed:7/11/2005
Keywords:kbCtrl kbprb kbPropSheet KB130765