Article: Q156067
Product(s): Microsoft C Compiler
Version(s): winnt:4.0,4.1,4.2
Operating System(s):
Keyword(s): kbMFC kbToolTip KbUIDesign kbVC400bug kbVC410bug kbVC420bug kbVC500fix kbGrpDSMFCATL kb
Last Modified: 06-MAY-2001
-------------------------------------------------------------------------------
The information in this article applies to:
- The Microsoft Foundation Classes (MFC), used with:
- Microsoft Visual C++, 32-bit Editions, versions 4.0, 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition, version 4.2
- Microsoft Visual C++, 32-bit Professional Edition, version 4.2
-------------------------------------------------------------------------------
SYMPTOMS
========
Attempting to set the text for a tooltip in the OnToolHitTest function of a CWnd
by assigning a resource ID to the TOOLINFO struct's lpszText member causes the
following assertion to occur:
Debug assertion failed
File: dbgheap.c
Line: 1011
For example, setting the TOOLINFO struct as follows:
pTI->lpszText= MAKEINTRESOURCE(SomeId);
pTI->hinst=AfxGetInstanceHandle();
where pTI is a pointer to the TOOLINFO struct, will cause the problem. Setting
the TOOLINFO struct members in this manner allows the programmer to specify a
resource that the tooltip uses to get the text for the tooltip.
CAUSE
=====
The CWnd::FilterToolTipMessage() function contains the following code:
if (tiHit.lpszText != LPSTR_TEXTCALLBACK)
free(tiHit.lpszText);
Because lpszText is not set to LPSTR_TEXTCALLBACK, the free function is called.
However, a resource ID, rather than a string, was specified in the
OnToolHitTest() function, and therefore the assertion occurs.
RESOLUTION
==========
Instead of specifying a resource ID to load, load the resource and assign the
text to the TOOLINFO struct's lpszText member as follows:
pTI->lpszText = (char *)malloc(200, sizeof(char));
if (::LoadString(AfxGetInstanceHandle(),pTI->uId, pTI->lpszText,200)==0)
{
ASSERT(FALSE); //String resource doesn't exist
}
MFC frees the allocated buffer after it has added the tool (that is, after it has
sent the TTM_ADDTOOL message).
STATUS
======
Microsoft has confirmed this to be a bug in the Microsoft products listed at the
beginning of this article. This problem has been fixed in Visual C++ version
5.0.
Additional query words: kbVC400bug tool tip
======================================================================
Keywords : kbMFC kbToolTip KbUIDesign kbVC400bug kbVC410bug kbVC420bug kbVC500fix kbGrpDSMFCATL kbNoUpdate
Technology : kbAudDeveloper kbMFC
Version : winnt:4.0,4.1,4.2
Issue type : kbbug
Solution Type : kbfix
=============================================================================