Using Accelerators with an MFC Modeless Dialog Box

ID: Q117500


The information in this article applies to:


SUMMARY

To use accelerators with a modeless dialog box, override the PreTranslateMessage()function in your derived CDialog class.


MORE INFORMATION

To use accelerators with your modeless dialog box, perform the following steps:

  1. Create a modeless dialog box. For additional information, please see the following article in the Microsoft Knowledge Base:
    Q103788 Creating a Modeless Dialog Box with MFC Libraries


  2. Insert this sample code into the files listed above the code:
    
       // .h file with your derived CDialog class.
       class CModeless : public CDialog
       {
          .
        public:
          virtual BOOL PreTranslateMessage(MSG*);
          .
       };
    
       //.cpp file.
       BOOL CModeless::PreTranslateMessage(MSG* pMsg)
       {
          HACCEL hAccel =
          ((CMainFrame*)AfxGetApp()->m_pMainWnd)->GetAccelTable();
          if(!(hAccel &&
               ::TranslateAccelerator(AfxGetApp()->m_pMainWnd->m_hWnd, hAccel,
                                      pMsg)))
               return CDialog::PreTranslateMessage(pMsg);
          else
             return TRUE;
       }
    
       // Mainfrm.h file, where CMainFrame is the main window class.
       HACCEL CMainFrame::GetAccelTable() { return m_hAccelTable; } 


  3. Create the accelerators with App Studio, or with Resource View from the Project Workspace in Visual C++ 32-bit Edition, version 4.0. The accelerators should be in the IDR_MAINFRAME accelerator table. They should also have the same ID as the controls or menu items with which they are associated.


Additional query words: kbinf 1.00 1.50 1.51 1.52 2.00 2.10 2.50 2.51 2.52 3.00 3.10 4.00


Keywords          : kbMFC KbUIDesign kbVC 
Version           : WINDOWS:1.00,1.50,1.51,1.52; winnt:1.00,2.00
Platform          : WINDOWS winnt 
Issue type        : kbinfo 

Last Reviewed: August 3, 1999