PRB: CToolBarCtrl::GetToolTips() May Return NULL for a ToolBar (151894)



The information in this article applies to:

  • The Microsoft Foundation Classes (MFC), when used with:
    • Microsoft Visual C++, 32-bit Editions 4.0
    • Microsoft Visual C++, 32-bit Editions 4.1

This article was previously published under Q151894

SYMPTOMS

Accessing the CToolTipCtrl for a CToolBar with CBRS_TOOLTIPS style, using GetToolBarCtrl() and subsequently using that pointer to call GetToolTips(), returns a NULL value.

CAUSE

GetToolTips() returns the pointer to a CToolTipCtrl associated specifically with the CToolBar. The CToolTipCtrl created for a CToolBar by setting the CBRS_TOOLTIPS style is not specific to the CToolBar, but rather, is MFC's CToolTipCtrl common to the entire application.

RESOLUTION

The common CToolTipCtrl is kept as a part of the MFC thread state information. To access the MFC's common CToolTipCtrl, access m_pToolTip public member of the current thread state:
   _AFX_THREAD_STATE* pThreadState = AfxGetThreadState();
    CToolTipCtrl* pToolTip = pThreadState->m_pToolTip;
				

STATUS

This behavior is by design.

MORE INFORMATION

In order to provide ToolTip support for a CToolBar, the CBRS_TOOLTIPS style has to be set during creation or by using CControlBar::SetBarStyle(). This style results in the ToolBar using MFC's thread specific common CToolTipCtrl rather than a unique one for the ToolBar. Since the ToolTip is not specific to the ToolBar, GetToolTips() returns NULL.

Note that a CToolTipCtrl specific to a CToolBar can be created by overriding the CToolBar::PreCreateWindow() and setting the TBSTYLE_TOOLTIPS. In this case, the return value of GetToolTips() will be valid.

REFERENCES

For additional information, please see the following article in the Microsoft Knowledge Base:

151162 PRB: CToolBarCtrl Styles Fail with CToolBar


Modification Type:MajorLast Reviewed:10/24/2003
Keywords:kbMFCCtrlBar kbprb kbToolbar kbToolTip KB151894