HOWTO: Using Accelerator Keys with Modal Dialog Box Main Window
Load the TRACER project into Visual C++.
For all versions of 16-bit Visual C++, and Visual C++ 32-bit Editions through version 2.2, start App Studio.
For Visual C++ 4.0 and later, select the Resource View in the Project Workspace window.
Edit the dialog box resource and specify the "thin" border style. This step is required for a dialog box that contains a menu.
Create a new menu resource that contains a top level entry "&File" and a menu item "&Exit\tCTRL+E"(CTRL+X is usually associated with cutting text, so CTRL+E was used instead).
Associate the menu with the dialog box by entering the menu ID in the dialog resource properties edit control.
Select the "&Exit\tCTRL+E" menu item and click the ClassWizard button on the toolbar.
In the Add Class dialog box, choose Select Class. Then choose CPromptDlg and click OK. Visual C++ 4.0 recognizes that the menu resource is not associated with any object and prompts you to associate it with the CPromptDlg class.
In the ClassWizard dialog box, select the menu ID associated with the Exit menu, ID_FILE_EXIT, and the COMMAND message. Then choose Add Function.
The Add Member Function dialog box proposes a name for the function which you can edit if desired. Click OK.
Click Edit Code. Insert the following line into the function:
PostMessage(WM_COMMAND, IDOK, 0L);
This gives the same effect as clicking OK when the user chooses Exit from the File menu. Clicking OK closes TRACER.
Create a new accelerator resource and associate the CTRL+E key combination with ID_FILE_EXIT.
Save the resources and close App Studio.
Edit the TRACER.CPP file to declare the following variables after the #include statements:
HWND ghDlg; // Handle to main dialog box
HACCEL ghAccelTable; // Handle to accelerator table
In ClassWizard, choose the CPromptDlg and the WM_INITDIALOG message and add a function. With Visual C++ 4.0, choose the CPromptDlg class, the CPromptDlg Object ID, the WM_INITDIALOG message, and Add Function. Note that there are now two OnInitDialog() functions, one for Macintosh, surrounded by #ifdef _MAC/#endif directives, and the one just added.
Edit the function added above to include the following line of code:
ghDlg = m_hWnd;
In Visual C++ 4.0, be sure to edit the newly added function, not the existing, Macintosh-specific one:
ghDlg = m_hWnd;
Edit CTraceApp::InitInstance() in the Tracer.cpp file to add the following line immediately after the call to SetDialogBkColor() or, as in Visual C++ 4.0, after the declaration of dlg, the CPromptDlg object: