How to Add Tooltips for Controls to an MFC Property Page
Roger Onslow -- Roger_Onslow@compsys.com.au Thursday, June 06, 1996Environment: VC++ 4.0 / Win 95 How to Add Tooltips for Controls to an MFC Property Page PSS ID Number: Article last modified on 5-Jun-1996 4.00 4.10 ----------------------------------------------------------------------------- The information in this article applies to: - The Microsoft Foundation Classes (MFC) included with: Microsoft Visual C++, 32-bit Edition, versions 4.0 and later ----------------------------------------------------------------------------- SUMMARY ======= Article Q140595 describes how to enable tool tips for child controls of a window (including a CDialog). That article explains how you must call the CWnd::EnableToolTips function to enable tool tips, and provide a handler for the TTN_NEEDTEXT tool tip notification. Although the technique described works for dialogs and views, it does not work for dialogs derived from CPropertyPage. You need to override the default CPropertyPage::PreTranslateMessage in order for the TTN_NEEDTEXT notifications to be generated. MORE INFORMATION ================ The CPropertyPage::PreTranslateMessage function always returns FALSE so that the property sheet will get to handle the message (for Ctrl+TAB etc). However this bypasses the automatic CWnd handling of tool tips. To work around this, only call the CPropertyPage::PreTranslateMessage function for the Ctrl+TAB etc keys. All other messages can be processed by the CDialog::PreTranslateMessage function. Additional Steps to Enable Tool Tips for Child Controls in Property Pages ------------------------------------------------------------------------- 1) Perform the steps outlined in Q140595. 2) Use the Class Wizard to provide a PreTranslateMessage function, and write an implementation that correctly dispatches to either CPropertyPage or CDialog as appropriate. Sample Code ----------- BOOL CMyPropertyPage::PreTranslateMessage(MSG* pMsg) { // allow sheet to translate Ctrl+Tab, Shift+Ctrl+Tab, // Ctrl+PageUp, and Ctrl+PageDown if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 && (pMsg->wParam == VK_TAB || pMsg->wParam == VK_PRIOR || pMsg->wParam == VK_NEXT )) { return CPropertyPage::PreTranslateMessage(pMsg); } return CDialog::PreTranslateMessage(pMsg); } ============================================================================= Roger Onslow, RogerO@compsys.com.au =============================================================================
Dean McCrory -- deanm@microsoft.com Saturday, June 08, 1996 Probably the better fix is to call CWnd::PreTranslateMessage from CPropertyPage::PreTranslateMessage. >BOOL CMyPropertyPage::PreTranslateMessage(MSG* pMsg) >{ VERIFY(!CWnd::PreTranslateMessage(pMsg)); return FALSE; // CPropertySheet handles PreTranslateMessage in this case >} Later, // Dean >---------- >From: Roger Onslow/Newcastle/Computer Systems >Australia/AU[SMTP:Roger_Onslow@compsys.com.au] >Sent: Thursday, June 06, 1996 4:56 AM >To: mfc-l; scot_wingo >Cc: Dave Blatt/Newcastle/Computer Systems Australia/AU >Subject: How to Add Tooltips for Controls to an MFC Property Page > >>Environment: VC++ 4.0 / Win 95 > >How to Add Tooltips for Controls to an MFC Property Page > >PSS ID Number: > >Article last modified on 5-Jun-1996 > >4.00 4.10 > >------------------------------------------------------------------------ >----- >The information in this article applies to: > - The Microsoft Foundation Classes (MFC) included with: > Microsoft Visual C++, 32-bit Edition, versions 4.0 and later >------------------------------------------------------------------------ >----- > >SUMMARY >======= >Article Q140595 describes how to enable tool tips for child controls of >a >window (including a CDialog). That article explains how you must call >the >CWnd::EnableToolTips function to enable tool tips, and provide a >handler for >the TTN_NEEDTEXT tool tip notification. > >Although the technique described works for dialogs and views, it does >not >work for dialogs derived from CPropertyPage. You need to override the >default CPropertyPage::PreTranslateMessage in order for the >TTN_NEEDTEXT >notifications to be generated. > >MORE INFORMATION >================ > >The CPropertyPage::PreTranslateMessage function always returns FALSE so >that >the property sheet will get to handle the message (for Ctrl+TAB etc). >However this bypasses the automatic CWnd handling of tool tips. > >To work around this, only call the CPropertyPage::PreTranslateMessage >function for the Ctrl+TAB etc keys. All other messages can be >processed by >the CDialog::PreTranslateMessage function. > >Additional Steps to Enable Tool Tips for Child Controls in Property >Pages >------------------------------------------------------------------------ >- > >1) Perform the steps outlined in Q140595. > >2) Use the Class Wizard to provide a PreTranslateMessage function, and >write >an implementation that correctly dispatches to either CPropertyPage or >CDialog as appropriate. > >Sample Code >----------- > >BOOL CMyPropertyPage::PreTranslateMessage(MSG* pMsg) >{ > // allow sheet to translate Ctrl+Tab, Shift+Ctrl+Tab, > // Ctrl+PageUp, and Ctrl+PageDown > if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 && > (pMsg->wParam == VK_TAB || > pMsg->wParam == VK_PRIOR || > pMsg->wParam == VK_NEXT > )) > { > return CPropertyPage::PreTranslateMessage(pMsg); > } > return CDialog::PreTranslateMessage(pMsg); >} > >======================================================================== >===== >Roger Onslow, RogerO@compsys.com.au >======================================================================== >===== > > >
Roger Onslow -- Roger_Onslow@compsys.com.au Tuesday, June 11, 1996 >Probably the better fix is to call CWnd::PreTranslateMessage from >CPropertyPage::PreTranslateMessage. > >>BOOL CMyPropertyPage::PreTranslateMessage(MSG* pMsg) >>{ >> VERIFY(!CWnd::PreTranslateMessage(pMsg)); >> return FALSE; // CPropertySheet handles PreTranslateMessage in this case >>} NO... We tried that, and tooltip DID appear, BUT.... Behaviour of Ctrl+TAB etc was different from normal property sheets. The focus went from Tab to Tab ok... BUT THEN to OK button etc. (ie treated Ctrl+TAB as moving focus amongst all controls on the property sheet, not just between pages !!) The solution posted gave consistent handling of Ctrl+TAB. (ie: CPropertyPage handles Ctrl+TAB, and CWnd everything else) Roger Onslow
| Вернуться в корень Архива |