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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? wmcal.cpp

?? wince (windows mobile)繪制的很好實(shí)例,可以作為視頻開發(fā)的參考
?? CPP
字號(hào):
// Caleidoscope for Windows Mobile
// coded by dzolee - demeter_z@freemail.hu
// http://dzolee.blogspot.com


#include "stdafx.h"
#include "wmcal.h"
#include <windows.h>
#include "timer.h"
#include "..\zgfx\zgfx.h"

// Global Variables:
HINSTANCE g_hInst;			//current instance
HWND g_hWnd;				//window handle
ZGfx g_gfx;
int g_focus;
bool g_running;
int g_screen_w, g_screen_h;
int g_frames;
//displayed gems.
gem g_gems[NUMBER_OF_GEMS];

//////////////////////////////////////////////////////////////////////////
ATOM			MyRegisterClass(HINSTANCE, LPTSTR);
BOOL			InitInstance(HINSTANCE, int);
LRESULT CALLBACK	WndProc(HWND, UINT, WPARAM, LPARAM);

//////////////////////////////////////////////////////////////////////////
//initialize gem colors and positions.
void RandomizeGems()
{
int i;

	for(i=0; i<NUMBER_OF_GEMS; i++)	
	{
		g_gems[i].x=rand() % (g_screen_w/2);
		g_gems[i].y=rand() % (g_screen_h/2);
		switch(rand()%3)
		{
			case 0:
			{
				g_gems[i].color=RGB_TO_565(rand(), 10, 10);
				break;
			}
			case 1:
			{
				g_gems[i].color=RGB_TO_565(10, 10, rand());
				break;
			}
			case 2:
			{
				g_gems[i].color=RGB_TO_565(10, rand(), 10);
				break;
			}
		}

		g_gems[i].color=RGB_TO_565(rand(), rand(), rand());
	}
}

//////////////////////////////////////////////////////////////////////////
//create caleidoscope effect by mirroring.
void DoMirror()
{
register int x, y, maxx, maxy, ypitch, line_size;
register unsigned short *psrc, *pdest;
GfxRetval gr;

	//get YPitch
	g_gfx.GfxGetBufferYPitch(&ypitch);
	//divide by 2, so we can add this to a WORD pointer
	ypitch>>=1;

	//mirror upper-left quarter to upper-right
	maxx=g_screen_w/2;
	maxy=g_screen_h/2;

	//get address of upper-left corner
	gr=g_gfx.GfxGetPixelAddress(0, 0, &psrc);
	if(gr==GfxOK)
	{
		//get address of last pixel in the first row.
		gr=g_gfx.GfxGetPixelAddress(g_screen_w-1, 0, &pdest);
		if(gr==GfxOK)
		{
			//copy pixels from left quarter to right quarter, with a mirroring
			for(y=0; y<maxy; y++)
			{
				for(x=0; x<maxx; x++)
				{
					*pdest--=*psrc++;
				}
				pdest+=maxx;
				pdest+=ypitch;
				psrc-=maxx;
				psrc+=ypitch;
			}
		}
	}

	//mirror upper half to bottom
	maxy=g_screen_h/2;
	line_size=g_screen_w*2;

	//get address of pixel at (0,0)
	gr=g_gfx.GfxGetPixelAddress(0, 0, &psrc);
	if(gr==GfxOK)
	{
		//get address of the last row on the screen
		gr=g_gfx.GfxGetPixelAddress(0, g_screen_h-1, &pdest);
		if(gr==GfxOK)
		{
			//copy line by line, with mirroring
			for(y=0; y<maxy; y++)
			{
				memcpy((void *)pdest, (void *)psrc, line_size);
				psrc+=ypitch;
				pdest-=ypitch;
			}
		}
	}
}

