|
本帖最后由 safeboy 于 2020-2-5 11:15 编辑
VC++基础班-[14]再论“逃跑”按钮的实现中,逃跑的按钮有时候会卡顿,请问是老师的
代码设计上有缺陷,还是我的代码有问题?
- void CMoveButton::OnMouseMove(UINT nFlags, CPoint point)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- CWnd *pParent = GetParent(); //获取父窗口指针
- CRect parentRect,mRect; //定义矩形变量
- pParent->GetClientRect(&parentRect); //获取父窗口矩形
- GetClientRect(&mRect); //获取自己的按钮大小
- CRect dstRect; //定义矩形
- int randX = 0, randY = 0; //定义生成的随机左边变量
- CPoint cursorPt; //定义点变量
- cursorPt = GetCursorPos(&cursorPt); //获取光标位置
- ::ScreenToClient(pParent->GetSafeHwnd(), &cursorPt); //将屏幕光标位置转换为窗口坐标
- //参数1:你想要转化的窗口指针,用pParent->GetSafeHwnd()来获取
-
- srand((unsigned)time(NULL)); //设置随机种子
- do
- {
- //根据范围随机生成 X 坐标
- int maxX = parentRect.right - mRect.Width(); //父窗口最右端-按钮宽度
- int minX = parentRect.left; //父窗口最左端
- randX = rand() % (maxX - minX) + minX; //随机生成 minX - maxX(不含maxX)的随机数值
- int maxY = parentRect.bottom - mRect.Height(); //父窗口最下端-按钮高度
- int minY = parentRect.top;
- randY = rand() % (maxY - minY) + minY;
- dstRect.SetRect(randX, randY, randX + mRect.Width(), randY + mRect.Height());
- //设置一个矩形范围 ,这个矩形不能包含 当前光标位置
- //left,top,right,bottom
- } while (dstRect.PtInRect(cursorPt)); //用 PtInRect 函数判断 光标是否在范围内
- //如果在范围里,就继续循环,继续随机生成 坐标
- SetWindowPos(NULL, randX, randY, 0, 0, SWP_NOZORDER | SWP_NOSIZE);
- CButton::OnMouseMove(nFlags, point);
- }
复制代码
我把 工程上传了,希望老师或同学有兴趣看看,探讨一下!
RunButton.zip
(131.57 KB, 下载次数: 1)
|
上一篇: 问一个简单的VC问题下一篇: GetModuleFileName 相关
|