[转载]VC 添加与显示工具栏提示信息

  对于包含在 CFrameWnd 派生的父窗口中的按钮或其他控件,工具提示会自动显示。这是因为 CFrameWnd 有一个用于 TTN_GETDISPINFO 通知的默认处理程序,该程序处理来自与控件关联的工具提示 (ToolTip) 控件的 TTN_NEEDTEXT 通知。
    但是,当 TTN_NEEDTEXT 通知从一个与非 CFrameWnd 窗口中的控件(如对话框或者窗体视图上的控件) 关联的工具提示 (ToolTip) 控件中发出时,该默认处理程序并不被调用。因此,有必要为 TTN_NEEDTEXT 通知消息提供一个处理函数,以便为子控件显示工具提示。

    由 CWnd::EnableToolTips 为窗口提供的默认工具提示并不包含与窗口关联的文本。为检索要显示的工具提示文本,在即将显示工具提示窗口之前,TTN_NEEDTEXT 通知被发送到工具提示(ToolTip) 控件的父窗口。
    如果这条消息的处理程序没有将一些值分配给 TOOLTIPTEXT 结构的 pszText 成员,工具将没文本可显示。

添加工具提示的具体步骤如下:
1.在类(如对话框)的.h头文件中
BOOL OnToolTipNotify(UINT id, NMHDR * pNMHDR, LRESULT * pResult);

2、在消息映射中添加如下代码:
BEGIN_MESSAGE_MAP()
/// 以下是控件响应工具信息提示响应函数,范围为“0~无穷大”
ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
/// 以下是有控件范围限制的响应工具信息提示响应函数,范围为“0~0xFFFF”
//ON_NOTIFY_EX_RANGE(TTN_NEEDTEXT, 0, 0xFFFF, OnToolTipNotify)

//没有范围限制的响应函数

ON_NOTIFY_EX(TTN_NEEDTEXT, 0, OnToolTipNotify)
END_MESSAGE_MAP()


3.在类的.cpp文件中添加函数的实现:
BOOL **::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
{
 BOOL bResult;
  TOOLTIPTEXT *pTTT;
  UINT_PTR uID;
  int iID;
  CString strToolTips;

  pTTT = (TOOLTIPTEXT *)pNMHDR;
  uID = pNMHDR->idFrom;
  bResult = TRUE;
  if (pTTT->uFlags & TTN_NEEDTEXT)
  { // uID 其实是控件在窗口中的句柄
    iID = ::GetDlgCtrlID((HWND)uID);
    strToolTips = "";
   
    ///判断控件ID
    switch (uID)
    {
    case ID1:
      strToolTips.LoadString(ID1);
      break;

    case ID2:
      strToolTips.LoadString(ID2);
      break;

    case ID3:
      strToolTips.LoadString(ID3);
      break;
    default:
      bResult = FALSE;
    }
    if(bResult)
    {
      *pResult = 0;
      _tcscpy(pTTT->lpszText, strToolTips);
      pTTT->hinst = NULL;
    }
  }

  return bResult;

}

4.启用工具提示:
/// 在类的初始化函数中添加工具栏提示的启用代码,不一定要在OnInitialDialog函数中添加
BOOL **::OnInitialDialog()
{
   CDialog::OnInitialUpdate();

   //添加工具栏提示的启用代码
   EnableToolTips(TRUE);
   return TRUE;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值