【课设】C++:MFC应用程序绘制一个五角星图案

本文介绍了如何使用MFC和GDI在Windows应用程序中绘制一个五角星,并实现通过键盘左、右箭头移动五角星的功能。详细讲解了WM_PAINT消息处理、OnKeyDown事件及Invalidate函数的应用,提供了代码实现和应用场景分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

鱼弦:公众号【红尘灯塔】,CSDN内容合伙人、CSDN新星导师、全栈领域优质创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)

设计基于框架窗口的MFC应用程序,在窗口中间位置绘制一个五角星图案,五角星使用红色画笔绘 制,并且将五角星的内部用红色进行填充。实现左、右箭头按键功能,用户按下的两个方向按键时,五角星 沿着方向按键对应的方向移动。 设计报告提纲: 1、设计思路:实现程序功能需要处理的消息,每条消息对应实现的功能;绘制五角星图案所需要的定位 坐标的计算方法; 2、程序关键代码清单:列出实现程序功能的关键代码段,每个代码段说明实现的功能; 3、程序运行效果图:截取程序运行时的窗口图片,说明每张图对应的操作状态,例如截取三张图片, 分别表示初始的居中图片和左移、右移之后的效果图。 4、程序设计工作总结。

原理详细解释:

  1. MFC(Microsoft Foundation Classes): MFC 是 Microsoft 提供的一组 C++ 类库,用于简化 Windows 程序的开发。它提供了一系列的类,用于处理窗口、消息、图形界面等。在这个示例中,使用了 MFC 的窗口类和消息处理

图形学作业:五角星VC++法 void CHuayuView::OnDraw(CDC* pDC) { CHuayuDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here //五角星 int X0=100,Y0=100,R=80; float a[6][3],b[6][3]; float xr; float pi=3.14; a[1][1] = X0; a[1][2] = Y0 + R; a[2][1] = X0 + R * sin(pi / 2.5); a[2][2]= Y0 + R * cos(pi / 2.5); a[3][1] = R * sin(pi / 5) + X0; a[3][2] = Y0 - R * cos(pi / 5); a[4][1] = -R * sin(pi / 5) + X0; a[4][2] =a[3][2]; a[5][1] = X0 - R * sin(pi / 2.5); a[5][2] = a[2][2]; xr = (a[2][2] - Y0) / cos(pi / 5); b[1][1] = X0 - sin(pi / 5) * xr; b[1][2] = a[2][2]; b[2][1] = X0 + sin(pi / 5) * xr; b[2][2] = b[1][2]; b[3][1] = sin(pi / 2.5) * xr + X0; b[3][2] = -cos(pi / 2.5) * xr + Y0; b[4][1] = X0; b[4][2] = -xr + Y0; b[5][1] = -sin(pi / 2.5) * xr + X0; b[5][2] = b[3][2]; pDC->MoveTo(a[5][1], a[5][2]); int i; for(i=1;iLineTo(b[i][1], b[i][2]); pDC->LineTo(a[i][1], a[i][2]); } pDC->MoveTo(a[1][1], a[1][2]);pDC->LineTo(b[4][1], b[4][2]); pDC->MoveTo(a[2][1], a[2][2]);pDC->LineTo(b[5][1], b[5][2]); pDC->MoveTo(a[3][1], a[3][2]);pDC->LineTo(b[1][1], b[1][2]); pDC->MoveTo(a[4][1], a[4][2]);pDC->LineTo(b[2][1], b[2][2]); pDC->MoveTo(a[5][1], a[5][2]);pDC->LineTo(b[3][1], b[3][2]); int c[5][2]; for(i=0;i<5;i++) {c[i][0]=(a[i+1][1]+b[i+1][1]+X0)/3; c[i][1]=(a[i+1][2]+b[i+1][2]+Y0)/3; } int d[5][2]; for(i=0;iSelectObject(&brush); for(i=0;iExtFloodFill(c[i][0],c[i][1],RGB(0,0,0),FLOODFILLBORDER);//在指定的区域内填充颜色 Sleep(40); } CBrush brush2; brush2.CreateSolidBrush(RGB(222,111,222)); pDC->SelectObject(&brush2); for(i=0;iExtFloodFill(d[i][0],d[i][1],RGB(0,0,0),FLOODFILLBORDER); Sleep(40); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鱼弦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值