CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

我用MFC开发了一个ActiveX控件,如何实现控件的ToolTip,谢谢了!

楼主zhuangserasisi()2006-03-02 16:48:09 在 VC/MFC / ATL/ActiveX/COM 提问

我用MFC开发了一个ActiveX控件,如何实现控件的ToolTip,谢谢了! 问题点数:20、回复次数:3Top

1 楼cpio(备注)回复于 2006-03-02 17:26:38 得分 0

CToolTipCtrl使用详细解说    
   
  ToolTip是Win32中一个通用控件,MFC中为其生成了一个类CToolTipCtrl,总的说来其使用方法是较简单的,下面讲一下它的一般用法和高级用法。  
   
  一般用法步骤:  
   
  添加CToolTipCtrl成员变量   m_tt。  
   
  在父窗口中调用EnableToolTips(TRUE);  
   
  在窗口的OnCreate(或者其他适当的位置)中向ToolTip中添加需要显示Tip的子窗口,并同时指定相应的显示字串CToolTipCtrl::AddTool(pWnd,"string   to   display")。  
   
  重载父窗口的   BOOL   PreTranslateMessage(MSG*   pMsg)   ,在函数中调用   m_tt.RelayEvent(pMsg)。  
   
  下面假设在窗口CWndYour中使用CToolTipCtrl  
   
  在类定义中添加变量说明:  
  class   CWndYour:xxx  
  {  
    CToolTipCtrl   m_tt;  
  }  
  在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(MSG*   pMsg)中添加代码  
  BOOL   CWndYour::PreTranslateMessage(MSG*   pMsg)  
  {  
    {  
        m_tt.RelayEvent(pMsg);  
    }  
    return   CParentClass::PreTranslateMessage(pMsg);  
  }  
   
  这样当鼠标移动到相应的子窗口上时会显示出相应的ToolTip。  
   
  动态改变ToolTip的显示内容的方法及步骤:  
   
  上面所讲的1、2、4步骤。  
   
  在增加ToolTip时不指定显示的字串,而是使用LPSTR_TEXTCALLBACK。  
   
  在窗口中增加消息映射   ON_NOTIFY_EX(   TTN_NEEDTEXT,   0,   SetTipText   )。  
   
  在窗口中增加一个函数用于动态提供显示内容,其原型为   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  
    if   (pTTT->uFlags   &   TTF_IDISHWND)         //表明nID是否为HWND  
    {  
                    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   TRUE;  
        break;  
    }  
    return(FALSE);  
  }    
  Top

2 楼zhuangserasisi()回复于 2006-03-03 08:16:51 得分 0

谢谢这位高人的指点!谢谢了Top

3 楼zhuangserasisi()回复于 2006-03-03 09:51:21 得分 0

好象有问题,我是用MFC做ACTIVEX控件的程序中实现TOOLTIP,根据您的方法完成后,在对话框中用这个控件时,需要点击控件,然后让鼠标落在控件上才出现TOOLTIP,不知道为什么Top

相关问题

  • MFC ActiveX控件的问题,很急
  • MFC ActiveX控件删除属性问题
  • 如何在MFC ActiveX控件中截获子控件的事件
  • 开发MFC ActiveX控件,如何将控件显示区域大小固定
  • ActiveX控件??
  • Activex 控件!
  • activeX 控件
  • ActiveX 控件
  • 不使用mfc在atl中如何使用activex控件???
  • 请问基于MFC的ActiveX控件里可以有菜单吗?

关键词

  • 控件
  • activex
  • mfc
  • idc
  • 内容
  • tooltip
  • cwndyour
  • ctooltipctrl
  • ptttstruct
  • 谢谢

得分解答快速导航

  • 帖主:zhuangserasisi

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo