VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 253|回复: 1

VC++高级班之窗口篇-[9]为窗口添加信息提示功能

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-3-2 10:04:15 | 显示全部楼层 |阅读模式
------------------------------------------ Begin ----------------------------------------
①、声明 CToolTipCtrl 类型对象:
  1. CToolTipCtrl m_pToolTipCtrl;
复制代码

===================================================
②、CToolTipCtrl 的创建:
  1. if( !m_pToolTipCtrl.Create(this) ) return FALSE;
复制代码

===================================================
③、添加需要提示的控件:
  1. CString strTip = _T("C:\\Documents and Settings\\Syc\\Application Data\\Microsoft\\Internet Explorer\\Quick Launch\");
  2. m_pToolTipCtrl.AddTool(GetDlgItem(IDC_EDIT), strTip);
  3. SetDlgItemText(IDC_EDIT, strTip);
复制代码

===================================================
④、添加虚函数 PreTranslateMessage
  1. BOOL CDlgTestDlg::PreTranslateMessage(MSG* pMsg)
  2. {
  3.         if(pMsg->message == WM_LBUTTONDOWN ||
  4.                 pMsg->message == WM_LBUTTONUP ||
  5.                 pMsg->message == WM_MOUSEMOVE)
  6.                 m_pToolTipCtrl.RelayEvent(pMsg); //传递一个鼠标消息给工具提示控件处理

  7.         return CDialog::PreTranslateMessage(pMsg);
  8. }
复制代码

===================================================
⑤、为控件添加动态提示内容:
前三步不变,在调用 AddTool 增加 ToolTip 时不指定显示的字串,而是使用 LPSTR_TEXTCALLBACK 参数;
并启用目标窗口的 ToolTip 属性:EnableToolTips(TRUE);
===================================================
⑥、增加消息映射:
  1. afx_msg BOOL OnTtnNeedText(UINT id, NMHDR *pNMHDR, LRESULT *pResult);
  2. ON_NOTIFY_EX(TTN_NEEDTEXT, 0, &CDlgTestDlg::OnTtnNeedText)
复制代码

===================================================
⑦、添加 OnTtnNeedText 函数实现:
  1. BOOL CDlgTestDlg::OnTtnNeedText(UINT id, NMHDR *pNMHDR, LRESULT *pResult)
  2. {
  3.         UNREFERENCED_PARAMETER(id);

  4.         TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
  5.         UINT_PTR nID = pNMHDR->idFrom; //获得目标窗口ID,有可能是HWND
  6.         BOOL bRet = FALSE;

  7.         if (pTTT->uFlags & TTF_IDISHWND) { //表明nID是否为HWND

  8.                 bRet = TRUE;
  9.                 CString strText;
  10.                 // idFrom is actually the HWND of the tool
  11.                 nID = ::GetDlgCtrlID((HWND)nID); //从HWND得到ID值,当然你也可以通过HWND值来判断
  12.                 switch (nID)
  13.                 {
  14.                 case IDC_EDIT:
  15.                 case IDC_BTN:
  16.                         strText.Empty();
  17.                         GetDlgItemText(nID, strText);
  18.                         pTTT->lpszText = (LPTSTR)(LPCTSTR)strText;
  19.                         pTTT->hinst = AfxGetResourceHandle();
  20.                 default:break;
  21.                 }
  22.         }

  23.         *pResult = 0;

  24.         return bRet;
  25. }
复制代码

===================================================
※※※ 小作业:学会 CToolTipCtrl 类的其他成员函数的使用!
一款非常漂亮的开源 ToolTip 类:
http://www.codeproject.com/KB/miscctrl/pptooltip.aspx
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
教程介绍及详情请见:http://www.cctry.com/static/vip/index.html
VC驿站Vip会员详情请见:http://www.cctry.com/static/vip/index.html




上一篇:VC++高级班之窗口篇-[8]模拟鼠标、键盘操作
下一篇:VC++高级班之窗口篇-[10]屏幕截图功能的实现

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-10-21 21:33

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表