VC mfc实现点击鼠标左键一下就可以出现个圆,松开左键就会向上飞,最终有满屏圆步骤及代码
时间: 2023-12-09 11:03:48 浏览: 33
以下是VC MFC实现点击鼠标左键一下就可以出现个圆,松开左键就会向上飞,最终有满屏圆的步骤及代码:
步骤:
1. 创建一个MFC项目。
2. 在资源视图中添加一个绘图区。
3. 右键单击绘图区,选择“类向导”。
4. 在“类向导”中选择“CMyView”,并添加一个WM_LBUTTONDOWN消息响应函数。
5. 在WM_LBUTTONDOWN消息响应函数中添加绘制圆形的代码。
6. 在CMyView类中添加一个OnTimer函数,在该函数中实现圆形上升的效果。
7. 在OnInitialUpdate函数中添加一个定时器,以便调用OnTimer。
代码:
首先,在CMyView.h中添加以下代码:
```cpp
class CMyView : public CView
{
public:
CMyView();
virtual ~CMyView();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnTimer(UINT_PTR nIDEvent);
protected:
virtual void OnDraw(CDC* pDC);
};
```
接下来,在CMyView.cpp中添加以下代码:
```cpp
IMPLEMENT_DYNCREATE(CMyView, CView)
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_WM_LBUTTONDOWN()
ON_WM_TIMER()
END_MESSAGE_MAP()
CMyView::CMyView()
{
}
CMyView::~CMyView()
{
}
void CMyView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: 在此处添加绘制代码
}
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
CDC* pDC = GetDC();
pDC->Ellipse(point.x - 20, point.y - 20, point.x + 20, point.y + 20);
ReleaseDC(pDC);
SetTimer(1, 20, NULL);
}
void CMyView::OnTimer(UINT_PTR nIDEvent)
{
if (nIDEvent == 1)
{
CDC* pDC = GetDC();
CRect rect;
GetClientRect(&rect);
pDC->SetROP2(R2_NOTXORPEN);
for (int i = 0; i < 5; i++)
{
pDC->Ellipse(point.x - 20 - i * 5, point.y - 20 - i * 5, point.x + 20 + i * 5, point.y + 20 + i * 5);
}
ReleaseDC(pDC);
point.y -= 5;
if (point.y < rect.top)
{
KillTimer(1);
}
}
CView::OnTimer(nIDEvent);
}
```
在该代码中,我们在OnLButtonDown函数中绘制圆形,并在该函数中设置一个定时器,在定时器回调函数OnTimer中实现圆形向上移动的效果。
注意,这是一个简单的实现,可能会出现一些问题,例如圆形移动过快,或者圆形在移动时会导致屏幕上出现残影。如果需要更完善的实现,需要更精细地处理定时器的回调函数。