ImageVerifierCode 换一换
格式:DOC , 页数:10 ,大小:42.50KB ,
资源ID:7240744      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7240744.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(TTN-NEEDTEXT一般用法及高级用法(OnToolTip函数).doc)为本站上传会员【仙人****88】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

TTN-NEEDTEXT一般用法及高级用法(OnToolTip函数).doc

1、TTN_NEEDTEXT一般用法和高级用法 2011-10-14 13:30 28人阅读 评论(0) 收藏 举报 ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。           一般用法步骤:           添加CToolTipCtrl成员变量   m_tt。           在父窗口中调用EnableToolTips(TRUE);           在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并

2、同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string   to   display")。           重载父窗口的   BOOL   PreTranslateMessage(MSG*   pMsg)   ,在函数中调用   m_tt.RelayEvent(pMsg)。           下面假设在窗口CWndYour中使用CToolTipCtrl           在类定义中添加变量说明:      class   CWndYour:xxx      {      CToolTipCtrl   m_tt;      }   

3、   在OnCreate中添加需要显示Tip的子窗口      CWndYour::OnCreate(....)      {      EnableToolTips(TRUE);      m_tt.Create(this);      m_tt.Activate(TRUE);           CWnd*   pW=GetDlgItem(IDC_CHECK1);//得到窗口指针      m_tooltip.AddTool(pW,"Check1");//添加      ........      }      在BOOL   PreTranslateMessage

4、MSG*   pMsg)中添加代码      BOOL   CWndYour::PreTranslateMessage(MSG*   pMsg)      {      {      m_tt.RelayEvent(pMsg);      }      return   CParentClass::PreTranslateMessage(pMsg);      }           这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。           动态改变ToolTip的显示内容的方法及步骤:           上面所讲的1、2、4步骤。   

5、        在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。           在窗口中增加消息映射   ON_NOTIFY_EX(   TTN_NEEDTEXT,   0,   SetTipText   )。           在窗口中增加一个函数用于动态提供显示内容,其原型为   BOOL   SetTipText(   UINT   id,   NMHDR   *   pTTTStruct,   LRESULT   *   pResult   ),下面的代码可以根据传入的参数判定应该显示的内容。           BOOL 

6、  CWndYour::SetTipText(   UINT   id,   NMHDR   *   pTTTStruct,   LRESULT   *   pResult   )      {      TOOLTIPTEXT   *pTTT   =   (TOOLTIPTEXT   *)pTTTStruct;              UINT   nID   =pTTTStruct->idFrom;   //得到相应窗口ID,有可能是HWND      if   (pTTT->uFlags   &   TTF_IDISHWND)         //表明nID是否为HWND   

7、   {                      nID   =   ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断      switch(nID)      case(IDC_YOUR_CONTROL1)                      strcpy(pTTT->lpszText,your_string1);//设置      return   TRUE;      break;      case(IDC_YOUR_CONTROL2)      //设置相应的显示字串      return 

8、  TRUE;      break;      }      return(FALSE);      } 我用VC做TOOL TIP很多次了,但每次都要再研究一遍.虽然说学而时习,应该的,但主要还是由于自己懒.今天一定要记下来.以后再用的时候,就是参考.也请阅读此文的朋友记下来,将来查阅用. 用VC实现TOOL TIP.比较复杂,其实也简单,但MFC帮助一些窗口实现,而另一些窗口又不实现,倒搞得复杂了.最开始我用WM_MOUSEMOVE消息,然后用CToolTipCtrl::Pop,这个方法太笨.不建议用.除非需要自定义. MFC对TOOL TIP的支持不错

9、的.缺省情况CFrameWnd支持很好.然后是CWnd.主要体现在TTN_NEEDTEXT消息的支持和OnToolHitTest的支持.TTN_NEEDTEXT是在CFrameWnd中支持的.OnToolHitTest是在CWnd中支持的.有了这些支持,可以在框架窗口中很好实现ToolBar的TIP.和在一个对话框中很好实现一个控件的TOOL TIP. 举例.在对话框中实现TOOL TIP. 1.EnableToolTips( TRUE )是不可少的.建议在:CDialog::OnInitDialog 调用吧. 2.ON_NOTIFY_EX( TTN_NEEDTEXT, 0,

10、 OnNeedText ).OnNeedText实现了TOOL TIP的文字.传入的参数idFrom是控件的ID,根据控件ID得到相应的TIP文字 就这么简单的两步,就实现了对话框中的TOOL TIP.其实不只对话框,任何窗口都可以用上面的方法实现自己的子窗口控件的TIP.但前提是必须是CWnd的派生类. 这就看出了MFC对TOOL TIP的支持很厉害 但这一切都是MFC实现的我们简单描述一下它的实现原理,这样看得更清楚 CWnd本身就带有一个CToolTipCtrl对象,是放在pThreadState中的这个不说了,知道CWnd有就行了 CWnd负责创建它,然后

