Tooltips w/out controls in a CScrollview?
Deepak Saxena -- Deepak_Saxena@ccm.ch.intel.com Wednesday, November 20, 1996 Environment: VC++ 4.2-flat, NT 3.51 I have a scrollview that displays several rectangular objects I want a tooltip to be displayed when the user pauses over the rectangular area of each object. Each object is not a CWnd...it's just a rectangle. In ondraw, I loop through all my objects and add them to the CToolTip ctrl that I have associated with this window. Unfortunatly, this does not work. Here's what I have done: o In CMyView::OnInitialUpdate(), I call EnableToolTips(TRUE); o In CMyView::OnCreate, I call m_ctrlMyTT.Create(this) o In CMyView::OnDraw(), I first remove all the old tools from the ctrl and insert new tools as objects may have changed position. o After inserting the new tools, I call m_ctrlTT.Activate(TRUE); I traced through the complete PreTranslageMessage() cycle that calls CWnd::FilterToolTipMessage(), and the problem is that the tooltipctrl that MFC gets a hold of in FilterToolTipMessage() is not the same as CMyView::m_ctrlTT. I made sure of this by comparing the hWnd's of the two objects. So instead of going through the MFC tooltip message routing, I tried not calling EnableToolTip() and then overiding CMyView::PreTranslageMessage() and routing the appropriate message to m_ctrlTT: BOOL CIOSimView::PreTranslateMessage(MSG* pMsg) { if( pMsg->message >= WM_MOUSEFIRST && pMsg->message <= WM_MOUSELAST ) { m_ctrlToolTip.RelayEvent( pMsg ); } return CScrollView::PreTranslateMessage(pMsg); } But...this doesn't make my tooltips appear either. So...how exactly does one do this? -- Deepak Saxena@ccm.ch.intel.com http://www.cernan.ecn.purdue.edu/~deepak Work: (602)554-1304, Home:(602)917-5183 I do not speak for Intel Corporation
Mark Rudick/CAM/Lotus -- Mark_Rudick/CAM/Lotus.LOTUS@crd.lotus.com Sunday, November 24, 1996 Deepak, I just recently had problems with ToolTips myself. There seems to be a big problem using the conventional way of implementing ToolTips. The CToolTipCtrl is a child of your main CWnd, as are the controls over which you'd like to display the ToolTip. Now, there's a bug where the main CWnd receives a message from its child control, but that message is not passed along to the other child... your CToolTipCtrl. You can try capturing the message in a PreTranslateMessage() method and relay it yourself to the ToolTip control, but that can get a bit confusing. I recommend you have a look at Jeff Prosise's book, Programming Windows 95 with MFC. Check out CToolTipCtrl in the Advanced Topics chapter. Here, he explains the bug and gives you a great workaround. It did the trick for me! Hope this helps. Mark Rudick Software Engineer Lotus Development Corp. Deepak_Saxena@ccm.ch.intel.com (Deepak Saxena) 11/20/96 03:04 PM To: mfc-l@netcom.com @ INTERNET cc: (bcc: Mark Rudick/CAM/Lotus) Subject: Tooltips w/out controls in a CScrollview? Environment: VC++ 4.2-flat, NT 3.51 I have a scrollview that displays several rectangular objects I want a tooltip to be displayed when the user pauses over the rectangular area of each object. Each object is not a CWnd...it's just a rectangle. In ondraw, I loop through all my objects and add them to the CToolTip ctrl that I have associated with this window. Unfortunatly, this does not work. Here's what I have done: o In CMyView::OnInitialUpdate(), I call EnableToolTips(TRUE); o In CMyView::OnCreate, I call m_ctrlMyTT.Create(this) o In CMyView::OnDraw(), I first remove all the old tools from the ctrl and insert new tools as objects may have changed position. o After inserting the new tools, I call m_ctrlTT.Activate(TRUE); I traced through the complete PreTranslageMessage() cycle that calls CWnd::FilterToolTipMessage(), and the problem is that the tooltipctrl that MFC gets a hold of in FilterToolTipMessage() is not the same as CMyView::m_ctrlTT. I made sure of this by comparing the hWnd's of the two objects. So instead of going through the MFC tooltip message routing, I tried not calling EnableToolTip() and then overiding CMyView::PreTranslageMessage() and routing the appropriate message to m_ctrlTT: BOOL CIOSimView::PreTranslateMessage(MSG* pMsg) { if( pMsg->message >= WM_MOUSEFIRST && pMsg->message <= WM_MOUSELAST ) { m_ctrlToolTip.RelayEvent( pMsg ); } return CScrollView::PreTranslateMessage(pMsg); } But...this doesn't make my tooltips appear either. So...how exactly does one do this? -- Deepak Saxena@ccm.ch.intel.com http://www.cernan.ecn.purdue.edu/~deepak Work: (602)554-1304, Home:(602)917-5183 I do not speak for Intel Corporation
| Вернуться в корень Архива |