VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 126|回复: 1

VC++基础班-[14]再论“逃跑”按钮的实现课程中,逃跑按钮会卡顿,不是很理想?

[复制链接]
63_avatar_middle
最佳答案
1 
donate_vip 发表于 2020-2-5 11:12:51 | 显示全部楼层 |阅读模式
本帖最后由 safeboy 于 2020-2-5 11:15 编辑

VC++基础班-[14]再论“逃跑”按钮的实现中,逃跑的按钮有时候会卡顿,请问是老师的
代码设计上有缺陷,还是我的代码有问题?
  1. void CMoveButton::OnMouseMove(UINT nFlags, CPoint point)
  2. {
  3.         // TODO: 在此添加消息处理程序代码和/或调用默认值

  4.         CWnd *pParent = GetParent();        //获取父窗口指针
  5.         CRect parentRect,mRect;                        //定义矩形变量
  6.         pParent->GetClientRect(&parentRect);  //获取父窗口矩形
  7.         GetClientRect(&mRect);                //获取自己的按钮大小

  8.         CRect dstRect;   //定义矩形
  9.         int randX = 0, randY = 0;  //定义生成的随机左边变量

  10.         CPoint cursorPt;        //定义点变量
  11.         cursorPt = GetCursorPos(&cursorPt);  //获取光标位置
  12.         ::ScreenToClient(pParent->GetSafeHwnd(), &cursorPt);         //将屏幕光标位置转换为窗口坐标
  13.         //参数1:你想要转化的窗口指针,用pParent->GetSafeHwnd()来获取
  14.        
  15.         srand((unsigned)time(NULL));    //设置随机种子

  16.         do
  17.         {
  18.                 //根据范围随机生成  X 坐标
  19.                 int maxX = parentRect.right - mRect.Width();  //父窗口最右端-按钮宽度
  20.                 int minX = parentRect.left;                        //父窗口最左端
  21.                 randX = rand() % (maxX - minX) + minX;  //随机生成  minX - maxX(不含maxX)的随机数值

  22.                 int maxY = parentRect.bottom - mRect.Height(); //父窗口最下端-按钮高度
  23.                 int minY = parentRect.top;
  24.                 randY = rand() % (maxY - minY) + minY;

  25.                 dstRect.SetRect(randX, randY, randX + mRect.Width(), randY + mRect.Height());
  26.                 //设置一个矩形范围 ,这个矩形不能包含 当前光标位置
  27.                 //left,top,right,bottom


  28.         } while (dstRect.PtInRect(cursorPt));  //用 PtInRect 函数判断 光标是否在范围内
  29.         //如果在范围里,就继续循环,继续随机生成 坐标


  30.         SetWindowPos(NULL, randX, randY, 0, 0, SWP_NOZORDER | SWP_NOSIZE);

  31.         CButton::OnMouseMove(nFlags, point);
  32. }
复制代码



我把 工程上传了,希望老师或同学有兴趣看看,探讨一下!
VC++基础班-[14]再论“逃跑”按钮的实现课程中,逃跑按钮会卡顿,不是很理想? RunButton.zip (131.57 KB, 下载次数: 1)




上一篇:问一个简单的VC问题
下一篇:GetModuleFileName 相关
51_avatar_middle
最佳答案
82 
online_admins 发表于 2020-2-5 18:08:58 | 显示全部楼层
卡顿的话就是随机的位置不对造成的,我课堂上的代码也会有这个问题吗?
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-30 11:55

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表