11、在PreTranslateMessage中调用了FilterToolTipMessage,这个函数的作用是处理WM_MOUSEMOVE,WM_NCMOUSEMOVE等消息,给CToolTipCtrl一个机会,判断鼠标是否在需要显示TIP的窗口上,如果是,就显示.FilterToolTipMessage先从CWnd::OnToolHitTest得到TOOLINFO:中的数据,比如哪个控件需要TIP等信息,然后利用ADDTOOL消息把这个需要TIP的控制加入到CToolTipCtrl的TOOL列表中,然后将鼠标移动的消息转给CToolTipCtrl处理.如果这个TIP的文字需要用回调函数来获得,就

12、用WM_NOTIFY的TTN_NEEDTEXT从CToolTipCtrl的父窗口获取.这个过程就是CToolTipCtrl判断是否要显示TIP,到获得文字并显示TIP的全过程 这样一分析,就知道原来CWnd帮助实现了控件子窗口的TIP其实就是实现了OnToolHitTest这个函数,然后在PreTranslateMessage中转发消息,帮助CToolTipCtrl正确显示TIP. 而CFrameWnd是实现了TTN_NEEDTEXT的响应,帮助子窗口实现TIP. 其实我们也可以不要这些缺省实现,自己用CToolTipCtrl搞定,做法一样: 1.CToolTipCtr

13、l::Create创建Tool Tip 2.AddTool增加一个TOOL,这里的TOOL就是需要显示TIP的一个区域或一个子窗口.如果对AddTool使用有不清楚的地方,建议查看源程序.可能会觉得直接使用TTM_ADDTOOL更方便. 3.在PreTranslateMessage中调用CToolTipCtrl::RelayMessage 4.如果在AddTool中,文字是用回调函数实现,那就要处理TTN_NEEDTEXT消息. 其实自己创建CToolTipCtrl和MFC做的一样.只是不需要在OnToolHitTest中给出需要显示TIP的窗口或者区域. 如果给

14、子窗口用TIP.就用MFC最简单.如果给自己呢? 设置TOOLINFO中的uFlags = TTF_IDISHWND,然后设置uId为窗口句柄,hWnd为窗口句柄就可以了. 写了这么多,有不对的地方还请和我联系一下,帮助我改正错误. 只是有个问题还没搞明白.就是为什么MFC把CToolTipCtrl放在了pThreadState中.难道是为了用一个TOOL TIP为该线程的所有窗口服务吗?难道是一种节约资源的表现.这点还需要研究.如果哪位朋友知道答案,还希望能不吝赐教.谢谢. 用VC实现TOOL TIP2008-03-17 13:57按照下面的步骤去做:  1

15、先为static设置一个ID,如ID_TIP;  2、在CDialogBar的头文件中的AFX_MSG内加入一行申明  afx_msg BOOL OnToolTip(UINT id,NMHDR * pNMHDR,LRESULT * pResult);  3、在CDialogBar的CPP文件中的AFX_MSG_MAP内加入一行  ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnToolTip)  4、在CDialogBar的CPP文件中的OnInitDialog()函数内加入  EnableToolTips(TRUE);  5、在CDialogBar的CPP文件中添

16、加OnToolTip函数  BOOL CDialogBar::OnToolTip(UINT id,NMHDR * pNMHDR,LRESULT * pResult)  {  TOOLTIPTEXT * pTTT=(TOOLTIPTEXT *)pNMHDR;  UINT uID = pNMHDR->idFrom;  if(pTTT->uFlags & TTF_IDISHWND)  uID = ::GetDlgCtrlID((HWND)uID);  if(uID == NULL) return FALSE;  switch(uID)  {  case IDC_TIP:  pT

17、TT->lpszText="添加你的提示内容";  break;  }  return TRUE;  }  这样就可以了。  其实,上面的方法可以为任何控件添加tip提示。 用VC实现TOOL TIP.比较复杂,其实也简单,但MFC帮助一些窗口实现,而另一些窗口又不实现,倒搞得复杂了.最开始我用WM_MOUSEMOVE消息,然后用CToolTipCtrl::Pop,这个方法太笨.不建议用.除非需要自定义. MFC对TOOL TIP的支持不错的.缺省情况CFrameWnd支持很好.然后是CWnd.主要体现在TTN_NEEDTEXT消息的支持和OnToolHitTest

