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('');
		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);
}

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read