VC mfc单文档中代码如下void CMyView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default center=point; r=rand()%46+5;//r=5~50 color=RGB(rand()%256,rand()%256,rand()%256); points.push_back(center); SetTimer(1,200,NULL); CView::OnLButtonDown(nFlags, point); } void CMyView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default KillTimer(1); CView::OnLButtonUp(nFlags, point); } void CMyView::rise() { for(int i=0;i<points.size();i++);{ points[i].y-=5; if(points[i].y<-r){ points.erase(points.begin()+i); i--; } } } void CMyView::OnTimer(UINT nIDEvent) { // TODO: Add your message handler code here and/or call default if(nIDEvent==1){ Invalidate(); rise(); } CView::OnTimer(nIDEvent); },单击鼠标左键没有反应,没有出现圆是为什么,完整步骤及代码
时间: 2024-02-06 15:02:13 浏览: 72
根据您提供的代码,我发现可能有两个问题导致没有出现圆:
1. 在OnLButtonDown函数中,您使用了SetTimer函数来启动定时器,但是没有在函数中初始化points向量。因此,在rise函数中,您无法遍历points向量中的元素,导致没有圆出现。为了解决这个问题,您可以在OnLButtonDown函数中初始化points向量,例如:
```
void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
center = point;
r = rand() % 46 + 5; //r=5~50
color = RGB(rand() % 256, rand() % 256, rand() % 256);
points.clear(); // 初始化points向量
points.push_back(center);
SetTimer(1, 200, NULL);
CView::OnLButtonDown(nFlags, point);
}
```
2. 在rise函数中,您使用了一个多余的分号,导致for循环体为空,从而没有对points向量中的元素进行处理。为了解决这个问题,您可以删除分号,例如:
```
void CMyView::rise()
{
for (int i = 0; i < points.size(); i++) // 删除多余分号
{
points[i].y -= 5;
if (points[i].y < -r)
{
points.erase(points.begin() + i);
i--;
}
}
}
```
希望这些解决方法能帮助您解决问题。如果问题仍然存在,请提供更多详细信息以便更好地帮助您。
阅读全文