资源描述
讲课笔记
Vc++ 6.0 直接绘图介绍(OnDraw)
u SetPisel语句介绍:SetPixel函数用于绘制一个点,其函数声明如下:
COLORREF SetPixel(int x, int y, COLORREF crColor);
COLORREF SetPixel(POINT point, COLORREF crColor);
GetPixel(int x, int y, COLORREF crColor );
COLORREF GetPixel(POINT point);
例子:
void CDrawTestView::OnDraw(CDC* pDC)
{
CDrawTestDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
for (int i=0;i<255;i=i+5)
{
//绘制一系列红颜色程度不同的点
pDC->SetPixel(i+10,100,RGB(i,0,0));
}
for (int j=0;j<255;j=j+5)
{
//用与要绘制的点对应的点的颜色来绘制
pDC->SetPixel(j+10,200,pDC->GetPixel(j+10,100));
}
}
函数中三种有获得设备环境对象的方法都使用了,在实际应用中,使用其中一种即可。
void CDrawTestView::Draw(CDC *pDC)
{
pDC->LineTo(200,100);//使用传入的CDC对象指针绘图
CClientDC dc(this);//构造CClientDC设备环境对象
dc.LineTo(200,200);//利用构造的CClientDC设备环境对象绘图
CDC* p=this->GetDC();//通过GetDC函数获得设备环境对象指针
p->LineTo(100,200);//利用GetDC函数获得设备环境对象指针绘图
this->ReleaseDC(p);//由GetDC函数获得的设备环境对象必须用ReleaseDC函数释放
}
DDA直线绘制方法:
CDC* Pdc=GetDC(); //获得设备指针
ReleaseDC(pDC); //释放设备指针
菜单设置:
在资源编辑的MENU下双击IDR_MAINFRAME,
制作菜单,在菜单上按右键,选CLASSWIZARD,选command后,双击下面的选项,进入编码设计。
(见caidan)
void CMainFrame::OnDrawDda()
{
// TODO: Add your command handler code here
CDC* pDC=GetDC(); //获得设备指针
int x1=100,y1=300,x2=300,y2=400;
float x,y;
float dx,dy,e;
dx=(float)(x2-x1),dy=(float)(y2-y1);
e=dy/dx,y=y1;
if(abs(e)<1)
{
for (float x=x1;x<=x2;x++)
{
pDC->SetPixel(x,int(y+0.5),RGB(255,0,0));
y=y+e;
}
}
if(abs(e)>=1)
{
for( y=y1;y<=y2;y++)
{
pDC->SetPixel(int(x+0.5),y,RGB(255,0,0));
x=x+1/e;
}
}
ReleaseDC(pDC); //释放设备指针
}
CDC* pDC=GetDC(); //获得设备指针
double x1=100,y1=200,x2=200,y2=300;
float x,y;
float dx,dy,e;
dx = x2 -x1;
dy = y2- y1;
e = (abs(dx) > abs(dy)) ? abs(dx):abs(dy);
dx/=e;
dy/=e;
x = x1;
y = y1;
for (int i=1;i<=e;i++)
{
pDC->SetPixel((int)(x+0.5),(int)(y+0.5),RGB(255,0,0));
x+=dx;
y+=dy;
}
另书中实现方法:
/* float x,y;
float dx,dy,e;
dx=(float)(x2-x1),dy=(float)(y2-y1);
e=dy/dx,y=y1;
if(abs(e)<1)
{
for (float x=x1;x<=x2;x++)
{
pDC->SetPixel(x,int(y+0.5),RGB(255,0,0));
y=y+e;
}
}
if(abs(e)>=1)
{
for( y=y1;y<=y2;y++)
{
pDC->SetPixel(int(x+0.5),y,RGB(255,0,0));
x=x+1/e;
}
}
*/
ReleaseDC(pDC); //释放设备指针
展开阅读全文