// shiyan2View.h : Cshiyan2View 类的接口
// 生成的消息映射函数
void DrawCircle(CDC*pDC,int x,int y,int r,COLORREF c,int w=1);
void DrawGrid(CDC*pDC,int xlines,int ylines,COLORREF c,int w=1);
void DDALine(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF c);
void MIDLine(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF c);
void BHLine(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF c);
void IBHLine(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF c);
// shiyan2View.cpp : Cshiyan2View 类的实现
// Cshiyan2View 绘制
CDC*pDC=GetDC();
DrawGrid(pDC,20,20,RGB(255,0,0),1);//绘制坐标格网
DrawCircle(pDC,20,5,2,RGB(0,0,0),1);//绘制格网点
ReleaseDC(pDC);
// Cshiyan2View 消息处理程序
//图形学自定义
/*
函数说明:绘制圆点
参数说明:
*pDC,设备上下文指针
x,x坐标
y,y坐标
r,半径
c,颜色,使用RGB(0,0,0)指定
w,线宽,默认为1
*/
void Cshiyan2View::DrawCircle(CDC*pDC,int x,int y,int r,COLORREF c,int w)
{
CPen MyPen;
MyPen.CreatePen(PS_SOLID,w,c);
pDC->SelectObject(&MyPen);
CBrush MyBrush;
MyBrush.CreateSolidBrush(c);
pDC->Ellipse(x*10-r,y*10-r,x*10+r,y*10+r);
MyPen.DeleteObject();
MyBrush.DeleteObject();
}
//图形学自定义
/*
函数说明:定义坐标系和绘制格网
参数说明:
*pDC,设备上下文指针
xlines,第一象限水平方向坐标格网的行数
ylines,第一象限竖直方向坐标格网的行数
c,颜色,使用RGB(0,0,0)指定
w,线宽,默认为1
*/
void Cshiyan2View::DrawGrid(CDC*pDC,int xlines,int ylines,COLORREF c,int w)
{
CPen MyPen;
MyPen.CreatePen(PS_SOLID,w,c);
pDC->SelectObject(&MyPen);
//定义坐标系,x轴向上,y轴向右,原点在客户区正中间。
CRect rect;
GetClientRect(&rect);
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetViewportOrg(rect.right/2,rect.bottom/2);
pDC->SetWindowOrg(0,0);
pDC->SetWindowExt(rect.right,-rect.bottom);
pDC->SetViewportExt(rect.right,rect.bottom);
//绘制格网
for(int i=0;i<=ylines;i++)//水平方向
{
pDC->MoveTo(xlines*10,i*10);
pDC->LineTo(-xlines*10,i*10);
pDC->MoveTo(xlines*10,-i*10);
pDC->LineTo(-xlines*10,-i*10);
}
for(int j=0;j<=xlines;j++)//竖直方向
{
pDC->MoveTo(j*10,ylines*10);
pDC->LineTo(j*10,-ylines*10);
pDC->MoveTo(-j*10,ylines*10);
pDC->LineTo(-j*10,-ylines*10);
}
MyPen.DeleteObject();
}
//DDA直线扫描转换
void Cshiyan2View::DDALine(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF c)
{
float dx,dy,y,k;
dx=x1-x0,dy=y1-y0;
k=dy/dx,y=y0;
for(int x=x0;x<=x1;x++)
{
DrawCircle(pDC,x,int(y+0.5),5,c);
y=y+k;
}
}
//中点画线法直线扫描转换
void Cshiyan2View::MIDLine(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF c)
{
int a,b,d1,d2,d,x,y;
a=y0-y1,b=x1-x0,d=2*a+b;
d1=2*a,d2=2+(a+b);
x=x0,y=y0;
DrawCircle(pDC,x,y,5,c);
while(x<x1)
{
if(d<0)
{x++,y++,d+=d2;}
else
{x++,d+=d1;}
DrawCircle(pDC,x,y,5,c);
}
}
//Bresenham直线扫描转换
void Cshiyan2View::BHLine(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF c)
{
int x,y,dx,dy,e;
dx=x1-x0,dy=y1-y0,e=-dx;
x=x0,y=y0;
for(int i=0;i<=dx;i++)
{
DrawCircle(pDC,x,y,5,c);
x++,e=e+2*dy;
if(e>=0){y++,e=e-2*dx;}
}
}
//改进Bresenham直线扫描转换
void Cshiyan2View::IBHLine(CDC *pDC,int x0,int y0,int x1,int y1,COLORREF c)
{
int x,y,dx,dy,e;
dx=x1-x0,dy=y1-y0,e=-dx;
x=x0,y=y0;
for(int i=0;i<=dx;i++)
{
DrawCircle(pDC,x,y,5,c);
x++,e=e+2*dy;
if(e>=0){y++,e=e-2*dx;}
}
}
输出结果只有一个网格

------解决思路----------------------
会不会屏幕小,没显示全。楼主,你把显示椭圆的位置调一上试试。
而且
CBrush MyBrush;
MyBrush.CreateSolidBrush(c);
你只是创建了画刷而已,并没有添加到dc中