MFC 中 悬浮提示Tooltip 多行显示(可以超过80字符限制)

方法一:
利用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)   

 ::SendMessage(pTTT->hdr.hwndFrom,   TTM_SETMAXTIPWIDTH,   0,   100);           //实现多行提示显示      
   //strcpy(pTTT->lpszText, your_string1);   

  strcpy(sztext, (LPCTSTR)text); //sztext为全局变量,解决显示超过80个字符后程序崩溃
  pTTT->lpszText = sztext; 
 
   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);

原文转自:http://blog.csdn.net/magictong/article/details/3539086  感激不尽.....



为窗口或其中的控件添加提示框,可以使用MFC的类CToolTipCtrl,使用方法如下

1.在窗口的类定义中添加变量说明:
class CTooltipTestDlg : public CDialog{

public:
CToolTipCtrl m_tt;


}

2.在对话框的OnInitDialog()函数中添加如下代码

    EnableToolTips(TRUE);
    m_tt.Create(this);
    m_tt.Activate(TRUE);

    CWnd* pW=GetDlgItem(IDC_CHECK1);//得到控件的指针
    m_tt.AddTool(pW,L"Check1lakjsfasfdasfd");//为此控件添加tip

3.重载父窗口的 BOOL PreTranslateMessage(MSG* pMsg) ,在函数中调用 m_tt.RelayEvent(pMsg)

BOOL CTooltipTestDlg::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class

    if (NULL != m_tt.GetSafeHwnd())
    {
        m_tt.RelayEvent(pMsg);
    }


    return CDialog::PreTranslateMessage(pMsg);
}

这样就完成了为控件添加Tip。


如果想修改已添加的tip的内容,可以使用UpdateTipText函数,如下

CWnd* pW=GetDlgItem(IDC_CHECK1);//得到已添加tip控件
m_tt.UpdateTipText(L"asdflasdf",pW);//更新tip的内容

其他控制函数具体可查MSDN的CToolTipCtrl类。


对于静态文本框,要把Notify的属性设为TRUE;而如果静态文本控件是动态创建的,必须给窗口风格添加SS_NOTIFY,如

m_StaticText.Create(_T("my static"), WS_CHILD|WS_VISIBLE|WS_BORDER|SS_NOTIFY, 
        CRect(
10,10,150,50),this);

具体可参考下面的链接。

 

参考:

CToolTipCtrl使用详细解说http://hi.baidu.com/fateyeah/blog/item/fc7c07b37ab250a7d9335aa7.html

MFC中给静态文本加上提示的做法http://www.cnblogs.com/clever101/archive/2010/05/01/1725578.html

另外,如果想得到功能更强大的tip提示框,可以使用一个白俄罗斯人写的定制的tooltiphttp://www.codeproject.com/KB/miscctrl/pptooltip.aspx


在 Echarts 地图控件tooltip提示框)是一种常见的操作方式,可以通过 tooltip 来展示地图数据的详细信息。但是默认情况下,tooltip 只能显示一行文字,如果我们需要在 tooltip 显示多行文字该怎么做呢? 首先,我们可以尝试在 tooltip 使用富文本支持的标签来进行多行文字的展示,比如使用 \<br> 标签来进行换行。但是这种方式对于一些特殊的场景,比如数据变化剧烈的地图,会导致 tooltip 弹出来的内容过长,导致样式混乱、内容不清晰等问题。 因此,更好的方式是在 Echarts 进行配置,设置 tooltip 的宽度和高度,以及内容的字体和字号等属性。这样无论数据变化多少,提示框都可以按照我们的设置进行展示,保证内容的展示效果。 具体操作步骤如下: 1.在 Echarts 的 option 添加 tooltip 的配置项。 2.在 tooltip 的配置项设置 tooltip 的宽度和高度,以及内容的字体和字号等属性。 3.在 tooltip 的配置项使用 formatter 回调函数,并将展示内容按照需要进行拼接和格式化,保证多行文字的展示效果正常。 4.最后,将配置后的 option 对象传递到 Echarts 的实例进行展示,即可实现多行文字的 tooltip 弹出效果。 总之,在使用 Echarts 地图控件的过程,如果需要多行文字的展示效果,我们可以通过设置 tooltip 的属性和使用 formatter 回调函数进行实现,保证展示效果的清晰和美观。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值