⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zgfx.cpp

📁 wince (windows mobile)绘制的很好实例,可以作为视频开发的参考
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		{
			m_psurf->Unlock(0);
			break;
		}
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxDrawPixel(int x, int y, unsigned short color)
{
BYTE *ptr;

	if(x>=m_screenbufwidth || y>=m_screenbufheight || x<0 || y<0)
	{
		return GfxParameterError;
	}

	ptr=(BYTE *)m_screenbuf;
	*(WORD *)(ptr + (x * BUFFER_XPITCH) + (y * BUFFER_YPITCH))=color;
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetPixelColor(int x, int y, unsigned short *pdest)
{
BYTE *ptr;

	if(x>=m_screenbufwidth || y>=m_screenbufheight || x<0 || y<0)
	{
		*pdest=0;
		return GfxParameterError;
	}

	ptr=(BYTE *)m_screenbuf;
	*pdest=*(WORD *)(ptr + (x * BUFFER_XPITCH) + (y * BUFFER_YPITCH));
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxFillRect(GfxRect rect, unsigned short color)
{
register WORD x,y,w,h;

	w=rect.w;
	h=rect.h;

	for(x=0;x<w;x++)
	{
		for(y=0;y<h;y++)
		{
			GfxDrawPixel(x+rect.x,y+rect.y,color);
		}
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxClearScreen(bool update)
{
	memset((void *)m_screenbuf, 0, m_screenbufsize);
	if(update)
	{
		GfxUpdateScreen();
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxFillHWBuffer(unsigned short color)
{
register int x,y,maxx,maxy,xp,yp;
register BYTE *dest;

	//pre-blit pointer init
	switch(m_usedsubsys)
	{
		case gfxGAPI:
		{
			m_framebuf=m_GXBeginDraw();
			if(!m_framebuf)
			{
				return GfxBegindrawFailed;
			}
			break;
		}
		case gfxDirectDraw:
		{
			m_ddsd.dwSize = sizeof(m_ddsd);
			if(DD_OK!=m_psurf->Lock(0, &m_ddsd, DDLOCK_WAITNOTBUSY, 0))
			{
				return GfxSurfaceLockFailed;	
			}
			m_framebuf=m_ddsd.lpSurface;
			break;
		}
	}

	dest=(BYTE *)m_framebuf;

	maxx=m_framebufwidth;
	maxy=m_framebufheight;

	xp=m_xpitch;
	yp=m_ypitch;

	for(y=0;y<maxy;y++)
	{
		for(x=0;x<maxx;x++)
		{
			*(WORD *)dest=color;
			dest+=xp;
		}
		dest-=maxx*xp;
		dest+=yp;
	}

	//post-blit stuff
	switch(m_usedsubsys)
	{
		case gfxGAPI:
		{
			m_GXEndDraw();
			break;
		}
		case gfxDirectDraw:
		{
			m_psurf->Unlock(0);
			break;
		}
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxClearHWBuffer()
{
register int x,y,maxx,maxy,xp,yp;
register BYTE *dest;

	//pre-blit pointer init
	switch(m_usedsubsys)
	{
		case gfxGAPI:
		{
			m_framebuf=m_GXBeginDraw();
			if(!m_framebuf)
			{
				return GfxBegindrawFailed;
			}
			break;
		}
		case gfxDirectDraw:
		{
			m_ddsd.dwSize = sizeof(m_ddsd);
			if(DD_OK!=m_psurf->Lock(0, &m_ddsd, DDLOCK_WAITNOTBUSY, 0))
			{
				return GfxSurfaceLockFailed;	
			}
			m_framebuf=m_ddsd.lpSurface;
			break;
		}
	}

	dest=(BYTE *)m_framebuf;

	//quick erase
	if(m_xpitch==2 && m_ypitch==2*m_framebufwidth)
	{
		memset((void *)dest, 0, m_framebufsize);
	}
	else
	{
		maxx=m_framebufwidth;
		maxy=m_framebufheight;

		xp=m_xpitch;
		yp=m_ypitch;

		for(y=0;y<maxy;y++)
		{
			for(x=0;x<maxx;x++)
			{
				*(WORD *)dest=0;
				dest+=xp;
			}
			dest-=maxx*xp;
			dest+=yp;
		}
	}	

	//post-blit stuff
	switch(m_usedsubsys)
	{
		case gfxGAPI:
		{
			m_GXEndDraw();
			break;
		}
		case gfxDirectDraw:
		{
			m_psurf->Unlock(0);
			break;
		}
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxDrawLine(int sx, int sy, int dx, int dy, unsigned short color)
{
bool steep;
register int deltax, deltay, error, x, y, ystep;
int temp;

	deltax=dx-sx;
	deltay=abs(dy-sy);

	steep=abs(dy-sy)>abs(dx-sx);

	if(steep)
	{
		temp=sx;
		sx=sy;
		sy=temp;
		temp=dx;
		dx=dy;
		dy=temp;
	}
	if(sx>dx)
	{
		temp=dx;
		dx=sx;
		sx=temp;
	
		temp=dy;
		dy=sy;
		sy=temp;
	}

	if(sy!=dy)
	{
		if(sy<dy)
		{
			ystep=1;
		}else
		{
			ystep=-1;
		}
	}
	else
	{
		ystep=0;
	}

	y=sy;
	error=0;
	for(x=sx; x<dx; x++)
	{
		if(steep)
		{
			GfxDrawPixel(y,x,color);
		}
		else
		{
			GfxDrawPixel(x,y,color);
		}
		error+=deltax;
		if(error>deltay)
		{
			y+=ystep;		
			error-=deltay;
		}
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetWidth(int *pdest)
{
	if(m_gfxinited)
	{
		*pdest=m_screenbufwidth;
		return GfxOK;
	}
	else
	{
		return GfxNoSurface;
	}
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetHeight(int *pdest)
{
	if(m_gfxinited)
	{
		*pdest=m_screenbufheight;
		return GfxOK;
	}
	else
	{
		return GfxNoSurface;
	}
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetPixelAddress(int x, int y, unsigned short **ppdest)
{
BYTE *ptr;

	if(x>=m_screenbufwidth || y>=m_screenbufheight || x<0 || y<0)
	{
		*ppdest=0;
		return GfxParameterError;
	}

	ptr=(BYTE *)m_screenbuf;
	*ppdest=(unsigned short *)(ptr + (x * BUFFER_XPITCH) + (y * BUFFER_YPITCH));
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetBufferYPitch(int *pdest)
{
	if(m_gfxinited)
	{
		*pdest=BUFFER_YPITCH;
		return GfxOK;
	}
	else
	{
		return GfxNoSurface;
	}
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetXCenter(int *pdest)
{
	if(m_gfxinited)
	{
		*pdest=m_xcenter;
		return GfxOK;
	}
	else
	{
		return GfxNoSurface;
	}
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetYCenter(int *pdest)
{
	if(m_gfxinited)
	{
		*pdest=m_ycenter;
		return GfxOK;
	}
	else
	{
		return GfxNoSurface;
	}
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxGetKeys(GfxOrientation ori, GfxKeys *pdest)
{
int param;
GXKeyList gxkeys;

	param=GX_NORMALKEYS;

	switch(ori)
	{
		case gfxPortrait:
		{
			param=GX_NORMALKEYS;
			break;
		}
		case gfxLandscape:
		{
			param=GX_LANDSCAPEKEYS;
			break;
		}
	}

	if(m_GXGetDefaultKeys)
	{
		gxkeys=m_GXGetDefaultKeys(param);
		pdest->Left=gxkeys.vkLeft;
		pdest->Right=gxkeys.vkRight;
		pdest->Up=gxkeys.vkUp;
		pdest->Down=gxkeys.vkDown;
		pdest->A=gxkeys.vkA;
		pdest->B=gxkeys.vkB;
		pdest->C=gxkeys.vkC;
		pdest->S=gxkeys.vkStart;
		return GfxOK;
	}
	else
	{
		return GfxError;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -