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

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. BOOL CPreParent::OnToolTipText(UINT, NMHDR* pNMHDR, LRESULT* pResult)

    2. {

    3. ASSERT(pNMHDR->code == TTN_NEEDTEXTA || pNMHDR->code == TTN_NEEDTEXTW);
    4. // UNICODE消息

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

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

    7. //TCHAR szFullText[512];

    8. CString strTipText;

    9. UINT nID = pNMHDR->idFrom;
    10. if (pNMHDR->code == TTN_NEEDTEXTA && (pTTTA->uFlags & TTF_IDISHWND) ||

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

    12. {

    13. // idFrom为工具条的HWND

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

    15. }
    16. if (nID != 0) //不为分隔符

    17. {

    18. strTipText.LoadString(nID);

    19. strTipText = strTipText.Mid(strTipText.Find(‘\n‘,0)+1);

    20. //strTipText = _T("notify string");
    21. #ifndef _UNICODE

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

    23. {

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

    25. }

    26. else

    27. {

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

    29. }

    30. #else

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

    32. {

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

    34. }

    35. else

    36. {

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

    38. }

    39. #endif
    40. *pResult = 0;
    41. //使工具条提示窗口在最上面

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

    43. SWP_NOACTIVATE|SWP_NOSIZE|SWP_NOMOVE|SWP_NOOWNERZORDER);

    44. return TRUE;

    45. }

    46. return TRUE;

    47. }

VC/MFC 当鼠标移到控件上时显示提示信息,码迷,mamicode.com

时间: 2024-08-03 15:29:50

VC/MFC 当鼠标移到控件上时显示提示信息的相关文章

鼠标在某个控件上按下,然后离开后弹起,如何捕获这个鼠标弹起事件

默认情况下当鼠标移出控件外部后控件将获取不到WM_LBUTTONUP消息.以下通过SetCapture函数实现获取. SetCapture 函数功能: 该函数在属于当前线程的指定窗口里设置鼠标捕获.一旦窗口捕获了鼠标,所有鼠标输入都针对该窗口,无论光标是否在窗口的边界内.同一时刻只能有一个窗口捕获鼠标.如果鼠标光标在另一个线程创建的窗口上,只有当鼠标键按下时系统才将鼠标输入指向指定的窗口. LRESULT CALLBACK TestProc(HWND hwnd, UINT msg, WPARAM

控件上页码显示原理,以10页为例

代码如下: <div class="fenye_div0"> @{ //当前页面 var pageNow = 1; //页面总数 var pageCount = 0; if (ViewData["page"] != null) { pageNow = Convert.ToInt32(ViewData["page"]); } pageCount = Convert.ToInt32(ViewData["pageCount&quo

MFC 对话框Picture Control(图片控件)中静态和动态显示Bmp图片

最近有同学问我如何实现MFC基于对话框在图片控件中加载图片?其实使用MFC显示图片的方法各种各样,但是还是有些同学不知道怎样显示.以前在<数字图像处理>课程中完成的软件都是基于单文档的程序,这里介绍两种在对话框picthre控件中显示BMP图片的最简单基础的方法. ~~方法可能并不完美,高手忽略,但是提供一种能运行的方法,希望对刚接触这方面知识的同学有所帮助.可能你觉得文章过于简单或者有些过于详细叙述(点到即可我并不反对),但也为哪些入门同学想想,当初自己也是一头雾水. 一.静态显示bmp图片

VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法

在VC++ MFC编程中,我们常使用Picture Control图片控件来显示图像.下面简单归纳几种显示不同的方式: (实例可在我的CSDN资源中下载:http://download.csdn.net/detail/margin1988/8341525) 第一种.资源位图方式显示BMP图片 如果要显示的是一张BMP位图,则可以采用资源位图方式,具体步骤如下: (1)将BMP文件拷贝到工程的res目录下: (2)在对话框中添加一个Picture Control控件,例如:ID为IDC_STATI

OpenCV获取摄像头视频并在MFC的Picture控件上显示

分为两步:OpenCV获取摄像头数据+图像在Picture上显示 第一步:OpenCV获取摄像头数据 参考:http://www.cnblogs.com/epirus/archive/2012/06/04/2535190.html http://blog.sina.com.cn/s/blog_6dbe9bdb0100nii7.html http://blog.csdn.net/augusdi/article/details/8762961 #include "stdafx.h" #in

MFC 学习之 模态对话框图片控件上作图

首先说明一点,onpaint 是更新面板用的,作图的话应在控件上进行. 新建 MFC 对话框工程,面板上添加按钮 IDC_START , IDC_SHOW , IDC_STOP 添加两个对话框,ID 分别设为(简写)ld 和 cd. ld 上添加三个图片控件,并且每一个均关联一个 CSTATIC 型变量. cd 上添加一个图片控件,操作如上. 分别为两个对话框添加类,名称自己设,我的是 CLineDlg 和 CCompDlg . 主对话框头文件中包含两个类的头文件. 添加声明: CLineDlg

C#设置鼠标在控件上面时,改变光标形状

//设置鼠标在控件上面时,改变光标形状 private void pictureBox_macroLogo_MouseHover(object sender, System.EventArgs e) { this.Cursor = Cursors.Hand; } private void pictureBox_macroLogo_MouseLeave(object sender, System.EventArgs e) { this.Cursor = Cursors.Default; }

[转]C#鼠标拖动任意控件

C#鼠标拖动任意控件(winform) 分类: c#2011-08-15 22:51 178人阅读 评论(0) 收藏 举报 winformc#userwindowsobjectapi 1 using System.Runtime.InteropServices; 2 //并为控件 添加 MouseDown 事件 3 4 // C#鼠标拖动任意控件 5 6 // 利用Windows的API函数:SendMessage 和 ReleaseCapture 7 const uint WM_SYSCOMM

[WinForm]移除控件某个事件

关键代码: /// <summary> /// 移除控件某个事件 /// </summary> /// <param name="control">控件</param> /// <param name="eventName">需要移除的控件名称eg:EventClick</param> public static void RemoveControlEvent(this Control cont