18、的支持.TTN_NEEDTEXT是在CFrameWnd中支持的.OnToolHitTest是在CWnd中支持的.有了这些支持,可以在框架窗口中很好实现ToolBar的TIP.和在一个对话框中很好实现一个控件的TOOL TIP. 举例.在对话框中实现TOOL TIP. 1.EnableToolTips( TRUE )是不可少的.建议在:CDialog::OnInitDialog 调用吧. 2.ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnNeedText ).OnNeedText实现了TOOL TIP的文字.传入的参数idFrom是控件的ID,根据控件ID得

19、到相应的TIP文字 就这么简单的两步,就实现了对话框中的TOOL TIP.其实不只对话框,任何窗口都可以用上面的方法实现自己的子窗口控件的TIP.但前提是必须是CWnd的派生类. 这就看出了MFC对TOOL TIP的支持很厉害 但这一切都是MFC实现的我们简单描述一下它的实现原理,这样看得更清楚 CWnd本身就带有一个CToolTipCtrl对象,是放在pThreadState中的这个不说了,知道CWnd有就行了 CWnd负责创建它,然后在PreTranslateMessage中调用了FilterToolTipMessage,这个函数的作用是处理WM_MOUSEM

20、OVE,WM_NCMOUSEMOVE等消息,给CToolTipCtrl一个机会,判断鼠标是否在需要显示TIP的窗口上,如果是,就显示.FilterToolTipMessage先从CWnd::OnToolHitTest得到TOOLINFO:中的数据,比如哪个控件需要TIP等信息,然后利用ADDTOOL消息把这个需要TIP的控制加入到CToolTipCtrl的TOOL列表中,然后将鼠标移动的消息转给CToolTipCtrl处理.如果这个TIP的文字需要用回调函数来获得,就用WM_NOTIFY的TTN_NEEDTEXT从CToolTipCtrl的父窗口获取.这个过程就是CToolTipCtrl判断是

21、否要显示TIP,到获得文字并显示TIP的全过程 这样一分析,就知道原来CWnd帮助实现了控件子窗口的TIP其实就是实现了OnToolHitTest这个函数,然后在PreTranslateMessage中转发消息,帮助CToolTipCtrl正确显示TIP. 而CFrameWnd是实现了TTN_NEEDTEXT的响应,帮助子窗口实现TIP. 其实我们也可以不要这些缺省实现,自己用CToolTipCtrl搞定,做法一样: 1.CToolTipCtrl::Create创建Tool Tip 2.AddTool增加一个TOOL,这里的TOOL就是需要显示TIP的一个区域或一

22、个子窗口.如果对AddTool使用有不清楚的地方,建议查看源程序.可能会觉得直接使用TTM_ADDTOOL更方便. 3.在PreTranslateMessage中调用CToolTipCtrl::RelayMessage 4.如果在AddTool中,文字是用回调函数实现,那就要处理TTN_NEEDTEXT消息. 其实自己创建CToolTipCtrl和MFC做的一样.只是不需要在OnToolHitTest中给出需要显示TIP的窗口或者区域. 如果给子窗口用TIP.就用MFC最简单.如果给自己呢? 设置TOOLINFO中的uFlags = TTF_IDISHWND,然后

23、设置uId为窗口句柄,hWnd为窗口句柄就可以了. 写了这么多,有不对的地方还请和我联系一下,帮助我改正错误. 只是有个问题还没搞明白.就是为什么MFC把CToolTipCtrl放在了pThreadState中.难道是为了用一个TOOL TIP为该线程的所有窗口服务吗?难道是一种节约资源的表现.这点还需要研究.如果哪位朋友知道答案,还希望能不吝赐教.谢谢 //头文件加入 CToolTipCtrl m_tooltip; //主窗口初始化时加入 m_tooltip.Create(this); m_tooltip.Activate(TRUE); m_tooltip.A

24、ddTool(GetDlgItem(IDC_>name<), ">text<"); //IDC_>name<为你控件的ID,>text<为显示的内容 利用ClassWizard建立PreTranslateMessage BOOL CTest5Dlg::PreTranslateMessage(MSG* pMsg) { m_tooltip.RelayEvent(pMsg); //你加入的代码 return CDialog::PreTranslateMessage(pMsg); } 如何用VC++实现在对话框的控件上显示ToolTip 并在状态条上显示控件的信息  湖南

