初学VC++,太多知识不懂,需要不断的查找资料,想通过记录让自己有所积累,主要是怕以后会很快忘记。最近在做一个在屏幕上显示鼠标移动位置的温度值,我利用先缓存一帧图像的温度值,然后,通过鼠标移动消息相应函数记录坐标值,图像放大3倍,所以记录的坐标需要缩小3倍。

CToolTipCtrl m_ToolTip;

BOOL CVedioShowDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

mCVedioShowDlg = this;
    memset(m_hist, 0, sizeof(m_hist));

// TODO:  在此添加额外的初始化
    if (!m_ToolTip.Create(this))  //创建一个工具提示控件,并附加到CToolTipCtrl控件对象上
    {
        TRACE(_T("Untable To create ToolTip\n"));
        return FALSE;
    }

m_ToolTip.SetDelayTime(200);
    m_ToolTip.SetTipTextColor(RGB(0,0,255));
    m_ToolTip.SetTipBkColor(RGB(255,255,255));
    m_ToolTip.SetMaxTipWidth(600);

m_ToolTip.Activate(TRUE); // Activate the tooltip control

return TRUE;  // return TRUE unless you set the focus to a control
    // 异常:  OCX 属性页应返回 FALSE
}

void CVedioShowDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    // TODO:  在此添加消息处理程序代码和/或调用默认值
    CString st;
    int x = point.x / multiBK;  //multiBK=3,因图像放大3倍,此处缩小3倍
    int y = point.y / multiBK;  //multiBK=3,因图像放大3倍,此处缩小3倍
    float f = fTempTable[yIndex * 3 + xIndex][y][x];  //该处因显示多个设备,缓存对应选择的设备索引

st.Format(_T("(%d,%d) %.2f"), x, y, f);  //格式化需要输出的文本
    m_ToolTip.AddTool(FromHandle(GetSafeHwnd()), st); //注册具有工具提示控件的提示框,输出文本在Tip提示框
    m_ToolTip.UpdateTipText(st, FromHandle(GetSafeHwnd())); //更新输出Tip提示框文本

CDialogEx::OnMouseMove(nFlags, point);
}

BOOL CVedioShowDlg::PreTranslateMessage(MSG* pMsg)  
{
    // TODO:  在此添加专用代码和/或调用基类
    if (NULL != m_ToolTip)  //将鼠标消息传送给工具提示控件进行处理
        m_ToolTip.RelayEvent(pMsg);

if (pMsg->message == WM_KEYDOWN   &&   pMsg->wParam == VK_ESCAPE )  //解决esc闪退
        return   TRUE;

return CDialogEx::PreTranslateMessage(pMsg);
}

网上有一篇文章对我有启发,特粘贴在此处备忘:

https://blog.csdn.net/lujincsdn/article/details/80309977

我现在所做的项目显示区分为4个小格,双击其中一个小格实现全屏,在全屏的状态下,鼠标移动,显示对应像素点的温度值。
实现过程中,纠结了好久,UpdateTipText就是不显示。
现在记录正确的实现方式:

在类的.h文件中声明一个CToolTipCtrl  m_tooltip,然后在.cpp的OnInitDialog中添加如下代码:
//CToolTipCtrl::Create 创建工具提示控件,并将其附加到CToolTipCtrl对象
 m_tooltip.Create(this);
 //CToolTipCtrl::AddTool 使用工具提示控件注册一个工具
 m_tooltip.AddTool(FromHandle(m_CameraDisplay.GetSafeHwnd()), TTS_ALWAYSTIP);//第一个参数必须为指向四个小格窗口的指针,和后面显示的时候UpdateTipText第二个参数对应
 m_tooltip.AddTool(FromHandle(m_CameraDisplay1.GetSafeHwnd()), TTS_ALWAYSTIP);
 m_tooltip.AddTool(FromHandle(m_CameraDisplay3.GetSafeHwnd()), TTS_ALWAYSTIP);
 m_tooltip.AddTool(FromHandle(m_CameraDisplay4.GetSafeHwnd()), TTS_ALWAYSTIP);
 //CToolTipCtrl::SetDelayTime 将弹出窗口的初始设置并重新显示工具提示控件的持续时间
 m_tooltip.SetDelayTime(10);

AddTool之所以是4个,是对应4个小格的指针。
在cpp的PreTranslateMessage重载父类函数,添加如下代码
---------------------
作者:lujincsdn
来源:CSDN
原文:https://blog.csdn.net/lujincsdn/article/details/80309977
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. 使用NSAssert()和NSParameterAssert调试程序
  2. 【转】ubuntu 配置 java jdk1.8 环境,增加多版本 jdk 和切换方法
  3. 4、IMS
  4. AngularJS 控制器
  5. PHP投票系统
  6. Codeforces Round #158 (Div. 2)
  7. chrome浏览器font-size<12px无效解决办法
  8. 一个ListView中显示不同的item(分组)
  9. discuz_style_default.xml修改
  10. MDK的优化应用
  11. HDU 4228 Flooring Tiles 反素数
  12. TCP/UDP差异
  13. VS2003"无法启动调试 没有正确安装调试器"的解决方法
  14. ionic 项目中添加modal的步骤流程
  15. RobotFramework下的http接口自动化Set Request Header 关键字的使用
  16. Spring对IOC的理解
  17. Thread中yield方法
  18. surfer画世界频率分布图(等高线、地点标注)
  19. C# 类的序列化和反序列化
  20. Python才排第8名!2018增速最快TOP 10编程语言盘点

热门文章

  1. how to drop multiple talbes in oracle use a sigle query
  2. python 实现插入排序、冒泡排序、归并排序
  3. 第一次课堂作业之Circle
  4. HTTP之Response状态码
  5. jenkins连接提示错误urllib.error.HTTPError: HTTP Error 403
  6. 5、Android-跨程序共享数据--内容提供器
  7. [Python 多线程] multiprocessing、多进程、工作进程池 (十四)
  8. 谷歌浏览器linux,windows下载
  9. vlc源码分析(三) 调用live555接收RTSP数据
  10. STM32 以太网学习