实现文字跟随鼠标移动--[转]
可能首先会想到SetROP2()函数,利用这个函数在鼠标移动的时候将上次的文字擦除再显示当前文字,可SetROP2()对于DrawText()输出文本不起作用,因
为其没有用到画笔,所以SetROP2()可以用来当作“橡皮线”而不是整块“橡皮”......
一种实现方法:在鼠标移动事件函数中绘制文字,首次产生鼠标移动事件的时候先保存要输出的文字区域的背景,然后在文字区域输出文字,以后的鼠标
事件发生后则先利用保存的原文字区域的背景去除原文字区域的文字(即绘制原文字区域背景到原文字区域),然后再保存要输出的文字区域的背景,然
后在文字区域输出文字。
多说一点,鼠标移动事件函数OnMouseMove的第一个参数nFlags为一些特定的按键是否被按下的标志,
MK_CONTROL Set if the CTRL key is down.
MK_LBUTTON Set if the left mouse button is down.
MK_MBUTTON Set if the middle mouse button is down.
MK_RBUTTON Set if the right mouse button is down.
MK_SHIFT Set if the SHIFT key is down.
eg:
void Cmfc_testDlg::OnMouseMove(UINT nFlags, CPoint point) {// TODO: 在此添加消息处理程序代码和/或调用默认值if(nFlags == MK_LBUTTON){......}if(nFlags == (MK_CONTROL | MK_SHIFT)){......}......CDialogEx::OnMouseMove(nFlags, point); }
以下为实现代码:
//保存指定区域的背景到参数MemBitmap void ScreenShot(CBitmap *MemBitmap, CDC* pDC, int Xcoords, int Ycoords, int Width, int Height) { CDC memDC; memDC.CreateCompatibleDC(pDC); MemBitmap->CreateCompatibleBitmap(pDC, Width, Height); memDC.SelectObject(MemBitmap); memDC.BitBlt(0, 0, Width, Height, pDC, Xcoords, Ycoords, SRCCOPY); memDC.DeleteDC(); }//鼠标移动事件函数 void CXXXDlg::OnMouseMove(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CClientDC cdc(this); if(!m_first_show_flag) { m_OldX = point.x+10; m_OldY = point.y-20; m_MemBitmap.DeleteObject(); ScreenShot(&cdc, &m_MemBitmap, m_OldX, m_OldY, 110, 50);//保存要输出的文字区域的背景图片 cdc.SetBkMode(TRANSPARENT);CString strPointMove;strPointMove.Format(_T("%d, %d"), point.x, point.y);cdc.DrawText(strPointMove, CRect(m_OldX,m_OldY, m_OldX+110, m_OldY+50), DT_LEFT);//在文字区域输出坐标 m_first_show_flag = true; } else { BITMAP bm; m_MemBitmap.GetObject (sizeof(BITMAP), &bm); CDC MemDC; MemDC.CreateCompatibleDC(&cdc); CBitmap *pOldBitmap=MemDC.SelectObject(&m_MemBitmap); cdc.BitBlt(m_OldX, m_OldY, bm.bmWidth , bm.bmHeight, &MemDC, 0, 0, SRCCOPY);//利用保存的原文字区域的背景图片去除原来文字区域的 文字 MemDC.SelectObject(pOldBitmap); MemDC.DeleteDC();m_OldX = point.x+10;//新坐标作为下次使用的前一次坐标 m_OldY = point.y-20; m_MemBitmap.DeleteObject(); ScreenShot(&cdc, &m_MemBitmap, m_OldX, m_OldY, 110, 50);//保存要输出的文字区域的背景图片 cdc.SetBkMode(TRANSPARENT);CString strPointMove;strPointMove.Format(_T("%d, %d"), point.x, point.y);cdc.DrawText(strPointMove, CRect(m_OldX, m_OldY, m_OldX+110, m_OldY+50), DT_LEFT);//在文字区域输出坐标 }CDialog::OnMouseMove(nFlags, point); }
在实际运行中发现,如果窗口为自绘,比如在OnPaint()中整个窗口被绘制成了白色,那么窗口显示的时候,如果鼠标在当前窗口区域则会出现文字区域
背景没有自绘的情况,我猜是窗口显示的时候如果鼠标在当前窗口则会产生鼠标移动事件,而窗口重绘事件在其后产生,即先进入OnMouseMove(),再进
入OnPaint(),所以才导致这种情况。一个解决方法就是设置一个全局或成员标志,当自绘完成后设置该标志为真,在OnMouseMove中先判断该标志,如果
为假的话则什么都不做。
参考原文:http://www.cnblogs.com/lcyty/p/3327237.html#commentform,作者Ginsan
转载于:https://www.cnblogs.com/milanleon/p/5489554.html
实现文字跟随鼠标移动--[转]相关推荐
- C#文字跟随鼠标移动
原文转自:http://blog.csdn.net/plutus_sutulp/article/details/7817781 1.WinForm中,左击后鼠标右侧会出现文字,会跟随鼠标一起移动.放开 ...
- css鼠标经过字体抖动,jQuery+css3实现文字跟随鼠标的上下抖动
m /* CSS 预设*/ *{ margin:0; padding:0;} a{ text-decoration:none;} img{ border:none;} ul{ list-style:n ...
- 用flash做连线题(线的一端跟随鼠标)
帮同事做课件,其中要做个连线测试题,需要实现用户可以用鼠标从一个点拉出一根线来的效果,实际上是线 的一端跟随鼠标,改变线的长度和倾斜角度.这和一般的图象或文字跟随鼠标有点区别.因为把高中的三角函数忘光 ...
- 跟随鼠标走的文字的html代码,跟随鼠标走的文字的HTML代码
跟随鼠标走的文字的HTML代码 跟着鼠标走的文字 visibility:visible; top:-50px; font-size:12pt; font-family:隶书; color: 00001 ...
- html图片跟随鼠标,跟随鼠标的图片 - 网页特效代码|网页特效观止 - 让你的网页靓起来!...
跟随鼠标的图片 [ 发布者:在远方┊来源:本站整理┊时间:2006-03-08┊浏览: 人次 ] 网页特效|JsCode.cn|---跟随鼠标的图片 var newtop=0 var newleft= ...
- JavaScript基础13-day15【DOM增删改、DOM添加删除记录、操作内联样式、获取元素的样式、DOM Element 对象、滚动条练习、事件对象、div跟随鼠标移动、事件冒泡】
学习地址: 谷粒学院--尚硅谷 哔哩哔哩网站--尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通) JavaScript基础.高级学习笔记汇总表[尚硅谷最新版Ja ...
- 773-780---DOM事件高级(常用鼠标事件,案例:跟随鼠标的天使,常用的键盘事件,案例:模拟京东按键输入内容,案例:模拟京东快递单号查询)
文章目录 事件高级 7 常用的鼠标事件 7.1常用的鼠标事件 7.2 鼠标事件对象 案例:跟随鼠标的天使 8 常用的键盘事件 8.1 常用的键盘事件 8.2 键盘事件对象 8.3 ASCII 表 案例 ...
- 如臂使指——Dojo框架下让浮动窗口跟随鼠标而动
介绍 在web应用的很多场合,需要让浮动窗口跟随鼠标而动.比如这儿举的一个例子:当用户选中网页上一段内容时,弹出工具条让用户进行标记.可以想象一下,有一个在线看书的应用,支持读者在阅读的时候随时做笔记 ...
- Canvas跟随鼠标炫彩小球
跟随鼠标炫彩小球 canvas没有让我失望,真的很有意思 实现效果 超级炫酷 实现原理 创建小球 给小球添加随机颜色,随机半径 鼠标移动通过实例化,新增小球 通过调用给原型新增的方法,来实现小球的动画 ...
- 本节作业之跟随鼠标的天使、模拟京东按键输入内容、模拟京东快递单号查询
本节作业之跟随鼠标的天使.模拟京东按键输入内容.模拟京东快递单号查询 1 跟随鼠标的天使 2 模拟京东按键输入内容 3 模拟京东快递单号查询 1 跟随鼠标的天使 <!DOCTYPE html&g ...
最新文章
- php获得前一天,php 获取前一天、后一天等日期的方法
- 使用Maven管理Eclipse Java项目(多modules编译)
- [刷题]算法竞赛入门经典(第2版) 4-3/UVa220 - Othello
- 一些技术社区关于博客内图片 markdown 源代码的字数统计
- 深度图压缩之-高低8位拆分保存
- 黄金分割圆怎么画matlab,黄金分割线画法图解(操作技巧)
- oracle的LAG和LEAD分析函数
- 这次要说不明白 immutable 类,我就怎么地!
- 记一次联想Y7000P安装黑apple系统地经历
- jmeter 取样器
- 师父韩晋文先生传授的八卦掌套路
- HDU 6555 The Fool(打表整除分块)
- 使用标准C++ 生成一个循环输出数字格式化前面补零的简单demo
- uni-app自定义相机
- acm比赛经验(转)
- 哈希表的应用实例 C语言实现
- HTML学习笔记-v1.3
- 一蓑烟雨任平生_年度总结
- 3dsmax 模型创建+原生贴图+obj/mtl+three.js 实现WEB3D
- 假设存在西格尔零点的原因可以用来证明比假设格拉斯哥更强的东西?
热门文章
- 动态ip地址方案有什么优点和缺点_OA期刊的优点和缺点是什么
- java 应用编程接口_java 应用程序接口(api)是什么
- #读取json某一节点数据_06596.2.0Hive处理JSON格式数据
- python java 速度_Java Go python 运行速度对比
- 怎样在input里加入搜索_影视类公众号文章怎样图文排版可以吸引用户?
- 徐州有初中计算机编程,徐州初中分布大全(学校+地址+联系方式)
- linux 软件源码安装教程,linux源码安装软件步骤
- java 性能优化分析工具_【java】JVM性能调优监控工具、可视化在线内存分析工具...
- C/C++[PAT B1022]D进制的A+B
- 2021-08-30二叉树后向遍历 leetcode 栈