Using Shortcut Keys for Property Pages

Its unfortunate that the tab control or the property sheet do not support the shortcut keys. It's fortunate, however, that it is so easy to implement.

Step 1: Assign shortcut keys to property pages

Open up each of the property page resource in the resource editor and update the caption by adding an ampersand before the character that is to be the shortcut key. The shortcut key will appear underlined in the property sheet tab.

Step 2: Override OnPreTranslateMessage

Override the OnPreTranslateMessage() function and add the code shown below. The logic used is fairly simple. If a system key ( an alt key combination ) is pressed, all the tab items are searched for this key. If one is found then the associated page is activated. Note that the call to the base class version of this function is at the bottom. Therefore, if a page and a control in the active page have the same shortcut key, the page wins.
BOOL CModalShapePropSheet::PreTranslateMessage(MSG* pMsg)
{
	if( pMsg->message == WM_SYSKEYDOWN && pMsg->wParam > 32 )
	{
		CTabCtrl *pTab = GetTabControl();
		int n = pTab->GetItemCount();

		TCHAR buf[80], shortcut[3];
		TC_ITEM tcItem;
		tcItem.mask = TCIF_TEXT;
		tcItem.pszText = buf;
		shortcut[0] = _T('&');
		shortcut[2] = _T('\0');
		for( int i = 0; i < n; i++ )
		{
			tcItem.cchTextMax = 79;
			pTab->GetItem( i, &tcItem );
			shortcut[1] = (TCHAR) pMsg->wParam;
			if( _tcsstr( buf, shortcut ) )
			{
				SetActivePage( i );
				return TRUE;
			}
		}
	}
	return CPropertySheet::PreTranslateMessage(pMsg);
}



Comments

  • lower case shortcuts

    Posted by Legacy on 12/07/1999 12:00am

    Originally posted by: Rolf Behrens

    thanks for this routine, but you forgot the lowercase shortcuts
    
    I just add
    ...
    shortcut[1] = tolower(shortcut[1]);
    if( _tcsstr( buf, shortcut ) )
    {
    SetActivePage( i );
    return TRUE;
    }
    ...

    then it works with lowercase as well.

    CU Rolf

    Reply
  • Help on PropertySheet.

    Posted by Legacy on 10/18/1999 12:00am

    Originally posted by: pabitra kumar dash

    Hi,

    I created a propertysheet in which I am able to add
    two property pages. When a third property page added into
    it, my application behaves abnormally. Can I know what will
    be the problem in it?

    Please help.

    Regards,
    pabitra

    Reply
  • How do I add an index to my property page

    Posted by Legacy on 05/13/1999 12:00am

    Originally posted by: dominic

    I'm just a beginner so hopefully someone can help me

    I would like my tools button to display the property page when it's press.
    I have attached a variable=page number/index to that button and if it's press,
    the function SetActivePage(index) will execute. Now I don't know how to add an index to my property page. Can anyone help?

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • There has been growing buzz about DevOps. DevOps is a methodology that unites the often separate functions of software development (Dev) and production and operations (Ops) into a single, integrated, and continuous process. DevOps is about breaking down the barriers between Dev and Ops. It leverages people, processes, and technology to stimulate collaboration and innovation across the entire software development and release process. Dev and Ops should always be part of an integrated process, but that's not …

  • Live Event Date: May 6, 2015 @ 1:00 p.m. ET / 10:00 a.m. PT Where are you in your plans to adopt Disaster Recovery-as-a-Service? Are you just getting started? Fighting an uphill battle with management? At Cisco, Zerto and iland, we've seen it all – from the early adopters who excitedly rushed to implement DRaaS with us nine years ago to the IT folks dragging their business leaders into the future. With our years of experience, we've learned there are six types of DRaaS leaders – but which type …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date