在vc mfc exe工程内实现基本要求,并说出详细步骤及代码: 在应用程序窗口内,用鼠标点击任意位置,将会以鼠标点击处为圆心,生成一个大小和色彩均是随机的一个圆。当用户不停点击时,会出现满屏大小不一的彩球。 扩展要求: 1.彩色小球出现后,以匀速垂直向上方运动,直到移出窗口上边沿,消失。【30分】 2.添加鼠标追随效果。当按住鼠标左键,在程序窗口中移动时,光标所经之处产生彩球,1~2秒后随即消失

时间: 2024-02-17 14:04:25 浏览: 22
实现基本要求的步骤如下: 1. 创建一个 MFC 对话框应用程序。 2. 在对话框类的头文件中添加以下成员变量和函数声明: ```cpp private: CArray<CPoint, CPoint&> m_arrPoints; public: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnPaint(); ``` 3. 在对话框类的源文件中实现以上声明的函数: ```cpp void CMyDlg::OnLButtonDown(UINT nFlags, CPoint point) { m_arrPoints.Add(point); Invalidate(); } void CMyDlg::OnPaint() { CPaintDC dc(this); for (int i = 0; i < m_arrPoints.GetSize(); i++) { CPoint& pt = m_arrPoints.GetAt(i); int r = rand() % 50 + 10; COLORREF color = RGB(rand() % 256, rand() % 256, rand() % 256); CBrush brush(color); dc.SelectObject(&brush); dc.Ellipse(pt.x - r, pt.y - r, pt.x + r, pt.y + r); } } ``` 4. 编译并运行程序,点击窗口任意位置即可看到随机大小和颜色的圆出现。 实现扩展要求的步骤如下: 1. 在对话框类的头文件中添加以下成员变量和函数声明: ```cpp private: CArray<CPoint, CPoint&> m_arrPoints; CArray<COLORREF, COLORREF&> m_arrColors; UINT_PTR m_nTimerID; public: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnPaint(); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnMouseMove(UINT nFlags, CPoint point); ``` 2. 在对话框类的构造函数中创建定时器: ```cpp CMyDlg::CMyDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_MYAPP_DIALOG, pParent) { m_nTimerID = SetTimer(1, 50, nullptr); } ``` 3. 在对话框类的 `OnPaint` 函数中,绘制所有彩球: ```cpp void CMyDlg::OnPaint() { CPaintDC dc(this); for (int i = 0; i < m_arrPoints.GetSize(); i++) { CPoint& pt = m_arrPoints.GetAt(i); COLORREF color = m_arrColors.GetAt(i); int r = rand() % 50 + 10; CBrush brush(color); dc.SelectObject(&brush); dc.Ellipse(pt.x - r, pt.y - r, pt.x + r, pt.y + r); } } ``` 4. 在对话框类的 `OnTimer` 函数中,让所有彩球向上移动一定距离,并重新绘制所有彩球: ```cpp void CMyDlg::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == m_nTimerID) { for (int i = 0; i < m_arrPoints.GetSize(); i++) { CPoint& pt = m_arrPoints.GetAt(i); pt.y -= 5; } Invalidate(); } else { CDialogEx::OnTimer(nIDEvent); } } ``` 5. 在对话框类的 `OnMouseMove` 函数中,如果鼠标左键按下,则添加一个新点和对应颜色,并在一定时间后从数组中删除该点: ```cpp void CMyDlg::OnMouseMove(UINT nFlags, CPoint point) { if (nFlags & MK_LBUTTON) { m_arrPoints.Add(point); m_arrColors.Add(RGB(rand() % 256, rand() % 256, rand() % 256)); Invalidate(); SetTimer(m_arrPoints.GetSize(), 2000, nullptr); } } ``` 6. 在对话框类的析构函数中释放定时器和数组: ```cpp CMyDlg::~CMyDlg() { KillTimer(m_nTimerID); m_arrPoints.RemoveAll(); m_arrColors.RemoveAll(); } ``` 7. 编译并运行程序,按住鼠标左键并移动鼠标即可产生彩球,彩球会在一定时间后消失,点击窗口任意位置会出现满屏大小不一的彩球。

相关推荐

最新推荐

recommend-type

VC实现A进程窗口嵌入到B进程窗口中显示的方法

主要介绍了VC实现A进程窗口嵌入到B进程窗口中显示的方法,对于理解windows程序运行原理的进程问题有一定的帮助,需要的朋友可以参考下
recommend-type

MFC窗口位置管理详细分析及实例

在一般用MFC编写的程序的窗口客户区中,可能有好几个子窗口(具有WM_CHILD风格的窗口)。上边是工具栏,中间是视图窗口,下边是状态栏。三个窗口在框架的客户区里和平共处,互不重叠。主框架窗口的尺寸改变了,别的子...
recommend-type

在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口

在VC6.0中用GDI+调用png图片实现半透明渐变的特效窗口啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
recommend-type

vs2005下安装部署vc(MFC)程序(工程)必读

包含了在vs2005环境下开发vc工程程序运行成功生成解决方案之后的生成可执行文件的安装程序部署的详细过程及图解,非常清晰,基本上按步骤就行正常部署程序。
recommend-type

基于vc的mfc手柄遥控上位机Joy_Send步骤

基于vc的mfc手柄遥控上位机Joy_Send步骤,参见博客地址http://blog.csdn.net/xzyiverson
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。