Microsoft KB Archive/142384

= HOWTO: How to Create Accelerators for CPropertyPages =

Article ID: 142384

Article Last Modified on 11/21/2006

-

APPLIES TO

 Microsoft Foundation Class Library 4.2, when used with:  Microsoft Visual C++ 2.0 Professional Edition

 Microsoft Visual C++ 2.1

 Microsoft Visual C++ 2.2

 Microsoft Visual C++ 4.0 Standard Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q142384

<div class="summary_section">

SUMMARY
By default, the only keystrokes that will allow you to navigate between CPropertyPages in a CPropertySheet are the CTRL+TAB and SHIFT+CTRL+TAB keys. It may be desirable to have assigned keys that jump you directly to a particular page. Although the CPropertySheet object doesn't contain this functionality by default, you can add it by overriding the CPropertySheet::PreTranslateMessage function to check for the desired keystroke.

In the case of ALT key combinations, check for WM_SYSKEYDOWN messages. OnSysKeyDown cannot be used because the messages will be handled by ::IsDialogMessage before getting to the message handler.

Mnemonics are not possible in versions of the Microsoft Foundation Classes (MFC) prior to 4.0 because these earlier versions of MFC creates and drew the tabs using their own techniques. The code uses TextOut instead of DrawText to display text on a tab. TextOut doesn't interpret the mnemonic-prefix character (&) as a directive to underscore the character that follows, so you cannot use this method to designate accelerator keys.

MFC 4.0, which comes with Visual C++ 4.0, uses the Windows 95 Tab control. This control properly draws mnemonics on the tabs. All you need to do is add the mnemonic-prefix character (&) to the tab text in the caption field of your dialog resource.

<div class="moreinformation_section">

MORE INFORMATION
The following sample code shows how to override the PreTranslateMessage function to check for keystrokes. Use ClassWizard to override the PreTranslateMessage for a CPropertySheet derived class.

Sample Code
/* compile options needed: default

BOOL CMyProp::PreTranslateMessage(MSG* pMsg) {   if (pMsg->message == WM_SYSKEYDOWN) {       switch (pMsg->wParam) {           case 'S' : SetActivePage(0); break;

case 'C' : SetActivePage(1); break;

// ... case statements for each key being trapped

default : // unhandled keystroke return CPropertySheet::PreTranslateMessage(pMsg); break; }

return TRUE; // msg is processed }   return CPropertySheet::PreTranslateMessage(pMsg); }

Additional query words: 2.00 2.10 2.20 4.00

Keywords: kbcode kbhowto kbnoupdate kbuidesign kbvc410fix KB142384

-

[mailto:TECHNET@MICROSOFT.COM Send feedback to Microsoft]

© Microsoft Corporation. All rights reserved.