目标:在一个对话框上,鼠标经过一个BUTTON时,该BUTTON会移动。

练习程序43

步骤:

①新建类--基类--CButton, 类名CBtn

②给该类CBtn添加windows message hander :

 void CBtn::OnMouseMove(UINT nFlags, CPoint point) 

{

//code: 鼠标移动事件代码(具体见下方)

③在DIALOG类中添加CBtn类对象作为他的成员变量, 在BOOL CMy43Dlg::OnInitDialog()函数中创建按钮

m_btn.Create("Escape", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, CRect(50, 50,100, 100), this, 1);

④取得该按钮尺寸,取得该对话框尺寸,用随机数函数Rand()来给移动后的鼠标定位,但是不能超过对话框的范围,因此需要对对话框尺寸减去按钮尺寸取余来定位坐标。

NOTE:在实际使用的时候发现:随机数产生有可能连续两个数之间的差别很小,以至于看起来按钮没有移动,因此在该按钮类中增加一个静态成员变量用来记录上一次按钮所在的横坐标,如果随机数函数产生的新横坐标减去移动后的坐标的绝对值小于一个数,那么就重新生成横坐标,直到两者只差大于这个数。

 NOTE: 可以不考虑纵坐标的变化幅度,两个坐标只考虑一个就可以了。

Codes:

int CBtn::xPosition = 0;//用来记录x坐标 ,static类型

void CBtn::OnMouseMove(UINT nFlags, CPoint point) 

{

// TODO: Add your message handler code here and/or call default

static CRect rectDlg; //对话框尺寸

static CRect rectBtn;//按钮尺寸

GetParent()->GetWindowRect(&rectDlg);

GetWindowRect(&rectBtn);

static int widthDlg = rectDlg.right - rectDlg.left; //取得对话框宽度

static int heightDlg = rectDlg.bottom - rectDlg.top; //取得对话框高宽度

static int widthBtn = rectBtn.right - rectBtn.left;//取得按钮宽高度 

static int heightBtn = rectBtn.bottom - rectBtn.top;//取得按钮高度 

int x = rand() % (widthDlg - widthBtn);//控制x坐标不超出对话框

while (abs(xPosition - x) < 10) //确保看起来确实移动了 

{

    x = rand() % (widthDlg - widthBtn);

int y = rand() % (heightDlg - heightBtn); //控制y坐标不超出对话框

xPosition = x;  //记录下以便于下次比较

SetWindowPos(&wndTopMost, x , y , 0, 0, SWP_NOSIZE | SWP_NOZORDER);

CButton::OnMouseMove(nFlags, point);

}

????????

\t\tVC 逃跑按钮相关推荐

  1. 孙鑫对话框二逃跑按钮中为什么为按钮新建一个类

    为类添加消息处理函数与成员变量,因为要对控件添加WM_MOUSEMOVE消息处理函数,而控件变量本身 不能加消息处理函数,只有类才能添加,所以要创建CNewButton类,然后使按钮控件属于这个类,当 ...

  2. 基础语法篇_7——MFC对话框:逃跑按钮、属性表单、向导创建

  3. 孙鑫对话框二中为什么要对按钮控件新建一个类(小结,5.2给出了结论)

    为类添加消息处理函数与成员变量,因为要对控件添加WM_MOUSEMOVE消息处理函数,而控件变量本身 不能加消息处理函数,只有类才能添加,所以要创建CNewButton类,然后使按钮控件属于这个类,当 ...

  4. Visual C++语言编程开发详解(孙鑫老师)

    Lesson1 Windows程序内部运行机制 1.Windows应用程序,操作系统,计算机硬件之间的相互关系 2.关于API 3.消息及消息队列 4.WinMain函数: 4.1 WinMain函数 ...

  5. VC++深入详解学习笔记

    VC++深入详解学习笔记 Lesson1: Windows程序运行原理及程序编写流程 Lesson2: 掌握C++基本语法 Lesson3: MFC框架程序剖析 Lesson4: 简单绘图 Lesso ...

  6. 【下载!】免费经典的计算机教学视频,向孙鑫老师致敬!

    我十分尊敬的孙鑫老师是国内非常知名的IT技术讲师,他的大作< Java Web 开发详解>我最近购买了并认真阅读,真是不可多得作品,在这个利益为先的时代,孙鑫老师把他录制的很多价值很高的优 ...

  7. 孙鑫VC++深入详解笔记

    前言:最近感觉技术提升提来很吃力,主要还是因为以前的基础没有打牢,特别是多线程和数据库方面,所有准备重新学习一下基础. 如下文章转载自:http://www.cnblogs.com/gaojun/ar ...

  8. 梦幻手游服务器总维护,梦幻西游手游7.13维护解读 维护内容详细分析

    亲爱的玩家朋友: 为保证服务器的运行稳定和服务质量,<梦幻西游>手游所有服务器将于2016年7月13日8:00停机,进行维护工作.预计维护时间为8:00-9:00.如果在预定时间内无法完成 ...

  9. mfc基础教程(学习笔记)

    目录 mfc基础教程 第一章:CDC的使用 第二章:文本编程 第三章:菜单 第四章:对话框 第五章:对话框(二) 第六章:样式 第七章:创建兼容DC 第八章:图形的保存与重绘 第九章:文件 第十章:文 ...

最新文章

  1. 使用docker部署mysql 并持久化到宿主机本地
  2. COZMO机器人的部分表情说明
  3. javascript基础学习(六)
  4. alert()的功能_功能强大的Flutter 视频播放插件
  5. 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先
  6. STM32之SDIO原理
  7. python文本相似度分析_文本相似度分析(基于jieba和gensim)
  8. java游戏编程源代码_JAVA小游戏编程-源代码
  9. 广州大彩串口屏与STM32F407通讯
  10. retroarch游戏模拟器使用
  11. java实现socket长连接_java如何实现Socket的长连接和短连接
  12. 我在蚂蚁金服做后端:那些坚持在一个岗位做八年的人,后来怎么样了?
  13. Unity曲面UI插件Curved UI
  14. 第二十四题——[ZJCTF 2019]NiZhuanSiWei
  15. 回答完数据库连接池原理,面试官跪着求我入职他们公司
  16. Oracle 学习之建表、索引、同义词以及SQL优化
  17. 乌镇互联网大会发布15项世界领先科技成果
  18. python mongodb_Python操作MongoDB文档数据库
  19. PR时间轴模板 企业发展融资历程PR动态图形模板MOGRT
  20. linux控制并发运行进程数

热门文章

  1. android emulator创建avd命令
  2. 现代控制理论学习笔记
  3. 以太坊服务器是什么_以太坊代币创建教程之服务器选择
  4. NOIP学习之二分查找:124.网线主管
  5. 华为p7android5.1系统,P7 Android 5.1+EMUI3.1 版本功能介绍(一)
  6. 通过jQuery改变css样式
  7. qq android 哪个版本好用吗,qq新版好用吗?安卓QQ6.5版本更新
  8. PMP-风险决策--(第6版)
  9. 抗击视觉中国们的最有效方法
  10. Pointnet++复现流程及问题解决