VC编程:VC/MFC 当鼠标移到控件上时显示提示信息
安安 2017-12-22 来源 :网络 阅读 1373 评论 0

摘要:本篇VC编程入门教程将为大家讲解VC编程技术的知识点,看完这篇文章会让你对VC编程技术的知识点有更加清晰的理解和运用。

本篇VC编程入门教程将为大家讲解VC编程技术的知识点,看完这篇文章会让你对VC编程技术的知识点有更加清晰的理解和运用。

 

VC/MFC 当鼠标移到控件上时显示提示信息

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 ),下面的代码可以根据传入的参数判定应该显示的内容。 

[cpp] view plaincopy

 

1. BOOL CWndYour::SetTipText( UINT id, NMHDR * pTTTStruct, LRESULT * pResult )    

2. {    

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

4. UINT nID =pTTTStruct-> idFrom; //得到相应窗口ID,有可能是HWND    

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

6. {    

7.   nID = ::GetDlgCtrlID((HWND)nID);//从HWND得到ID值,当然你也可以通过HWND值来判断    

8. switch(nID)    

9. case(IDC_YOUR_CONTROL1)     

10. strcpy(pTTT-> lpszText,your_string1);//设置    

11. return TRUE;    

12. break;    

13. case(IDC_YOUR_CONTROL2)    

14. //设置相应的显示字串    

15. return TRUE;    

16. break;    

17. }    

18. return(FALSE);    

19. }   


另外的就是在相应函数中区分UNICODE编码

[cpp] view plaincopy

 

1. 

1. BOOL CPreParent::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)  

2. {  

3.     ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);  

4.       

5.     // UNICODE消息  

6.     TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;  

7.     TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;  

8.     //TCHAR szFullText[512];  

9.     CString strTipText;  

10.     UINT nID = pNMHDR->idFrom;  

11.       

12.     if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||  

13.         pNMHDR->code == TTN_NEEDTEXTW && (pTTTW->uFlags & TTF_IDISHWND))  

14.     {  

15.         // idFrom为工具条的HWND   

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

17.     }  

18.       

19.     if (nID != 0) //不为分隔符  

20.     {  

21.         strTipText.LoadString(nID);  

22.         strTipText = strTipText.Mid(strTipText.Find('\n',0)+1);  

23.         //strTipText = _T("notify string");  

24.           

25. #ifndef _UNICODE  

26.         if (pNMHDR->code == TTN_NEEDTEXTA)  

27.         {  

28.             lstrcpyn(pTTTA->szText, strTipText, sizeof(pTTTA->szText));  

29.         }  

30.         else  

31.         {  

32.             _mbstowcsz(pTTTW->szText, strTipText, sizeof(pTTTW->szText));  

33.         }  

34. #else  

35.         if (pNMHDR->code == TTN_NEEDTEXTA)  

36.         {  

37.             _wcstombsz(pTTTA->szText, strTipText,sizeof(pTTTA->szText));  

38.         }  

39.         else  

40.         {  

41.             lstrcpyn(pTTTW->szText, strTipText, sizeof(pTTTW->szText));  

42.         }  

43. #endif  

44.           

45.         *pResult = 0;  

46.           

47.         //使工具条提示窗口在最上面  

48.         ::SetWindowPos(pNMHDR->hwndFrom, HWND_TOP, 0, 0, 0, 0,  

49.             SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);   

50.         return TRUE;  

51.     }  

52.     return TRUE;  

53. }  

 

希望这篇VC编程文章可以帮助到你。总之,同学们,你想要的职坐标VC频道都能找到!


本文由 @安安 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程