资源描述:
《图形学教案讲课笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、讲课笔记Vc++6.0直接绘图介绍(OnDraw)uSetPisel语句介绍:SetPixel函数用于绘制一个点,其函数声明如下:COLORREFSetPixel(intx,inty,COLORREFcrColor);COLORREFSetPixel(POINTpoint,COLORREFcrColor);GetPixel(intx,inty,COLORREFcrColor);COLORREFGetPixel(POINTpoint);例子:voidCDrawTestView::OnDraw(CDC*pDC){CD
2、rawTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedataherefor(inti=0;i<255;i=i+5){//绘制一系列红颜色程度不同的点pDC->SetPixel(i+10,100,RGB(i,0,0));}for(intj=0;j<255;j=j+5){//用与要绘制的点对应的点的颜色来绘制pDC->SetPixel(j+10,200,pDC->GetPixel(j+10,100));}}函数中三种有
3、获得设备环境对象的方法都使用了,在实际应用中,使用其中一种即可。voidCDrawTestView::Draw(CDC*pDC){pDC->LineTo(200,100);//使用传入的CDC对象指针绘图CClientDCdc(this);//构造CClientDC设备环境对象dc.LineTo(200,200);//利用构造的CClientDC设备环境对象绘图CDC*p=this->GetDC();//通过GetDC函数获得设备环境对象指针p->LineTo(100,200);//利用GetDC函数获得设备环境
4、对象指针绘图this->ReleaseDC(p);//由GetDC函数获得的设备环境对象必须用ReleaseDC函数释放}DDA直线绘制方法:CDC*Pdc=GetDC();//获得设备指针ReleaseDC(pDC);//释放设备指针菜单设置:在资源编辑的MENU下双击IDR_MAINFRAME,制作菜单,在菜单上按右键,选CLASSWIZARD,选command后,双击下面的选项,进入编码设计。(见caidan)voidCMainFrame::OnDrawDda(){//TODO:Addyourcommand
5、handlercodehereCDC*pDC=GetDC();//获得设备指针intx1=100,y1=300,x2=300,y2=400;floatx,y;floatdx,dy,e;dx=(float)(x2-x1),dy=(float)(y2-y1);e=dy/dx,y=y1;if(abs(e)<1){for(floatx=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+
6、+){pDC->SetPixel(int(x+0.5),y,RGB(255,0,0));x=x+1/e;}}ReleaseDC(pDC);//释放设备指针}CDC*pDC=GetDC();//获得设备指针doublex1=100,y1=200,x2=200,y2=300;floatx,y;floatdx,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(inti=1;i<=e;i++){pDC-
7、>SetPixel((int)(x+0.5),(int)(y+0.5),RGB(255,0,0));x+=dx;y+=dy;}另书中实现方法:/*floatx,y;floatdx,dy,e;dx=(float)(x2-x1),dy=(float)(y2-y1);e=dy/dx,y=y1;if(abs(e)<1){for(floatx=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
8、;y++){pDC->SetPixel(int(x+0.5),y,RGB(255,0,0));x=x+1/e;}}*/ReleaseDC(pDC);//释放设备指针