//////////////////////////////////////////////////////////////////////////
//this function is called periodically to render a frame.
void DrawFrame(double frametime)
{
register int i, gem_size, gem_step;
GfxRect rect;

	//increment frames counter
	g_frames++;
	//re-randomize the gem positions every 10 seconds.
	if(0==g_frames%(FRAMES_PER_SECOND * 10))
	{
		RandomizeGems();
		g_gfx.GfxClearScreen(false);
	}

	//calculate gem size and movement speed based on resolution
	gem_size=g_screen_w/48;
	gem_step=g_screen_w/96;

	//move & display gems
	for(i=0; i<NUMBER_OF_GEMS; i++)
	{
		//random replacing
		if(0==rand()%128)
		{
			g_gems[i].x=rand() % (g_screen_w/2);
			g_gems[i].y=rand() % (g_screen_h/2);
		}
		//gems can move in 8 directions (left, right, up, down, up-left, etc)
		switch(rand()%7)
		{
			case 0:
			{
				//check boundaries
				if(g_gems[i].x>gem_step)
				{
					g_gems[i].x-=gem_step;
				}
				break;
			}
			case 1:
			{
				//check boundaries
				if(g_gems[i].x>gem_step && g_gems[i].y>gem_step)
				{
					g_gems[i].x-=gem_step;
					g_gems[i].y-=gem_step;
				}
				break;
			}
			case 2:
			{
				//check boundaries
				if(g_gems[i].y>gem_step)
				{
					g_gems[i].y-=gem_step;
				}
				break;
			}
			case 3:
			{
				//check boundaries
				if(g_gems[i].y>gem_step && g_gems[i].x<g_screen_w/2)
				{
					g_gems[i].y-=gem_step;
					g_gems[i].x+=gem_step;
				}
				break;
			}
			case 4:
			{
				//check boundaries
				if(g_gems[i].x<g_screen_w/2)
				{
					g_gems[i].x+=gem_step;
				}
				break;
			}
			case 5:
			{
				//check boundaries
				if(g_gems[i].x<g_screen_w/2 && g_gems[i].y<g_screen_h/2)
				{
					g_gems[i].x+=gem_step;
					g_gems[i].y+=gem_step;
				}
				break;
			}
			case 6:
			{
				//check boundaries
				if(g_gems[i].y<g_screen_h/2)
				{
					g_gems[i].y+=gem_step;
				}
				break;
			}
			case 7:
			{
				//check boundaries
				if(g_gems[i].x>gem_step && g_gems[i].y<g_screen_h/2)
				{
					g_gems[i].x-=gem_step;
					g_gems[i].y+=gem_step;
				}
				break;
			}
		}

		//draw rectangle in upper-left quarter
		rect.h=rect.w=gem_size;
		rect.x=g_gems[i].x;
		rect.y=g_gems[i].y;
		g_gfx.GfxFillRect(rect, g_gems[i].color);
		//draw mirror of this rectangle, but still in upper-left quarter.
		//as a result it will seem as if there were 8 directions, while in fact there are only 4.
		rect.x=g_gems[i].y;
		rect.y=g_gems[i].x;
		g_gfx.GfxFillRect(rect, g_gems[i].color);
	}

	//perform mirroring
	DoMirror();

	//finally update screen - copy sw buffer to the video memory
	g_gfx.GfxUpdateScreen();
}

