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