25、省邮电五二六厂  肖天鹏  ---- 利用 VC++ 的 AppWizard,可以很容易地实现工具条和菜单项的 ToolTip 或在状态条上显 示帮助信息,但要在对话框的控件上显示 ToolTip 并在状态条上显示控件信息并不是那么容易, 其实,利用 VC++ 中的 WM_SETCURSOR 与 TTN_NEEDTEXT 消息就可达到目的。具体操作如下:  ---- 一  ---- 利用 VC++ 的 MFC AppWizard 生成一个 SDI 或 MDI 的应用程序  ---- 二  ---- 编辑对话框控件的字符串资源  ---- 例如:  ---

26、 IDC_DBBUTTON1 = "this is 肖天鹏的第一自制按钮\n天 鹏", 其中字符串"this is 肖天鹏的第一自制按钮"将在鼠标移到控件上时显示在状态条上,字符串"天 鹏"将作为 ToolTip 显示。  ---- 三  ---- 建立消息映射。  ---- 在对话框的头文件 (*.H) 中加入以下代码:  protected:     void SetStatusText(UINT nID=0);     //{{AFX_MSG(CFileOp1)     afx_msg void OnDestroy();     afx_msg BOOL

27、 OnSetCursor(CWnd* pWnd,      UINT nHitTest, UINT message);     //}}AFX_MSG     afx_msg BOOL OnTipNotify( UINT id, NMHDR *      pNMHDR, LRESULT * pResult );     DECLARE_MESSAGE_MAP() ---- 在对话框的实现文件 (*.CPP) 中加入以下代码:  BEGIN_MESSAGE_MAP(CFileOp1, CDialog)     //{{AFX_MSG_MAP(CFileOp1)     ON

28、WM_DESTROY()     ON_WM_SETCURSOR()     //}}AFX_MSG_MAP     ON_NOTIFY_EX(TTN_NEEDTEXT,0,OnTipNotify) END_MESSAGE_MAP() ---- 四  ---- 编辑消息处理函数。  BOOL CFileOp1::OnSetCursor (CWnd* pWnd, UINT nHitTest, UINT message)  { // TODO: Add your message handler   code here and/or call default    

29、 if(pWnd==this)         SetStatusText();     else     {         TOOLTIPTEXT m_psttt;         m_psttt.hdr.hwndFrom=m_hWnd;         m_psttt.hdr.idFrom=pWnd- >GetDlgCtrlID();         m_psttt.hdr.code=TTN_NEEDTEXT;         m_psttt.uFlags= TTF_IDISHWND;         SetStatusText(pWnd- >GetDlgCtrlID(

30、));         this- >SendMessage(WM_NOTIFY,         m_psttt.hdr.idFrom,(LPARAM)&m_psttt);     } return CDialog::OnSetCursor  (pWnd, nHitTest, message); } void CFileOp1::OnDestroy()  {     SetStatusText();     CDialog::OnDestroy(); } void CFileOp1::SetStatusText(UINT nID) {     if(nID

31、0)         nID=AFX_IDS_IDLEMESSAGE;     CWnd *pWnd=AfxGetMainWnd()- >GetDescendantWindow     (AFX_IDW_STATUS_BAR);     if(pWnd)     {         AfxGetMainWnd()- >SendMessage         (WM_SETMESSAGESTRING ,nID);         pWnd- >SendMessage(WM_IDLEUPDATECMDUI);         pWnd- >UpdateWindow();  

32、   } } BOOL CFileOp1::OnTipNotify( UINT id, NMHDR *  pNMHDR, LRESULT * pResult ) {     TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;     UINT nID =pNMHDR- >idFrom;     if (pTTT- >uFlags & TTF_IDISHWND)     {         nID = ::GetDlgCtrlID((HWND)nID);         if(nID)         {         TCHAR

33、szFullText[256];         CString StrTipText;         AfxLoadString(nID,szFullText);         AfxExtractSubString(StrTipText,         szFullText,1,'\n');         if(!StrTipText.IsEmpty())             strcpy(pTTT-  >lpszText,StrTipText);             pTTT-  >hinst = AfxGetResourceHandle();             return(TRUE);         }     }     return(FALSE); } ---- 五  ---- 在 Stdafx.h 文件中加入以下指令:      #include 〈 afxpriv.h>     #include 〈 afxres.h> ---- 六  ---- 将该对话框作为一个 SDI 或 MDI 应用程序的主框架的子窗口,生成这样一个对话框后,当你把鼠标移到某个控件 ( 必须有相应的字符串资源 )上时,就会出现该控件的 ToolTip 和状态条信息

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服