马上给分:ToolTips问题:如何给一个对话框程序中的一个按钮加提示?

解决方案 »

  1.   

    先占一楼吧。给个网址:
    http://www.codeproject.com/miscctrl/tooltipex.asp
      

  2.   

    CToolTipCtrl m_tooltip;
    m_tooltip.Create(...);m_tooltip.AddTool(...);bool CxxDlg::PreTranslateMessage ( MSG *pMsg)
    {
    m_tooltip.RelayEvent(pMsg);
    return CDialog::PreTranslateMessage ( pMsg );
    }
      

  3.   


    显示工具提示文本
       (1).如果是菜单或工具栏显示,则只要在ID属性的Prompt栏加"\n提示显示".
       (2).在公共控件里显示则需以下步骤:
           <1>.激活工具提示,方法在初始化里(OnInitDialog或OnInitUpdate)调用EnableToolTips();
           <2>.在头文件的类声明中的类消息声明中添加:
               afx_msg BOOL OnNeedToolTipText(UINT id, NMHDR * pTTTStruct, LRESULT * pResult);
           <3>.在源文件中BENGIN_MESSAGE_MAP与END_MESSAGE_MAP之间的类消息表定义中添加:
               ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnNeedToolTipText)
           <4>.在源文件中添加OnNeedToolTipText函数: 
           BOOL CMFCSampleDlg::OnNeedToolTipText(UINT id, NMHDR * pNMHdr, LRESULT * pResult)
      {
          TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *) pNMHdr;       if (pTTT->uFlags & TTF_IDISHWND) {
    UINT idCtrl = ::GetDlgCtrlID(HWND(pTTT->hdr.idFrom));

    pTTT->lpszText = MAKEINTRESOURCE(idCtrl);

    pTTT->hinst    = AfxGetResourceHandle(); return TRUE;
          }         return FALSE;
              }
          <5>.在资源中添加String table资源(要显示的提示信息).一般为IDS_TT_×××_×××.对应控件ID号IDC_×××_×××.
          <6>.在Resource.h文件中修改IDS_TT_×××_×××与IDC_×××_×××同一资源号。
          <7>.如果控件为静态文本(其他待研究)则需使控件有Notify属性。方法2:
    1).在对话框类的.h中加入:
    public:
    CToolTipCtrl m_tip;
    CWnd *pBtn;2).在OnInitDialog中加入:
    pBtn=GetDlgItem(IDC_BUTTON1);//获得控件句柄
    ASSERT(pBtn!=NULL);//判断句柄是否有效
    m_tip.Create(pBtn,TTS_ALWAYSTIP);//创建ToolTip
    m_tip.AddTool(pBtn);//将ToolTip与控件建立关联
    m_tip.SetTipTextColor(RGB(0,0,0));//设置字体前景色
    m_tip.SetTipBkColor(RGB(255,255,255));//设置背景色3).重载PreTranslateMessage
    BOOL CtooltipDlg::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: 在此添加专用代码和/或调用基类
    if(m_tip.m_hWnd!=NULL)
    m_tip.RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg);
    }4).重载WM_MOUSEMOVE
    void CtooltipDlg::OnMouseMove(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 m_tip.UpdateTipText("我爱你!!!",pBtn); CDialog::OnMouseMove(nFlags, point);
    }