我有个类CMyToolTipCtrl,继承自CToolTipCtrl,//
//功能:为窗口中的指定矩形区域添加Tooltip提示字串
//
BOOL CMyToolTipCtrl::AddRectTool(CWnd* pWnd, LPCTSTR lpszText, LPCRECT lpRect, UINT nIDTool)
{
TOOLINFO ti; ti.cbSize = sizeof(TOOLINFO);
ti.hinst = AfxGetInstanceHandle();
ti.hwnd = pWnd->GetSafeHwnd();
ti.lpszText = (LPTSTR)lpszText;
ti.uFlags = TTF_SUBCLASS;
ti.uId = nIDTool;
::CopyRect(&ti.rect, lpRect); return (BOOL)SendMessage(TTM_ADDTOOL, 0, (LPARAM)&ti);
}详细大家这个类都见到过吧,
我想问的是,最后一个参数nIDTool没用吗?也就是TOOLINFO 结构中的uId 字段没用吗?
我尝试为窗口中多个不同的矩形区域添加字串,nIDTool指定相同的值(如0)效果都能实现,都满足要求,那为每个提示字串定义唯一的ID还有什么用,在什么情况下会用到uId 

解决方案 »

  1.   

    nIDTool是你button 的id.你用pWnd也可以了
      

  2.   

    谢,vc_love2010:可是我现在是TTF_SUBCLASS-----------------------------------为什么我发了一个帖子,却生成了两个?
    http://topic.csdn.net/u/20100415/17/3bf6d8f8-9cca-45ff-84cf-3e17d8c1f665.html
    http://topic.csdn.net/u/20100415/16/85429edd-c253-4dab-994a-bef91a846481.html
    大家请看下面的这个
      

  3.   

    MSDN:uId
    Application-defined identifier of the tool. If uFlags includes the TTF_IDISHWND flag, uId must specify the window handle to the tool. 
      

  4.   

    如果TTF_IDISHWND那么nID就是hwnd,否则是Tool号,add时nId不能为0
      

  5.   

    可是我为nIDTool指定相同的值0效果都有啊,
      

  6.   

    MSDN上说,
    uId
    Application-defined identifier of the tool. If uFlags includes the TTF_IDISHWND flag, uId must specify the window handle to the tool.  那是不是意味着当uFlags 字段不包含TTF_IDISHWND值,uId就可以忽略?
    或者理解为未定义,未使用。
      

  7.   

    If uFlags includes the TTF_IDISHWND flag, uId must specify the window handle to the tool.就是说有了TTF_IDISHWND那么uId必须是窗口handle、
    我估计你看到的tt不是你编程的tt,现在几乎每个控件都有自己的tt 
      

  8.   

    我准备结贴了,因为我发现在VS2008下与VC6.0下完全的不是一码事,2008实在受不了了,有机会在用,现列举2008下我这一星期碰的钉子,:
    1.Resource.h中定义资源ID时,这样可以:
    //按钮的位图资源ID
    #define IDB_BITMAP_TITLEBTNBASE         200
    #define IDB_BITMAP_TITLEBTNCLOSE        201这样竟然不行!:
    //按钮的位图资源ID
    #define IDB_BITMAP_TITLEBTNBASE         200
    #define IDB_BITMAP_TITLEBTNCLOSE        IDB_BITMAP_TITLEBTNBASE + 1 //编译出错 
    [或 #define IDB_BITMAP_TITLEBTNCLOSE    IDB_BITMAP_TITLEBTNBASE+1 //编译可过,运行出错]
    但是上述写法我一直在VC6下用着, 2.我自绘了窗口标题栏的最小化,关闭等按钮,其实就是贴上了几张位图,当我将鼠标移到图片上时,响应的是OnMouseMove消息,而不是OnNcMouseMove消息!按下,抬起同样由OnLButtonDown,Up响应,而不是通常的NC消息!3.我为最小化,关闭等位图按钮添加了Tooltip提示信息,可以显示出来,但是,当窗口被其他窗口当掉时(失去焦点),再将鼠标移上去,提示信息没了?!可是我电脑上的任何窗口失掉焦点时是可以显示Tooltip的!4.无论我怎么尝试,最小化,关闭等位图按钮就是不响应系统消息(我不能发送WM_SYSCOMMAND消息),而自定义消息和非系统消息都可以发!5.我试着为窗口添加了最上层显示(topmost),可当添加后就再也没去掉:
    void COwnerDrawCaptionWnd::ToggleTopMost()
    {
    m_bTopMost = m_bTopMost ? false : true;LONG lEXStyle = GetWindowLong(m_hWnd, GWL_EXSTYLE);
    if(m_bTopMost)
        this->SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOSIZE|SWP_NOMOVE
            |SWP_NOACTIVATE );
        else
        {    
            if((lEXStyle & WS_EX_TOPMOST) == WS_EX_TOPMOST)
                this->SetWindowPos(GetParent() , 0, 0, 0, 0, SWP_NOSIZE |SWP_NOMOVE | SWP_NOACTIVATE | SWP_NOOWNERZORDER);  
        }
    }6.最严重的是,我一天中调试这么多次该工程,总能看到3,4次莫名崩掉!!我想了想,算了吧还是,往vc6里搬吧,只不过是让2008搞坏了我一星期的心情~