鼠标移动在屏幕上显示温度Tip提示功能-CToolTipCtrl类的使用

  初学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
版权声明:本文为博主原创文章,转载请附上博文链接!

 

posted on 2019-02-19 15:04  crystal_rachel  阅读(575)  评论(0编辑  收藏  举报

导航