VC++鼠标响应画圆的问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 06:33:41
在窗口每点击一次鼠标左键画一个圆
OnLButtonDown里应该加什么
C***View里应该加什么
OnDraw里应该加什么
越详细越好!!

如果只是在view中画圆,只需要在OnLButtonDown中添加就可以了,比如:
void CMyStatusBarView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CDC *pdc = GetDC();
pdc->Ellipse(CRect(point.x - 10, point.y - 10, point.x + 10, point.y + 10)); //10是你要画的圆的半径

CView::OnLButtonDown(nFlags, point);
}

这种做法最小化窗口,或是变化大小后图像会消失,因为在view的onpaint或是别的函数中重画了,但没有画先前的圆。如果要想在变化窗口之后还看到圆,必须把之前画的保存起来,然后在onpaint或是ondraw中依次画出来就ok了。

在OnLButtonDown里加上

CDC *pDC(this);
pDC->Ellipse();

如果需要窗口刷新时候都把圆画出来,需要如下处理:

1、在 C**View 里面增加一个结构用于保存圆的信息
struct Circle
{
int centerx, centery; //圆心位置
int radius; //圆半径
};
再增加一个数组或者 Vector 记录用于保存 所有圆的中心和半径 如果: std::vector<Circle> circles;

2、在 OnLButtonDown 里面将 圆心的位置(即鼠标的位置)和圆半径 保存到circles 中; circles.push();

3、在 OnDraw 里面,遍历circles,
CDC *pDC(this)
for(所有的圆)
{
pDC->Ellipse