实现当鼠标在按钮上时,出现tip提示信息!

来源:互联网 发布:网络生存游戏 编辑:程序博客网 时间:2024/05/17 23:21

 

    今天一直在考虑在工具栏上实现当鼠标在按钮上时,出现tip提示信息。首先看了一些文档,要用到CToolTipCtrl这类,我按着实现了下,首先说明下我新建的工程是基于对话框的工程,动态添加工具栏。

   刚开始使用了网上的那种步骤:

 1. 创建一个CToolTipCtrl成员

CToolTipCtrl m_tooltip;

2. 添加消息映射。在消息映射宏BEGIN_MESSAGE_MAP(CRDlg, CDialog)END_MESSAGE_MAP()之间添加如下内容。

  ON_NOTIFY_EX( TTN_NEEDTEXT, 0, SetTipText )  

3.声明消息处理函数

BOOL SetTipText(UINT id, NMHDR * pTTTStruct, LRESULT * pRes) ; 

4. 打开工具消息提示功能。调用CToolTipCtrlBOOL Create( CWnd*pParentWnd, DWORDdwStyle = 0 )函数创建一个CToolTipCtrl。添加在OnInitDialog()函数中。

  EnableToolTips(TRUE);

  m_tooltip.create(this);

5. 注册一个工具。如果只是给一个控件添加提示消息,可以直接将LPSTR_TEXTCALLBACK改为提示消息,不需要消息映射及消息处理函数,但只能给一个控件添加。

   m_Ttc.AddTool(GetDlgItem(IDC_RESET), LPSTR_TEXTCALLBACK);  

   m_Ttc.AddTool(GetDlgItem(IDC_SHUFFLE), LPSTR_TEXTCALLBACK);  

6.实现消息处理函数

 

1. BOOL CRubiksCubeDlg::SetTipText(UINT id, NMHDR * pTTTStruct, LRESULT * pRes)  

2. {  

3.     TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pTTTStruct;      

4.     UINT nID =pTTTStruct->idFrom;   

5.     if (pTTT->uFlags & TTF_IDISHWND)  

6.     {  

7.         nID = ::GetDlgCtrlID((HWND)nID);  

8.         switch(nID)  

9.         {  

10.               case(IDC_SHUFFLE):  

11.                   {  

12.                       strcpy(pTTT->lpszText,"随机");  

13.                       return TRUE;  

14.                       break;  

15.                   }  

16.               case(IDC_RESET):  

17.                   {  

18.                       strcpy(pTTT->lpszText,"重置");  

19.                       return TRUE;  

20.                       break;  

21.                   }  

22.           }  

23.       }  

24.       return FALSE;  

25.     

26.   }  

我想说的是,我按照这个实现的时候,如果是对话框自己的静态的控件可以完美实现,但是动态添加的控件,运行到addtool时候程序就崩溃了。至今找不到问题所在。

       后来使用了另一种方法,实现了,方法如下:

CMydlg::OnInitialUpdate()

{

         m_toolTip.Create(this);

         CRect rect; 

// Set tooltips for toolbar1

         m_toolBar.GetItemRect(0, rect);//m_toolBarCToolBarCtrl

         m_toolTip.AddTool(&m_toolBar1, ID_TB1_ONE, rect, ID_TB1_ONE);

         m_toolBar.GetToolBarCtrl().GetItemRect(1, rect);

         m_toolTip.AddTool(&m_toolBar1, ID_TB1_TWO, rect, ID_TB1_TWO);

         m_toolBar.GetToolBarCtrl().GetItemRect(2, rect);

         m_toolTip.AddTool(&m_toolBar1, ID_TB1_THREE, rect, ID_TB1_THREE);

        

// Associate ToolTipCtrl with ToolBars

    m_toolBar.GetToolBarCtrl().SetToolTips(&m_toolTip);

}