VC++ 6.0单文档 mfc中怎么用最简单的方法修改此代码void CMyView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default center=point; pDC=GetDC(); color=RGB(rand()%6,rand()%6,rand()%6); r=rand()F+5; br.CreateSolidBrush(color); pDC->SelectObject(&br); pDC->Ellipse(center.x-r,center.y-r,center.x+r,center.y+r); br.DeleteObject(); CView::OnLButtonDown(nFlags, point); } void CMyView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default SetTimer(1,200,NULL); CView::OnLButtonUp(nFlags, point); } void CMyView::rise() { center.y-=5; pDC=GetDC(); br.CreateSolidBrush(color); pDC->SelectObject(&br); pDC->Ellipse(center.x-r,center.y-r,center.x+r,center.y+r); br.DeleteObject(); } void CMyView::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default RedrawWindow(); rise(); 能实现前面左击鼠标出现的圆不会因为后面再左击鼠标所出现的圆而消失,而是继续保持原来向上的运动。写出详细步骤及代码
时间: 2024-02-12 13:07:10 浏览: 67
vc++单文档中拖动图片的方法
5星 · 资源好评率100%
您可以通过以下步骤来修改代码,使得前面的圆不会因为后面的圆而消失:
1. 在CMyView类的头文件中声明一个std::vector<CPoint>类型的变量points,用于存储圆心的坐标。
2. 在OnLButtonDown函数中,将圆心的坐标存储到points向量中,并在绘制圆形时使用该坐标。
3. 在rise函数中,遍历points向量中的所有元素,分别更新每个圆形的位置。
4. 在OnTimer函数中,调用rise函数,然后重绘窗口。
下面是修改后的代码:
MyView.h文件:
```
#pragma once
#include <vector>
class CMyView : public CView
{
protected:
DECLARE_DYNCREATE(CMyView)
CPoint center;
COLORREF color;
int r;
CBrush br;
CDC* pDC;
std::vector<CPoint> points; // 新增的变量
public:
CMyView();
virtual ~CMyView();
void rise();
protected:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT nIDEvent);
DECLARE_MESSAGE_MAP()
};
```
MyView.cpp文件:
```
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
center = point;
color = RGB(rand() % 256, rand() % 256, rand() % 256);
r = rand() % 20 + 5;
br.CreateSolidBrush(color);
pDC = GetDC();
pDC->SelectObject(&br);
pDC->Ellipse(center.x - r, center.y - r, center.x + r, center.y + r);
br.DeleteObject();
points.push_back(center); // 将圆心坐标存储到points向量中
CView::OnLButtonDown(nFlags, point);
}
void CMyView::rise()
{
for (auto& pt : points) // 遍历points向量中的所有元素
{
pt.y -= 5; // 更新每个圆形的位置
br.CreateSolidBrush(color);
pDC = GetDC();
pDC->SelectObject(&br);
pDC->Ellipse(pt.x - r, pt.y - r, pt.x + r, pt.y + r);
br.DeleteObject();
}
}
void CMyView::OnTimer(UINT nIDEvent)
{
rise(); // 调用rise函数
RedrawWindow(); // 重绘窗口
CView::OnTimer(nIDEvent);
}
```
这样,前面的圆形就会继续向上运动,而不会因为后面的圆形而消失。请注意,由于我们使用了std::vector来存储圆心坐标,因此需要在头文件中引入<vector>头文件。
阅读全文