1、讲课笔记 Vc+ 6.0 直接绘图介绍(OnDraw) 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*
2、pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here for (int i=0;iSetPixel(i+10,100,RGB(i,0,0); for (int j=0;jSetPixel(j+10,200,pDC-GetPixel(j+10,100); 函数中三种有获得设备环境对象的方法都使用了,在实际应用中,使用其中一种即可。 void CDrawTestView:Draw(CDC *pDC) pDC-LineTo(200,100);/使用传入的 CDC 对象指针绘图 CCli
3、entDC 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); /释放设备指针 菜单设置: 在资源编辑的
4、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
5、(abs(e)=1) for( y=y1;ySetPixel(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;iSetPixel(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( y=y1;ySetPixel(int(x+0.5),y,RGB(255,0,0); x=x+1/e; */ ReleaseDC(pDC); /释放设备指针