//////////////////////////////////////////////////////////////////////////
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPTSTR    lpCmdLine,
                   int       nCmdShow)
{
MSG msg;
RECT rc;
MEMORYSTATUS memory;
double lastupdate, passed;
GfxRetval gr;
GfxSubsys gs;

	//check available memory
	memory.dwLength=sizeof(MEMORYSTATUS);
	GlobalMemoryStatus(&memory);
	if(memory.dwAvailVirtual<5*1024*1024)
	{
		MessageBox(0,L"Not enough free memory.\nFree up some memory by closing other applications and try again.",L"Error",MB_OK|MB_ICONSTOP);
		return 0;
	}

	//init focus counter
	g_focus=0;

	// Perform application initialization:
	if(!InitInstance(hInstance, nCmdShow)) 
	{
		return FALSE;
	}

	//get screen dimensions
	g_screen_h=GetSystemMetrics(SM_CYSCREEN);
	g_screen_w=GetSystemMetrics(SM_CXSCREEN);

	//set fullscreen
	SHFullScreen(g_hWnd, SHFS_HIDETASKBAR | SHFS_HIDESTARTICON | SHFS_HIDESIPBUTTON);

	//resize window to cover screen
	SetRect(&rc, 0, 0, g_screen_w, g_screen_h);
	MoveWindow(g_hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, false);

	//use a rectangle instead of the whole screen
	if(g_screen_w != g_screen_h)
	{
		if(g_screen_w > g_screen_h)
		{
			g_screen_w=g_screen_h;
		}
		else
		{
			g_screen_h=g_screen_w;
		}
	}

	//init graphics
	gr=g_gfx.GfxCreateSurface(g_hWnd, g_screen_w, g_screen_h, &gs);

	if(gr!=GfxOK)
	{
		MessageBox(0,L"Could not initialize graphics. Your device might be incompatible with this program.",L"Error",MB_OK|MB_ICONSTOP);
		return 0;
	}

	//clear background
	g_gfx.GfxFillHWBuffer(RGB_TO_565(150, 150, 200));

	//init gem positions
	RandomizeGems();

	//init timer routines
	TimerInit();

	//init random number generator
	srand(GetTickCount());

	//prepare for the main loop
	lastupdate=0;	//last frame draw time in double
	g_running=true;

	// Main message loop:
	PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE);
	while(msg.message!=WM_QUIT && g_running)
	{
		if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else
		{
			//if focus got
			if(g_focus>0)
			{
				passed=TimerGetDouble();				//how much time passed since last update
				passed-=lastupdate;
				if(passed>1.0/FRAMES_PER_SECOND)		//limit framerate
				{
					lastupdate=TimerGetDouble();
					DrawFrame(passed);					//render frame
				}
			}
		}
	}
	return (int) msg.wParam;							//that's it
}

//////////////////////////////////////////////////////////////////////////
//this is a wizard-generated initialization function.
//it performs stuff required by Windows applications.
ATOM MyRegisterClass(HINSTANCE hInstance, LPTSTR szWindowClass)
{
	WNDCLASS wc;

	wc.style         = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc   = WndProc;
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;
	wc.hInstance     = hInstance;
	wc.hIcon         = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_WMCAL));
	wc.hCursor       = 0;
	wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName  = 0;
	wc.lpszClassName = L"WMCaleidoscope";

	return RegisterClass(&wc);
}

//////////////////////////////////////////////////////////////////////////
//this is a wizard-generated initialization function.
//it performs stuff required by Windows applications.
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

    g_hInst = hInstance; // Store instance handle in our global variable

    //If it is already running, then focus on the window, and exit
    hWnd = FindWindow(L"WMCaleidoscope", L"WMCaleidoscope");	
    if (hWnd) 
    {
        // set focus to foremost child window
        // The "| 0x00000001" is used to bring any owned windows to the foreground and
        // activate them.
        SetForegroundWindow((HWND)((ULONG) hWnd | 0x00000001));
        return 0;
    } 

    if (!MyRegisterClass(hInstance, L"WMCaleidoscope"))
    {
    	return FALSE;
    }

    hWnd = CreateWindow(L"WMCaleidoscope", L"WMCaleidoscope", WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

    if (!hWnd)
    {
        return FALSE;
    }

	g_hWnd=hWnd;

	ShowWindow(hWnd, nCmdShow);
    UpdateWindow(hWnd);

    return TRUE;
}

//////////////////////////////////////////////////////////////////////////
//this is the message loop.
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message) 
	{
		case WM_LBUTTONDOWN:			//exit if key pressed or screen tapped
		case WM_KEYDOWN:
		{
			g_running=false;
			break;
		}
		case WM_SETFOCUS:				//redraw screen if focus gotten
		{
			if(g_gfx.GfxIsInitialized())
			{
				g_gfx.GfxResume();
				g_gfx.GfxClearHWBuffer();	//redraw screen
				g_gfx.GfxUpdateScreen();
			}
			g_focus++;
			break;
		}
		case WM_KILLFOCUS:				//suspend graphics if focus lost (eg. low battery popup)
		{
			g_focus--;
			g_gfx.GfxSuspend();
			break;
		}
		case WM_PAINT:					//handle windows painting messages.
		{
			if(g_gfx.GfxIsInitialized())
			{
				ValidateRect(hWnd, 0); //no repaint - validate the entire window.
			}
			else
			{
				//gfx not yet inited, let windows draw
				return DefWindowProc(hWnd, message, wParam, lParam);
			}
			break;
		}
		case WM_DESTROY:
		{
			PostQuitMessage(0);
			break;
		}
		default:
		return DefWindowProc(hWnd, message, wParam, lParam);
	}
	return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品粉嫩aⅴ一区二区三区四区| 亚洲欧美乱综合| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 日本不卡一区二区| 精品系列免费在线观看| 国产乱人伦精品一区二区在线观看 | 亚洲精品国久久99热| 亚洲精品欧美在线| 日韩精品免费专区| 粉嫩久久99精品久久久久久夜| 成人黄色免费短视频| 欧美亚洲国产怡红院影院| 欧美色视频在线| 日韩免费视频一区二区| 成人欧美一区二区三区黑人麻豆| 亚洲国产va精品久久久不卡综合| 精品一区精品二区高清| 91免费观看视频| 精品欧美久久久| 亚洲一区二区免费视频| 国产精品一区不卡| 777xxx欧美| 亚洲激情综合网| 国产高清不卡一区| 日韩欧美123| 午夜激情久久久| 色婷婷久久99综合精品jk白丝| 日韩三级视频中文字幕| 一区二区三区鲁丝不卡| 国产91综合一区在线观看| 日韩一二三四区| 国产午夜精品美女毛片视频| 午夜精品在线视频一区| 91美女片黄在线| 国产欧美日韩在线观看| 国产一区亚洲一区| 色婷婷亚洲婷婷| 欧美色网站导航| 亚洲图片欧美激情| 成人永久免费视频| 久久精品这里都是精品| 精品午夜久久福利影院| 制服丝袜成人动漫| 午夜精品一区二区三区三上悠亚 | 国产亚洲自拍一区| 久久成人综合网| 欧美电视剧在线看免费| 激情五月婷婷综合网| 久久综合九色综合欧美98| 国模套图日韩精品一区二区| 精品粉嫩超白一线天av| 精品亚洲欧美一区| 欧美成人精品福利| 国产suv精品一区二区6| 国产精品国产三级国产有无不卡| av爱爱亚洲一区| 亚洲最大色网站| 91精品国产91久久久久久一区二区 | 毛片不卡一区二区| 久久综合五月天婷婷伊人| 不卡视频在线观看| 亚洲mv在线观看| 精品国产91久久久久久久妲己 | 韩国女主播一区二区三区| 国产日本欧洲亚洲| 欧美亚洲高清一区| 美女视频一区在线观看| 91成人在线免费观看| 国产日韩精品视频一区| 欧美最猛性xxxxx直播| 久久成人久久爱| 亚洲图片欧美激情| 日韩手机在线导航| 日本精品视频一区二区三区| 精品无人码麻豆乱码1区2区| 亚洲欧美日韩在线| 久久久精品免费观看| 欧美挠脚心视频网站| 91丨porny丨国产| 日韩成人精品在线| 一个色妞综合视频在线观看| 久久久久99精品国产片| 91精品久久久久久久99蜜桃| 色综合婷婷久久| 成人精品免费视频| 国产91对白在线观看九色| 麻豆成人久久精品二区三区红| 亚洲欧洲综合另类在线| 久久久亚洲欧洲日产国码αv| 在线成人av网站| 色婷婷一区二区三区四区| 粉嫩av一区二区三区| 国产精品一区二区三区网站| 午夜久久久久久电影| 亚洲国产成人porn| 亚洲午夜激情av| 亚洲一区二区美女| 午夜电影久久久| 五月天亚洲精品| 免费高清在线视频一区·| 日本少妇一区二区| 久久se精品一区精品二区| 日本不卡123| 国产综合成人久久大片91| 夜夜嗨av一区二区三区| 精品盗摄一区二区三区| 欧美成人伊人久久综合网| 欧美成人精品二区三区99精品| 日韩精品一区二区三区中文精品| 5566中文字幕一区二区电影| 91精品国产综合久久精品app| 欧美精选午夜久久久乱码6080| 日韩视频免费观看高清完整版 | 久久一留热品黄| 国产女人水真多18毛片18精品视频 | 中文字幕一区二区在线观看| 亚洲精品免费在线观看| 日本伊人色综合网| 国产一区二区电影| 在线精品视频免费观看| 欧美精品色综合| 国产亚洲综合色| 亚洲一区二区高清| 九九九久久久精品| 成人av中文字幕| 337p亚洲精品色噜噜| 国产网站一区二区| 日韩高清中文字幕一区| zzijzzij亚洲日本少妇熟睡| 欧美日韩成人综合在线一区二区| 精品久久一区二区三区| 一区二区三区欧美亚洲| 国产麻豆午夜三级精品| 欧美中文字幕久久| 国产精品乱人伦中文| 亚洲国产视频在线| 婷婷成人激情在线网| 成人国产一区二区三区精品| 日韩一级大片在线| 亚洲成av人片一区二区三区| eeuss鲁片一区二区三区| 亚洲精品一区二区三区福利| 亚洲一区二区三区爽爽爽爽爽| 成人精品免费视频| 欧美变态tickle挠乳网站| 亚洲成av人片在www色猫咪| 99国产精品久| 亚洲欧美电影院| www.色综合.com| 综合在线观看色| 91丨porny丨国产| 综合在线观看色| 91视频精品在这里| 亚洲欧美欧美一区二区三区| 99久久精品国产一区二区三区| 中文字幕av一区二区三区免费看| 国产成人自拍高清视频在线免费播放| 在线国产电影不卡| 亚洲国产wwwccc36天堂| 欧美综合一区二区三区| 亚洲国产精品一区二区久久恐怖片 | 国产传媒日韩欧美成人| 国产欧美日韩精品一区| 国产 欧美在线| 亚洲人123区| 欧美日韩视频在线观看一区二区三区| 18成人在线视频| 欧美亚洲动漫另类| 美女在线视频一区| 日本一区二区三区在线不卡| 99久久精品免费| 午夜电影网一区| 精品国产乱子伦一区| eeuss鲁片一区二区三区在线看| 一区二区三区在线观看国产| 日韩亚洲欧美在线观看| 丁香激情综合五月| 天天影视网天天综合色在线播放| 91婷婷韩国欧美一区二区| 亚洲激情五月婷婷| 日韩精品一区二区三区swag| 成人中文字幕电影| 日本不卡视频在线观看| 国产精品久久久久aaaa| 91精品国产综合久久精品性色| 成人午夜av电影| 日韩av在线播放中文字幕| 久久久久久黄色| 777色狠狠一区二区三区| 不卡的电影网站| 精品中文字幕一区二区小辣椒| 亚洲免费在线播放| 国产欧美精品区一区二区三区| 91精品国产综合久久精品图片| 成人免费视频视频在线观看免费| 亚洲一区二区在线观看视频 | 夫妻av一区二区| 麻豆91精品91久久久的内涵| 亚洲第一搞黄网站| 亚洲色图19p|