zoukankan      html  css  js  c++  java
  • 逃跑按钮的实现

           最近没事在看孙鑫的VC视频教程,也想学学VC了,虽说自己是学嵌入式的,但嵌入式这条路没个少说5年的学习恐怕是不行的,再加上自己喜欢走软件道路,所以想学学VC呢,感觉挺有趣的。
           在第八课中有一个逃跑按钮的实现,不过在视频中是用两个按钮,依次一个显示,一个隐藏来实现的,后面孙鑫也提到了可以用SetWindowPos函数来实现一个坐标随机的逃跑按钮,但视频中没有给出实现过程,这里,我们来实现一下。
    1.建议一个基于Dialog的MFC程序,并在资源视图中删除原有的控件,再添加一个Button控件,并修改Caption属性为“你能抓到我吗?”,如图所示。
    2.如图所示,添加一个新的MFC类,基类选择CButton。
    3.在CBtnDlg类中为IDC_BUTTON1添加一个控件变量m_btn,如图所示。
    注:这里不明白为什么变量类型中不能选择我们刚刚创建的CPhBtn类,按理说这个类继承与CButton类,是可以选择的,不解,还请高人指点。
    因为无法直接选择CPhBtn类,但也可以在CBtnDlg类的代码中手动修改一下。
    在BtnDlg.h头文件中头部添加#include "PhBtn.h",且修改类成员CButton m_btn为CPhBtn m_btn,至此修改完毕。
    4.在CPhBtn类中添加WM_MOUSEMOVE消息响应函数捕捉鼠标移动的消息,并添加代码。
     
    1. void CPhBtn::OnMouseMove(UINT nFlags, CPoint point) 
    2.         // TODO: 在此添加消息处理程序代码和/或调用默认值        
    3.     CRect rectBtn; 
    4.         CRect rectDialog; 
    5.          
    6.         //获取按钮和对话框的尺寸坐标        
    7.         GetWindowRect(&rectBtn); 
    8.         GetParent()->GetWindowRect(&rectDialog); 
    9.         //将相对于屏幕的尺寸大小转换为相对于对话框窗口的        
    10.         ScreenToClient(rectBtn); 
    11.         ScreenToClient(rectDialog); 
    12.  
    13.         //获取一个相对于对话框大小的一个随机坐标        
    14.         int x = rand() % rectDialog.right; 
    15.         //保证整个按钮完整的显示在对话框内部        
    16.         if(x > rectDialog.right - rectBtn.right)     x -= rectBtn.right; 
    17.         int y = rand() % rectDialog.bottom; 
    18.         if(y > rectDialog.right - rectBtn.bottom)        y -= rectBtn.bottom; 
    19.  
    20.         //不改变尺寸,不改变Z次序        
    21.         SetWindowPos(NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER); 
    22.          
    23.         CButton::OnMouseMove(nFlags, point); 
    24. }  
     
    OK,一个真正的逃跑按钮完成了。
     
    ---------------------------------------------------------------------------------- 
    转载我博客文章郑重声明:技术性网站著名原创作者即可转载,商业性网站必须经过我的同意才能转载,否则追究责任——
    pang123hui的博客:
  • 相关阅读:
    VS 2013 中如何自定义快捷键(图解)
    c# XML读取
    Java与.NET的WebServices相互调用
    .NET 的 WCF 和 WebService 有什么区别?(转载)
    2017年第六届数学中国数学建模国际赛(小美赛)比赛心得
    网络分析法(Analytic Network Process,ANP)
    图的简单应用(C/C++实现)
    【Android开发学习笔记之一】5大布局方式详解
    Android布局属性详解
    Android应用程序使用两个LinearLayout编排5个Button控件
  • 原文地址:https://www.cnblogs.com/pang123hui/p/1947402.html
Copyright © 2011-2022 走看看