zoukankan      html  css  js  c++  java
  • 添加鼠标悬浮在控件上的提示信息 很齐全各种方法 MFC ToolTipCtl

    摘自网络:

    MFC 中 Tooltip 实现的几种方式

    方法一: 利用CWnd本身自身支持的tooptip来实现,这种方法适用给控件增加tooltip,非常方便和简单方法如下: 1、在窗口中增加消息映射ON_NOTIFY_EX(TTN_NEEDTEXT, 0, SetTipText) SetTipText是个回调函数,名字叫什么无所谓,符合原型就行了,原型下面会说。    2、EnableToolTips(TRUE),使用这个方法调用这个函数是必不可少的.建议在CDialog::OnInitDialog调用。

    3、在窗口中增加一个函数用于动态提供显示内容,其原型为 BOOL SetTipText(UINT id, NMHDR *pTTTStruct, LRESULT *pResult),下面的代码可以根据传入的参数判定应该显示的内容。   BOOL CWndYour::SetTipText(UINT id, NMHDR *pTTTStruct, LRESULT *pResult)   {    TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;            UINT nID = pTTTStruct->idFrom;   //得到相应窗口ID,有可能是HWND      //表明nID是否为HWND  if (pTTT->uFlags & TTF_IDISHWND)    {   //从HWND得到ID值,当然你也可以通过HWND值来判断   nID = ::GetDlgCtrlID((HWND)nID);   if (NULL == nID)    return FALSE;

      switch(nID)   {   case(IDC_YOUR_CONTROL1)                      strcpy(pTTT->lpszText, your_string1);        break;     case(IDC_YOUR_CONTROL2)      //设置相应的显示字串      break;     default:    break;   }

      return TRUE;  }    return FALSE;   }  

    4、很重要的一点,要显示的控件必须设置notify属性,否则收不到notify消息,自然也就显示不了tooltip。

    方法二: 使用MFC中封装好的CToolTipCtrl类,步骤如下: 1、定义全局变量 CToolTipCtrl  m_tooltip和CWnd* pwnd,pwnd用来指定要显示控件的指针 2、在窗体的OnInitDialog()中或OnShowWindow()中创建m_tooltip。

     //创建m_tooltip  m_tooltip.Create(pwnd);

     //将CToolTipCtrl与相应的控件对应起来  m_tooltip.AddTool(pwnd, TTS_ALWAYSTIP);

     //设定文字的颜色  m_tooltipSetTipTextColor(RGB(0,0,255));    //设定提示文字在控件上停留的时间  m_tooltip.SetDelayTime(150);             

    3、重载PreTranslateMessage(MSG* pMsg)函数,增加如下代码:  if(m_tooltip.m_hWnd!=NULL)    m_tooltip.RelayEvent(pMsg);

    4、捕获主窗口的WM_MOUSEMOVE消息,在OnMouseMove(UINT nFlags, CPoint point)函数中增加如下代码:

     //鼠标在相应的控件上移动时显示提示文字  m_tooltip.UpdateTipText("怎么样",pwnd);

    5、说明 其实上面的第四步可以不要,就是在AddTool时,就可以将它的第二个参数就设置为提示文字,至于风格可以在Create的时候设置。

    方法三: 自己封装SDK中的这个控件,难度是大点,但是可控性和适用性都可以大大提高。

    e.g.

    // 常量定义 // tooltip #define TTS_BALLOON  0x40 #define TTS_CLOSE  0x80 #define TTS_NOFADE  0x20

     m_tooltip.Create(this, TTS_BALLOON | TTS_ALWAYSTIP | TTS_CLOSE | TTS_NOFADE);  m_tooltip.Activate(TRUE);  m_tooltip.AddTool(this, DEFINE_INFO_FLOATTIP);  m_tooltip.SetTipTextColor(RGB(0, 0, 255));  m_tooltip.SetTipBkColor(RGB(255,0,255));  m_tooltip.SetDelayTime(150);

    假设在CDlg**中有一控件IDC_EDIT_A,想要鼠标指向该控件时提示,步骤如下:
    1、CDlg**头文件中声明成员变量 CToolTipCtrl m_tooltip;
    2、CDlg***::OnInitDialog() 中创建并设置参数 m_tooltip.Create(this);
    //CToolTipCtrl与控件关联 m_tooltip.AddTool(GetDlgItem(IDC_EDIT_A), TTS_ALWAYSTIP);//当鼠标指向IDC_EDIT_A控件显示提示 //若如是句柄可以用FromHandle(hwnd)替换 GetDlgItem(IDC_EDIT_A)
    //文字颜色 m_tooltip.SetTipTextColor(RGB(0,0,255));
    //鼠标指向多久后显示提示,毫秒 m_tooltip.SetDelayTime(TTDT_INITIAL, 10);
    //鼠标保持指向,提示显示多久,毫秒 m_tooltip.SetDelayTime(TTDT_AUTOPOP, 30000);
    //设定显示宽度,超长内容自动换行 m_tooltip.SetMaxTipWidth(200);
    3、重写PreTranslateMessage,增加以下内容: if(m_tooltip.m_hWnd!=NULL) { m_tooltip.RelayEvent(pMsg); }
    4、在需要的地方动态更新tip内容 m_tooltip.UpdateTipText(str, FromHandle(hwnd));

    http://blog.csdn.net/xgx198831/article/details/6719459

    MFC添加鼠标移动到控件上时的提示信息

    首先在对话框的头文件中加入初始化语句:private:下,加入:CToolTipCtrl     m_Mytip; 然后在初始化对话框函数(OnInitDialog)中加入: m_Mytip.Create(this);  m_Mytip.AddTool( GetDlgItem(IDC_LIST), "你想要添加的提示信息" ); //IDC_BUTTON为你要添加提示信息的LISTBOX的ID m_Mytip.SetDelayTime(200); //设置延迟 m_Mytip.SetTipTextColor( RGB(0,0,255) ); //设置提示文本的颜色 m_Mytip.SetTipBkColor( RGB(255,255,255)); //设置提示框的背景颜色 m_Mytip.Activate(TRUE); //设置是否启用提示

    然后在类向导中添加PreTranslateMessage消息响应函数 BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) {    if(pMsg->message==WM_MOUSEMOVE /*&& pMsg->hwnd == GetDlgItem(IDC_BUTTON1)->GetSafeHwnd())*/)    m_Mytip.RelayEvent(pMsg); return CDialog::PreTranslateMessage(pMsg); } 注:如果要为多个按钮添加功能提示只需在 m_Mytip.AddTool( GetDlgItem(IDC_LIST), "你想要添加的提示信息" ); 的下面再加上类似语句,如 m_Mytip.AddTool( GetDlgItem(IDC_LIST1), "你想要添加的提示信息1" ); m_Mytip.AddTool( GetDlgItem(IDC_LIST2), "你想要添加的提示信息2" );

    分享知识是一种快乐也是一种进步========转载请注明出处===========
  • 相关阅读:
    IntelliJ IDEA教程之如何clean或者install Maven项目
    mysql 导出表,导出数据 命令
    import require
    https确实加密了。 抓包是一个中间人攻击过程
    密码学部分算法
    账号密码加密的方案
    查看git提交细节
    使用源安装java JDK
    updated stream stash changes
    Hibernate与Jpa的关系
  • 原文地址:https://www.cnblogs.com/haoyuanyuan/p/2879822.html
Copyright © 2011-2022 走看看