在正常的情况下,当我们将鼠标放置到最大化最小化关闭按钮上时,会显示按钮的tip框。在我重绘标题栏的处理中,如何使用tooltip控件实现上面的功能?请大家帮忙看一下!

解决方案 »

  1.   

    我重绘的是对话框的标题栏,好像是在OnNcMouseMove消息响应函数中作相关的处理,尝试了一下没搞定,大家看看给点建议!谢谢了!
      

  2.   

    我重绘的是对话框的标题栏,好像是在OnNcMouseMove消息响应函数中作相关的处理,尝试了一下没搞定,大家看看给点建议!谢谢了!
      

  3.   

    OnNcHitTest
    返回HTMINBUTTON 表示在最小化按钮上
    返回HTMAXBUTTON 表示在最大化按钮上
    返回HTSYSMENU  表示在关闭按钮上
      

  4.   

    呵呵~我这边能判断是否在这几个按钮上,就是想知道tooltip控件具体怎么处理
      

  5.   

    HitTest在鼠标点击的时候,才能响应,而实际上,当我们不点击只是把鼠标放到最大化最小化按钮上时,就会显示tip信息!
      

  6.   


    LRESULT CColorTitleDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
    {
    // TODO: 在此添加专用代码和/或调用基类
    if (message == WM_NCHITTEST)
    {
    LRESULT lRet = CDialog::WindowProc(message, wParam, lParam); //屏蔽默认窗体的最大最小关闭按钮以及系统菜单(自绘后的最大最小关闭按钮的判断由对应的按钮窗口坐标来判断)
    if(lRet==HTZOOM || lRet == HTMINBUTTON || lRet == HTCLOSE || lRet==HTSYSMENU)
    return HTCAPTION;//视为标题栏动作。
    else
    return lRet;
    } //这里避免窗口重绘系统按钮(最大化最小化关闭)
    //这两条消息是在xp sp2后加的: WM_NCUAHDRAWCAPTION - 0x00AE, WM_NCUAHDRAWFRAME - 0x00AF
    if(message==0x00AE ||message==0x00AF)
    {
    //    AfxMessageBox(_T("aaaa"));
    return TRUE;
    } return CDialog::WindowProc(message, wParam, lParam);
    }
    因为上面的代码将系统的默认窗体的最大最小关闭按钮给屏蔽了,所以这时候要显示tip信息要人为处理的
      

  7.   

    尝试了一下,设断点跟踪,确实return了上面的三个值,逻辑是对的,但是没有tip信息显示
      

  8.   

    代码如下:LRESULT CColorTitleDlg::OnNcHitTest(CPoint point)
    {
    CRect windowrect;
    GetWindowRect(&windowrect);
    //ScreenToClient(&point);
    point.Offset(-windowrect.left, -windowrect.top); CDC* pWinDC=GetWindowDC(); CString strTipText; if(m_rectMinBtn.PtInRect(point))
    {
    return HTMINBUTTON;
    }
    else if(m_rectMaxBtn.PtInRect(point))
    {
    return HTMAXBUTTON;
    }
    else if(m_rectCloseBtn.PtInRect(point))
    {
    return HTSYSMENU;
    } return CDialog::OnNcHitTest(point);
    }
      

  9.   

    那你就创建一个tooltip啊
    SetRect,设置tooltip的跟踪区域
      

  10.   

    标题栏是通过贴bitmap实现的,包括最大化,最小化和关闭按钮,当用户鼠标点击这三个按钮图片时,判断当前鼠标点是否在最大化,最小化和关闭按钮的矩形区域内,然后执行对应ShowWindow操作。
      

  11.   

    To hurryboylqs: 谢谢你提供的思路,设置侦测矩形区域就可以实现了
    --------------------------------------------
    查阅MSDN,使用CToolTipCtrl的成员函数Create,AddTool,Activate,SetDelayTime,SetToolRect,UpdateTipText,Pop,RelayEvent就可以实现了~