亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? zgfx.cpp

?? wince (windows mobile)繪制的很好實例,可以作為視頻開發的參考
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <Windows.h>
#include "zgfx.h"
#include <gx.h>

#define BUFFER_XPITCH 2
#define BUFFER_YPITCH 2*m_screenbufwidth

//////////////////////////////////////////////////////////////////////////
GfxSubsys ZGfx::GfxGetSubSys()
{
	return m_usedsubsys;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxSuspend()
{
	if(m_usedsubsys==gfxGAPI && m_GXSuspend)
	{
		m_GXSuspend();
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxResume()
{
	if(m_usedsubsys==gfxGAPI && m_GXResume)
	{
		m_GXResume();
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
bool ZGfx::GfxInitGAPI()
{
GXDisplayProperties prop;
int sw, sh;

	prop=m_GXGetDisplayProperties();
	m_cbpp=prop.cBPP;
	m_ypitch=prop.cbyPitch;
	m_xpitch=prop.cbxPitch;
	m_framebufheight=(unsigned short)prop.cyHeight;
	m_framebufwidth=(unsigned short)prop.cxWidth;

	if(!(prop.ffFormat&kfDirect565))
	{
		return false;
	}

	//now if it is a vga device, we have to check if GAPI's not messing it up
	sw=GetSystemMetrics(SM_CXSCREEN);
	sh=GetSystemMetrics(SM_CYSCREEN);
	if(sw!=prop.cxWidth || sh!=prop.cyHeight)
	{
		return false;
	}
	return true;
}

//////////////////////////////////////////////////////////////////////////
bool ZGfx::GfxInitDirectDraw()
{
LONG hr;

	hr=m_DirectDrawCreate(0, (IUnknown **)&m_pdd, 0);
	if(hr!=DD_OK)
	{
		return false;
	}

	hr=m_pdd->SetCooperativeLevel(m_hwnd, DDSCL_FULLSCREEN);
	if(hr!=DD_OK)
	{
		m_pdd->Release();
		m_pdd=0;
		return false;
	}

	memset((void *)&m_ddsd, 0, sizeof(m_ddsd));
	m_ddsd.dwSize = sizeof(m_ddsd);
	m_ddsd.dwFlags = DDSD_CAPS;
	m_ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;	//no back buffering, only use the visible display area

	//create surface (entire screen)
	hr=m_pdd->CreateSurface(&m_ddsd, &m_psurf, NULL);
	if(hr!=DD_OK )
	{
		m_pdd->Release();
		m_pdd=0;
		return false;
	}

	//get parameters with locking
	memset((void *)&m_ddsd, 0, sizeof(m_ddsd));
	m_ddsd.dwSize = sizeof(m_ddsd);
	hr=m_psurf->Lock(0, &m_ddsd, DDLOCK_WAITNOTBUSY, 0);
	if(hr!=DD_OK)
	{
		m_psurf->Release();
		m_psurf=0;
		m_pdd->Release();
		m_pdd=0;
		return false;
	}

	m_cbpp=m_ddsd.ddpfPixelFormat.dwRGBBitCount;
	m_xpitch=m_ddsd.lXPitch;
	m_ypitch=m_ddsd.lPitch;
	m_framebufwidth=(unsigned short)m_ddsd.dwWidth;
	m_framebufheight=(unsigned short)m_ddsd.dwHeight;

	//finally unlock surface
	m_psurf->Unlock(0);
	return true;
}

//////////////////////////////////////////////////////////////////////////
bool ZGfx::GfxLoadDirectDraw()
{
	m_hDD=LoadLibrary(L"ddraw.dll");
	if(m_hDD)
	{
		m_DirectDrawCreate=(DIRECTDRAWCREATE)GetProcAddress(m_hDD, L"DirectDrawCreate");
		return true;
	}
	else
	{
		return false;
	}
}

//////////////////////////////////////////////////////////////////////////
bool ZGfx::GfxInitRawFrameBufferAccess()
{
RawFrameBufferInfo rfbi;
HDC hdc;
bool retval;

	retval=false;
	hdc=GetDC(m_hwnd);		
	if(hdc)
	{
		if(ExtEscape(hdc, GETRAWFRAMEBUFFER, 0, 0, sizeof(RawFrameBufferInfo), (char *) &rfbi))
		{
			if(rfbi.wFormat==FORMAT_565)
			{
				m_framebufwidth=rfbi.cxPixels;
				m_framebufheight=rfbi.cyPixels;
				m_xpitch=rfbi.cxStride;
				m_ypitch=rfbi.cyStride;
				m_cbpp=rfbi.wBPP;
				m_framebuf=rfbi.pFramePointer;
				retval=true;
			}
		}
		ReleaseDC(m_hwnd,hdc);
	}
	return retval;
}

//////////////////////////////////////////////////////////////////////////
bool ZGfx::GfxIsInitialized()
{
	return m_gfxinited;
}

//////////////////////////////////////////////////////////////////////////
bool ZGfx::GfxLoadGAPI()
{

	m_hGAPI=LoadLibrary(L"gx.dll");

	if(m_hGAPI)
	{
		m_GXOpenDisplay=(GXOPENDISPLAY)GetProcAddress(m_hGAPI, L"?GXOpenDisplay@@YAHPAUHWND__@@K@Z");
		m_GXCloseDisplay=(FARPROC)GetProcAddress(m_hGAPI, L"?GXCloseDisplay@@YAHXZ");
		m_GXGetDisplayProperties=(GXGETDISPLAYPROPERTIES)GetProcAddress(m_hGAPI, L"?GXGetDisplayProperties@@YA?AUGXDisplayProperties@@XZ");
		m_GXBeginDraw=(GXBEGINDRAW)GetProcAddress(m_hGAPI, L"?GXBeginDraw@@YAPAXXZ");
		m_GXEndDraw=(FARPROC)GetProcAddress(m_hGAPI, L"?GXEndDraw@@YAHXZ");
		m_GXOpenInput=(FARPROC)GetProcAddress(m_hGAPI, L"?GXOpenInput@@YAHXZ");
		m_GXCloseInput=(FARPROC)GetProcAddress(m_hGAPI, L"?GXCloseInput@@YAHXZ");
		m_GXGetDefaultKeys=(GXGETDEFAULTKEYS)GetProcAddress(m_hGAPI, L"?GXGetDefaultKeys@@YA?AUGXKeyList@@H@Z");
		m_GXSuspend=(FARPROC)GetProcAddress(m_hGAPI, L"?GXSuspend@@YAHXZ");
		m_GXResume=(FARPROC)GetProcAddress(m_hGAPI, L"?GXResume@@YAHXZ");
		return true;
	}
	else
	{
		return false;
	}
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxCreateSurface(HWND hwnd, unsigned short width, unsigned short height, GfxSubsys *pUsedSubsys)
{
m_gfxinited=false;
OSVERSIONINFO osver;
bool dll_loaded=false;

	m_usedsubsys=gfxNone;
	//check windows version: must be pocket pc 2003 or windows mobile 5
	if(GetVersionEx(&osver)==false)
	{
		return GfxWindowsVersionError;
	}

	if(osver.dwMajorVersion<4)
	{
		return GfxWindowsVersionError;
	}
	
	m_hwnd=hwnd;

	if(!IsWindow(m_hwnd))
	{
		return GfxParameterError;
	}

	//scaling not supported
	if(width > GetSystemMetrics(SM_CXSCREEN) || height > GetSystemMetrics(SM_CYSCREEN))
	{
		return GfxParameterError;
	}

	//load GAPI lib - required for at least getting keycodes
	dll_loaded=GfxLoadGAPI();

	if(m_GXOpenInput) m_GXOpenInput();
	if(m_GXOpenDisplay) m_GXOpenDisplay(m_hwnd, GX_FULLSCREEN);	

	//decide which subsystem to use
	//first try raw framebuffer access
	if(GfxInitRawFrameBufferAccess())
	{
		m_usedsubsys=gfxRawFrameBuffer;
	}
	else
	{
		//otherwise if WM5, load DirectDraw
		if(osver.dwMajorVersion>4 && GfxLoadDirectDraw() && GfxInitDirectDraw())
		{
			m_usedsubsys=gfxDirectDraw;
		}
		else
		{
			//try gapi...
			if(GfxInitGAPI())
			{
				m_usedsubsys=gfxGAPI;
			}
			else
			//doh
			{
				return GfxUnsupportedDevice;
			}
		}
	}

	m_screenbufwidth=width;
	m_screenbufheight=height;

	if(m_cbpp!=16)
	{
		return GfxUnsupportedDevice;
	}

	m_framebufsize=m_framebufheight * m_framebufwidth * 2;
	m_screenbufsize=m_screenbufwidth * m_screenbufheight * 2;
	m_screenbuf=malloc(m_screenbufsize);

	if(!m_screenbuf)
	{
		return GfxMallocError;
	}

	//calculate centering offsets
	m_xcenter=m_ycenter=0;

	if(m_framebufwidth>m_screenbufwidth)
	{
		m_xcenter=(m_framebufwidth-m_screenbufwidth)/2;
	}
	if(m_framebufheight>m_screenbufheight)
	{
		m_ycenter=(m_framebufheight-m_screenbufheight)/2;
	}

	m_gfxinited=true;
	*pUsedSubsys=m_usedsubsys;
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxUninit()
{
	switch(m_usedsubsys)
	{
		case gfxGAPI:
		{
			if(m_GXEndDraw) m_GXEndDraw();
			break;
		}
		case gfxDirectDraw:
		{
			try
			{
				m_psurf->Release();
				m_psurf=0;
				m_pdd->Release();
				m_pdd=0;
			}
			catch (...)
			{
			}
			break;
		}
	}

	if(m_GXCloseInput) m_GXCloseInput();
	if(m_GXCloseDisplay) m_GXCloseDisplay();

	if(m_screenbuf)
	{
		free(m_screenbuf);
	}
	return GfxOK;
}

//////////////////////////////////////////////////////////////////////////
GfxRetval ZGfx::GfxUpdateScreen()
{
register WORD x,y,maxx,maxy;
register int xpitch,ypitch;
register BYTE *psrc, *pdest;

	//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;
		}
	}

	pdest=(BYTE *)m_framebuf;
	psrc=(BYTE *)m_screenbuf;

	xpitch=m_xpitch;
	ypitch=m_ypitch;

	pdest+=xpitch*m_xcenter;
	pdest+=ypitch*m_ycenter;

	//quick blit
	if(m_xpitch==2 && m_ypitch==2*m_screenbufwidth)
	{
		memcpy((void *)pdest, (void *)psrc, m_screenbufsize);
	}
	else
	//slow blit - pixel copy
	{
		maxx=m_screenbufwidth;
		maxy=m_screenbufheight;

		for(y=0;y<maxy;y++)
		{
			for(x=0;x<maxx;x++)
			{
				*(WORD *)pdest=*(WORD *)psrc;
				pdest+=xpitch;			
				psrc+=2;
			}
			pdest-=maxx*xpitch;
			pdest+=ypitch;
		}
	}

	//post-blit stuff
	switch(m_usedsubsys)
	{
		case gfxGAPI:
		{
			m_GXEndDraw();
			break;
		}
		case gfxDirectDraw:

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费观看一级特黄欧美大片| 欧美精品自拍偷拍动漫精品| 国产午夜久久久久| 国产一区二区在线影院| 欧美mv日韩mv国产网站| 韩国女主播成人在线| 日韩欧美国产电影| 国产成人免费视频网站| 国产精品不卡在线观看| 色噜噜狠狠一区二区三区果冻| 亚洲在线视频网站| 欧美蜜桃一区二区三区 | 国产日韩精品一区二区三区在线| 国产成人免费视频网站| 亚洲美女精品一区| 日韩一区二区三区免费看| 国产乱子伦视频一区二区三区 | 国产在线播放一区二区三区 | 一区二区三区免费在线观看| 69av一区二区三区| 国产高清成人在线| 亚洲综合清纯丝袜自拍| 日韩欧美久久一区| 99久久精品免费看国产免费软件| 一区二区三区电影在线播| 日韩女优av电影在线观看| 成人动漫在线一区| 五月综合激情网| 久久一区二区视频| 欧美性生活久久| 国产中文一区二区三区| 樱花影视一区二区| 国产精品日产欧美久久久久| 色欧美片视频在线观看| 老司机精品视频线观看86| 中文字幕日本乱码精品影院| 91精品国产福利在线观看| 国产69精品久久久久毛片| 香蕉av福利精品导航| 久久综合狠狠综合久久激情| 91久久国产最好的精华液| 狠狠色丁香久久婷婷综合丁香| 亚洲欧美日韩成人高清在线一区| 欧美一区二区日韩一区二区| 99国产精品久久久久久久久久久| 秋霞午夜鲁丝一区二区老狼| 亚洲欧美国产77777| 久久久精品综合| 91精品国产一区二区三区| aa级大片欧美| 国产麻豆视频精品| 日韩成人午夜电影| 亚洲午夜电影在线| 国产精品久久久久桃色tv| 精品国产一二三| 欧美日韩一级片在线观看| 91丨porny丨中文| 国产精品资源在线| 久久综合综合久久综合| 日韩福利电影在线观看| 亚洲在线视频一区| 一区二区在线观看免费视频播放| 国产精品欧美经典| 中文字幕欧美激情一区| 久久在线观看免费| 精品久久久久久久久久久院品网| 欧美日韩一区不卡| 欧美在线观看视频一区二区 | 综合在线观看色| 日本一区二区综合亚洲| 久久亚区不卡日本| 精品免费国产一区二区三区四区| 欧美精品成人一区二区三区四区| 欧美无砖砖区免费| 色综合视频一区二区三区高清| 高清成人免费视频| 国产精品白丝jk黑袜喷水| 成人在线视频首页| 在线免费精品视频| 男男gaygay亚洲| 日韩福利电影在线观看| 秋霞电影一区二区| 久久精品国产成人一区二区三区| 日韩和欧美一区二区| 美国三级日本三级久久99| 丝袜亚洲另类欧美| 日本少妇一区二区| 韩国成人精品a∨在线观看| 老司机免费视频一区二区三区| 韩国精品一区二区| 成人美女视频在线观看| 99久久精品国产麻豆演员表| 91成人国产精品| 欧美日韩国产天堂| 91麻豆精品国产91久久久更新时间 | 欧美日韩国产不卡| 91精品国产福利| 国产午夜精品久久久久久久| 中文字幕国产一区二区| 中文字幕一区在线观看| 亚洲一区二区欧美激情| 视频一区二区欧美| 国产在线看一区| 99在线精品一区二区三区| 在线观看成人免费视频| 欧美一区二区三区小说| 精品国产免费久久| 国产精品美女久久久久久| 亚洲国产精品一区二区www| 日韩二区在线观看| 丁香五精品蜜臀久久久久99网站 | 91精品在线观看入口| 精品久久久久久久久久久院品网| 亚洲欧洲99久久| 日日骚欧美日韩| 成人精品小蝌蚪| 欧美高清视频www夜色资源网| 欧美va亚洲va| 亚洲欧美日韩中文播放| 国产一区二区不卡老阿姨| 在线看国产一区| 久久免费的精品国产v∧| 亚洲香肠在线观看| 国产成人亚洲综合a∨婷婷| 欧美在线免费观看亚洲| 日本一区二区三区电影| 日韩成人免费电影| 99视频超级精品| 久久免费偷拍视频| 亚洲一区二区三区小说| 国产一区二区导航在线播放| 欧美麻豆精品久久久久久| 欧美激情一区二区| 蜜桃av一区二区三区| 欧美在线free| 国产精品欧美久久久久一区二区| 麻豆一区二区在线| 欧美视频在线不卡| 国产精品久久久久久久岛一牛影视| 日韩福利视频网| 欧美视频一区二| 亚洲欧洲日韩在线| 国产一区在线观看视频| 日韩一区二区三区电影 | 亚洲欧洲精品天堂一级| 国产米奇在线777精品观看| 91精品视频网| 亚洲福利一二三区| 91女神在线视频| 国产精品入口麻豆原神| 久久精品免费观看| 欧美一级国产精品| 婷婷国产在线综合| 欧美精品一二三| 亚洲成a人v欧美综合天堂下载| 色婷婷精品大视频在线蜜桃视频| 国产精品美女久久久久久久网站| 国产成人综合亚洲91猫咪| 精品av久久707| 久久成人免费电影| 精品理论电影在线| 久久精品免费观看| 26uuu亚洲婷婷狠狠天堂| 蓝色福利精品导航| 日韩免费一区二区三区在线播放| 免费成人美女在线观看.| 欧美一区在线视频| 日本特黄久久久高潮| 91麻豆精品91久久久久久清纯 | 亚洲女同ⅹxx女同tv| 91蝌蚪porny成人天涯| 亚洲欧美激情视频在线观看一区二区三区| 不卡的av网站| 一区在线中文字幕| 91老师片黄在线观看| 亚洲一区二区三区自拍| 欧美美女喷水视频| 老汉av免费一区二区三区| 久久久99久久| av在线播放不卡| 一区二区三区国产精华| 欧美精品久久久久久久多人混战| 日韩av一区二区三区| 精品福利一二区| 99视频一区二区三区| 亚洲线精品一区二区三区 | 欧美色男人天堂| 天天色综合成人网| 日韩欧美久久久| 国产成人精品免费| 亚洲精品视频一区二区| 欧美猛男超大videosgay| 久久av老司机精品网站导航| 国产亚洲精品精华液| 91麻豆国产香蕉久久精品| 一区二区三区不卡视频| 56国语精品自产拍在线观看| 国产乱码精品一区二区三区五月婷| 国产欧美一二三区| 在线中文字幕不卡|