我想在CComboBox控件上用CToolTipCtrl控件显示提示信息,如何做呢?已经能够在editbox控件上使用呢?但是同样的方法用在CComboBox控件上就不行。
成员变量:
  CWnd * pSub[3];
  CToolTipCtrl m_tip[3];OnInitDialog()中:
pSub[0] = GetDlgItem(IDC_COMBO1);
m_tip[0].Create(pSub[0],TTS_ALWAYSTIP);
m_tip[0].AddTool(pSub[0]);OnMouseMove中:
m_tip[0].UpdateTipText("abcd",pSub[0]);PreTranslateMessage中:
if(m_tip[0].m_hWnd!=NULL)
m_tip[0].RelayEvent(pMsg);上叙同样的方法对editbox控件可以有效,当对CComboBox控件无效,有谁知道原因啊??????

解决方案 »

  1.   

    OnInitDialog()中:
    pSub[0] = GetDlgItem(IDC_COMBO1);
             CRect rect;
             pSub[0]->GetClientRect(rect);
    m_tip[0].Create(pSub[0],TTS_ALWAYSTIP);
    m_tip[0].AddTool(pSub[0],";adfjd",&rect);
      

  2.   

    你的写法可能不怎么好,CWnd * pSub[3];也没有初始化,肯定是warning改成:
    CToolTipCtrl m_tooltip;
    CRect rect;OnInitDialog()中:
             GetDlgItem(IDC_COMBO1)->GetClientRect(rect);OnMouseMove中:
             m_tooltip.Create(this);
    m_tooltip.Activate(true);


    m_tooltip.SetTipBkColor(RGB(0,144,18));
    m_tooltip.SetTipTextColor(RGB(255,254,255));
    m_tooltip.SetDelayTime(50);
    m_tooltip.SetDelayTime(TTDT_AUTOPOP,8000);
    m_tooltip.SetMaxTipWidth(290);

    m_tooltip.Activate(true);
    m_tooltip.Update(); m_tooltip.AddTool(GetDlgItem(IDC_RESULT),"可以关闭该对话框",&rect);PreTranslateMessage中:
    m_tooltip.RelayEvent(pMsg);
      

  3.   

    修正:
    m_tooltip.AddTool(GetDlgItem(IDC_COMBO1),"可以关闭该对话框",&rect);OnInitDialog()中:
             GetDlgItem(IDC_COMBO1)->GetClientRect(rect);//此句不再需要
      

  4.   

    不好意思,上条作费整理一下得:CToolTipCtrl m_tooltip;
    CRect rect;OnInitDialog()中:
             GetDlgItem(IDC_COMBO1)->GetClientRect(rect);//刚才多写了,需要OnMouseMove中:
             m_tooltip.Create(this);
    m_tooltip.Activate(true);


    m_tooltip.SetTipBkColor(RGB(0,144,18));
    m_tooltip.SetTipTextColor(RGB(255,254,255));
    m_tooltip.SetDelayTime(50);
    m_tooltip.SetDelayTime(TTDT_AUTOPOP,8000);
    m_tooltip.SetMaxTipWidth(290);

    m_tooltip.Activate(true);
    m_tooltip.Update(); m_tooltip.AddTool(GetDlgItem(IDC_COMBO1),"可以关闭该对话框",&rect);PreTranslateMessage中:
    m_tooltip.RelayEvent(pMsg);已经测试过,是可以的!
      

  5.   

    http://expert.csdn.net/Expert/topic/3052/3052495.xml?temp=.7287866我的方法绝对可行!而且不用你申请那么多CToolTipCtrl
    //Dlg.hCDlg : public CDialog
    {
    public:
          CToolTipCtrl *m_ptip;
    }//Dlg.cppCDlg::~Dlg()
    {
    delete m_ptip;
    m_ptip = NULL;
    }
    BOOL CDlg::OnInitDialog()
    {
    m_ptip = new CToolTipCtrl;
    if(!m_ptip->Create(this))
    {
    TRACE("Unable To create ToolTip\n");
    return TRUE;
    }
    m_ptip->AddTool( GetDlgItem(IDC_COMBO1), "提示条"); 
    m_ptip->Activate(TRUE); return TRUE; 
    }BOOL CDlg::PreTranslateMessage(MSG* pMsg)
    {
    if (m_ptip != NULL)
    m_ptip->RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg);
    }
      

  6.   

    zhucde(【風間苍月】)(MVP) :
    一下子回了这么多,谢谢了!可以用的,我还想问一下,哪个m_tooltip上的文字可以更改字体的吗????默认的函数好象没有的,要自己写的吧?怎样改呢?
      

  7.   

    这个就太复杂了,
    你得重载CToolTipCtrl类,
    有空可以研究研究
      

  8.   

    还有大家说的方法都没有错,但是好象都是鼠标放在CComboBox控件的边缘的时候才会出现提示框,
    我的CComboBox控件是可以自己写入数据的,即dropdown属性的,当我将鼠标放进CComboBox控件中的时候就没有提示框了。
    能够实现当鼠标停留在CComboBox控件中一段时间后就能够出现提示框,而不是仅仅在边缘的时候才能出现这种提示框呢??
      

  9.   

    事实上刚才看了一下,
    如果用我给你的方法的话,只要这样就行了:
    CToolTipCtrl m_tooltip;
    OnMouseMove中:
             m_tooltip.Create(this);
    m_tooltip.Activate(true);


    m_tooltip.SetTipBkColor(RGB(0,144,18));
    m_tooltip.SetTipTextColor(RGB(255,254,255));
    m_tooltip.SetDelayTime(50);
    m_tooltip.SetDelayTime(TTDT_AUTOPOP,8000);
    m_tooltip.SetMaxTipWidth(290);

    m_tooltip.Activate(true);
    m_tooltip.Update(); m_tooltip.AddTool(GetDlgItem(IDC_RESULT),"可以关闭该对话框");PreTranslateMessage中:
    m_tooltip.RelayEvent(pMsg);不需要那个rect(当然有也没有关系);
    对于你所说的这个问题,如果combox的风格是DropDown那只能在边缘才有提示.
    为什么呢?因为这个风格当你的鼠标在文本框里时就会处理另外的消息,这是combox自身所还,类似于editbox的EN_CHANGE一样,所以只能在边缘没有自带消息的地方CToolTip才有用,
    包括边框和那个下拉框.但如果设成DropList 就没有这个问题了