Microsoft KB Archive/130765

From BetaArchive Wiki

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

Q130765



The information in this article applies to:


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





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.

Additional query words: user styles

Keywords : _IK kbCtrl kbOSWinNT351 kbOSWin2000 kbPropSheet kbSDKWin32 kbGrpDSUser kbOSWin95
Issue type : kbprb
Technology : kbWin32SDKSearch kbAudDeveloper kbSDKSearch kbWin32sSearch


Last Reviewed: December 16, 2000
© 2001 Microsoft Corporation. All rights reserved. Terms of Use.