MFC-为子窗体/子窗口的静态控件的特定位置/区域 增加提示/tips信息 使用自绘方法
2013-03-11 17:23
691 查看
MFC-为子窗体/子窗口的静态控件的特定位置/区域 增加提示/tips信息 使用自绘方法
1.前言
昨天晚上项目对方需要我改改程序的界面,当鼠标处于在温湿度控件的特定位置时,出现tips,提示当前温度湿度等一下信息,然后我就开始了工作
2.使用CToolTipCtrl类遭遇挫折
通过搜索,很快定位可以使用MFC内部集成的CToolTipCtrl类简单的来实现,参考了文章/article/1423287.html,问题没有解决,搜索相关静态控件上信息提示的文章,问题没有得到解决,继续参考了相关的文章,问题还是没有得到解决,继续参考CodeProject上的代码http://www.codeproject.com/Articles/36/Tooltips-in-modal-dialog-boxes,问题还是木有得到解决,我不清楚为什么会这样,于是新建了一个解决方案,按照CToolTipCtrl类的用法如法炮制,嗯,在新的项目里面确实是正确的,那为什么在我的项目中就不能使用了呢?
由于,我是要在子窗体的一个静态控件上实现tips,所以我把新项目的主对话框上放上一个子对话框,在子对话框上放上了一个Button控件,经过测试,效果完美无缺,但是,为什么在我的项目中就不能工作呢?我百思不得其解,把新项目中的子窗体的属性和我原有项目中子窗体的属性一个一个对照着看,发现木有任何问题,于是没有办法了。。。悲剧。。。到现在还不知道是什么原因 但我不能停留在这个上面,要继续做完它。。。一个新思路诞生了
3.使用DrawText自绘完成功能
由于要求鼠标处于某个特定区域内时,才出现提示,所以我重写了OnMouseMove函数:
上面,m_rectCtrlUnit是要进行提示的区域,之所以上面注释部分还有个SendMessage,是因为受文章在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息 影响,想把消息发送给父对话框来处理(即在父对对话中放一个CToolTipCtrl对象,当收到WM_TIPS_EVENT消息时,执行提示工作),但是实际中并没有起到作用,不知道怎么回事。
4.总结
尼玛,其实一开始的时候,我就想自绘的,但偷懒想用用自带的功能,导致花费了这么多时间。。。真是坑爹。。。关键是到现在还不知道CToolTipCtrl不工作的原因。。囧!!!!
1.前言
昨天晚上项目对方需要我改改程序的界面,当鼠标处于在温湿度控件的特定位置时,出现tips,提示当前温度湿度等一下信息,然后我就开始了工作
2.使用CToolTipCtrl类遭遇挫折
通过搜索,很快定位可以使用MFC内部集成的CToolTipCtrl类简单的来实现,参考了文章/article/1423287.html,问题没有解决,搜索相关静态控件上信息提示的文章,问题没有得到解决,继续参考了相关的文章,问题还是没有得到解决,继续参考CodeProject上的代码http://www.codeproject.com/Articles/36/Tooltips-in-modal-dialog-boxes,问题还是木有得到解决,我不清楚为什么会这样,于是新建了一个解决方案,按照CToolTipCtrl类的用法如法炮制,嗯,在新的项目里面确实是正确的,那为什么在我的项目中就不能使用了呢?
由于,我是要在子窗体的一个静态控件上实现tips,所以我把新项目的主对话框上放上一个子对话框,在子对话框上放上了一个Button控件,经过测试,效果完美无缺,但是,为什么在我的项目中就不能工作呢?我百思不得其解,把新项目中的子窗体的属性和我原有项目中子窗体的属性一个一个对照着看,发现木有任何问题,于是没有办法了。。。悲剧。。。到现在还不知道是什么原因 但我不能停留在这个上面,要继续做完它。。。一个新思路诞生了
3.使用DrawText自绘完成功能
由于要求鼠标处于某个特定区域内时,才出现提示,所以我重写了OnMouseMove函数:
void CThermoMeter::OnMouseMove(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default //CRect rect=m_rectCtrlUnit ;//为什么直接赋值会出错!!!! CRect rect; rect.left = m_rectCtrlUnit.left; rect.right = m_rectCtrlUnit.right; rect.top = m_rectCtrlUnit.top; rect.bottom = m_rectCtrlUnit.bottom; if(point.x> rect.left && point.x < rect.right && point.y> rect.top && point.y <rect.bottom) { CString csTips; csTips.Format("%.1f",m_dCurrentValue);//保留一位小数 CFont font; font.CreatePointFont(100,_T("Arial"),NULL); CDC * pdc=GetDC(); CFont *oldfont=pdc->SelectObject(&font); CBrush * pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); CRect rc; rc.top = rect.top-20; rc.bottom=rect.top;//字高20像素 rc.left=rect.left; rc.right=rc.left+50; pdc->SetBkMode(TRANSPARENT); pdc->DrawText(csTips,&rc,DT_LEFT); pdc->SelectObject(&oldfont); // Done with the font. Delete the font object. font.DeleteObject(); //WPARAM a=8;//随便怎么设置无所谓 //LPARAM b=9; //GetParent()->SendMessage(WM_TIPS_EVENT,a,b); } else { Invalidate();//当鼠标移走的时候,将字删掉 } CStatic::OnMouseMove(nFlags, point); }
上面,m_rectCtrlUnit是要进行提示的区域,之所以上面注释部分还有个SendMessage,是因为受文章在MFC中手动添加消息处理函数PreTranslateMessage和自定义消息 影响,想把消息发送给父对话框来处理(即在父对对话中放一个CToolTipCtrl对象,当收到WM_TIPS_EVENT消息时,执行提示工作),但是实际中并没有起到作用,不知道怎么回事。
4.总结
尼玛,其实一开始的时候,我就想自绘的,但偷懒想用用自带的功能,导致花费了这么多时间。。。真是坑爹。。。关键是到现在还不知道CToolTipCtrl不工作的原因。。囧!!!!
相关文章推荐
- MFC 开发界面增加控件提示 的方法
- JAVASCRIPT 提示信息 主要是使用了获取控件的位置进行定位
- OWA或Messenger样式的信息提示窗口——编写ASP.NET AJAX Extender控件(下):使用该控件(示例程序)
- OWA或Messenger样式的信息提示窗口(下)使用该控件
- MFC 静态文本框使用/更改button背景色/不使能button/设置标题/不显示控件/窗口最大最小化
- 使用CToolTipCtrl控件实现光标移动到一个控件时显示特定的提示信息
- [置顶] MFC树形控件CTreeCtrl使用方法、遍历、SetCheck无效、根据名称获取节点、获取选中节点等问题
- MFC 虚拟列表控件的使用方法
- CButton控件:mfc自绘按钮类,1张图片显示多种状态的方法
- mfc combo box 控件使用方法总结
- 使用WindowManager.addView()方法增加的悬浮窗口,如何固定屏幕显示方向?
- MFC Tab控件使用方法
- MFC只刷新窗口中的指定区域方法
- VS2013中编译项目在静态库中使用MFC出现错误的解决方法
- MFC单文档静态划分窗口时出现宽高度参数无效的改正方法
- TabHost,在onCreate方法中获得控件的位置信息
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- 关于MFC项目中使用WebBrowser控件禁止脚本错误的方法
- .net 中使用Javacript弹出提示窗口方法总结
- 使用addView方法时,保持已有动态控件位置不被改变