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

📄 sdl_sysevents.c

📁 Simple DirectMedia Layer - Simple DirectMedia Layer 是一个跨平台的多媒体库设计用来提供快速图形framebuffer和音频驱动。应用MPEG为软件
💻 C
📖 第 1 页 / 共 2 页
字号:
						break;					case WM_LBUTTONUP:						button = SDL_BUTTON_LEFT;						state = SDL_RELEASED;						break;					case WM_MBUTTONDOWN:						button = SDL_BUTTON_MIDDLE;						state = SDL_PRESSED;						break;					case WM_MBUTTONUP:						button = SDL_BUTTON_MIDDLE;						state = SDL_RELEASED;						break;					case WM_RBUTTONDOWN:						button = SDL_BUTTON_RIGHT;						state = SDL_PRESSED;						break;					case WM_RBUTTONUP:						button = SDL_BUTTON_RIGHT;						state = SDL_RELEASED;						break;					default:						/* Eh? Unknown button? */						return(0);				}				if ( state == SDL_PRESSED ) {					/* Grab mouse so we get up events */					if ( ++mouse_pressed > 0 ) {						SetCapture(hwnd);					}				} else {					/* Release mouse after all up events */					if ( --mouse_pressed <= 0 ) {						ReleaseCapture();						mouse_pressed = 0;					}				}				if ( mouse_relative ) {				/*	RJR: March 28, 2000					report internal mouse position if in relative mode */					x = 0; y = 0;				} else {					x = (Sint16)LOWORD(lParam);					y = (Sint16)HIWORD(lParam);				}				posted = SDL_PrivateMouseButton(							state, button, x, y);			}		}		return(0);#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)		case WM_MOUSEWHEEL: 			if ( SDL_VideoSurface && ! DINPUT_FULLSCREEN() ) {				int move = (short)HIWORD(wParam);				if ( move ) {					Uint8 button;					if ( move > 0 )						button = SDL_BUTTON_WHEELUP;					else						button = SDL_BUTTON_WHEELDOWN;					posted = SDL_PrivateMouseButton(						SDL_PRESSED, button, 0, 0);					posted |= SDL_PrivateMouseButton(						SDL_RELEASED, button, 0, 0);				}			}			return(0);#endif#ifdef WM_GETMINMAXINFO		/* This message is sent as a way for us to "check" the values		 * of a position change.  If we don't like it, we can adjust		 * the values before they are changed.		 */		case WM_GETMINMAXINFO: {			MINMAXINFO *info;			RECT        size;			int x, y;			int width;			int height;			/* We don't want to clobber an internal resize */			if ( SDL_resizing )				return(0);			/* We allow resizing with the SDL_RESIZABLE flag */			if ( SDL_PublicSurface &&				(SDL_PublicSurface->flags & SDL_RESIZABLE) ) {				return(0);			}			/* Get the current position of our window */			GetWindowRect(SDL_Window, &size);			x = size.left;			y = size.top;			/* Calculate current width and height of our window */			size.top = 0;			size.left = 0;			if ( SDL_PublicSurface != NULL ) {				size.bottom = SDL_PublicSurface->h;				size.right = SDL_PublicSurface->w;			} else {				size.bottom = 0;				size.right = 0;			}			AdjustWindowRect(&size, GetWindowLong(hwnd, GWL_STYLE),									FALSE);			width = size.right - size.left;			height = size.bottom - size.top;			/* Fix our size to the current size */			info = (MINMAXINFO *)lParam;			info->ptMaxSize.x = width;			info->ptMaxSize.y = height;			info->ptMaxPosition.x = x;			info->ptMaxPosition.y = y;			info->ptMinTrackSize.x = width;			info->ptMinTrackSize.y = height;			info->ptMaxTrackSize.x = width;			info->ptMaxTrackSize.y = height;		}		return(0);#endif /* WM_GETMINMAXINFO */		case WM_WINDOWPOSCHANGED: {			SDL_VideoDevice *this = current_video;			int w, h;			GetClientRect(SDL_Window, &SDL_bounds);			ClientToScreen(SDL_Window, (LPPOINT)&SDL_bounds);			ClientToScreen(SDL_Window, (LPPOINT)&SDL_bounds+1);			w = SDL_bounds.right-SDL_bounds.left;			h = SDL_bounds.bottom-SDL_bounds.top;			if ( this->input_grab != SDL_GRAB_OFF ) {				ClipCursor(&SDL_bounds);			}			if ( SDL_PublicSurface && 				(SDL_PublicSurface->flags & SDL_RESIZABLE) ) {				SDL_PrivateResize(w, h);			}		}		break;		/* We need to set the cursor */		case WM_SETCURSOR: {			Uint16 hittest;			hittest = LOWORD(lParam);			if ( hittest == HTCLIENT ) {				SetCursor(SDL_hcursor);				return(TRUE);			}		}		break;		/* We are about to get palette focus! */		case WM_QUERYNEWPALETTE: {			WIN_RealizePalette(current_video);			return(TRUE);		}		break;		/* Another application changed the palette */		case WM_PALETTECHANGED: {			WIN_PaletteChanged(current_video, (HWND)wParam);		}		break;		/* We were occluded, refresh our display */		case WM_PAINT: {			HDC hdc;			PAINTSTRUCT ps;			hdc = BeginPaint(SDL_Window, &ps);			if ( current_video->screen &&			     !(current_video->screen->flags & SDL_OPENGL) ) {				WIN_WinPAINT(current_video, hdc);			}			EndPaint(SDL_Window, &ps);		}		return(0);		/* DJM: Send an expose event in this case */		case WM_ERASEBKGND: {			posted = SDL_PrivateExpose();		}		return(0);		case WM_CLOSE: {			if ( (posted = SDL_PrivateQuit()) )				PostQuitMessage(0);		}		return(0);		case WM_DESTROY: {			PostQuitMessage(0);		}		return(0);		default: {			/* Special handling by the video driver */			if (HandleMessage) {				return(HandleMessage(current_video,			                     hwnd, msg, wParam, lParam));			}		}		break;	}	return(DefWindowProc(hwnd, msg, wParam, lParam));}/* Allow the application handle to be stored and retrieved later */static void *SDL_handle = NULL;void SDL_SetModuleHandle(void *handle){	SDL_handle = handle;}void *SDL_GetModuleHandle(void){	void *handle;	if ( SDL_handle ) {		handle = SDL_handle;	} else {		/* Warning:		   If SDL is built as a DLL, this will return a handle to		   the DLL, not the application, and DirectInput may fail		   to initialize.		 */		handle = GetModuleHandle(NULL);	}	return(handle);}/* This allows the SDL_WINDOWID hack */const char *SDL_windowid = NULL;/* Register the class for this application -- exported for winmain.c */int SDL_RegisterApp(char *name, Uint32 style, void *hInst){	static int initialized = 0;	WNDCLASS class;#ifdef WM_MOUSELEAVE	HMODULE handle;#endif	/* Only do this once... */	if ( initialized ) {		return(0);	}	/* This function needs to be passed the correct process handle	   by the application.	 */	if ( ! hInst ) {		hInst = SDL_GetModuleHandle();	}	/* Register the application class */	class.hCursor		= NULL;#ifdef _WIN32_WCE	{		/* WinCE uses the UNICODE version */		int nLen = strlen(name)+1;		SDL_Appname = malloc(nLen*2);		MultiByteToWideChar(CP_ACP, 0, name, -1, SDL_Appname, nLen);	}#else	{		int nLen = strlen(name)+1;		SDL_Appname = malloc(nLen);		strcpy(SDL_Appname, name);	}#endif /* _WIN32_WCE */	class.hIcon		= LoadImage(hInst, SDL_Appname, IMAGE_ICON,	                                    0, 0, LR_DEFAULTCOLOR);	class.lpszMenuName	= NULL;	class.lpszClassName	= SDL_Appname;	class.hbrBackground	= NULL;	class.hInstance		= hInst;	class.style		= style;#ifdef HAVE_OPENGL	class.style		|= CS_OWNDC;#endif	class.lpfnWndProc	= WinMessage;	class.cbWndExtra	= 0;	class.cbClsExtra	= 0;	if ( ! RegisterClass(&class) ) {		SDL_SetError("Couldn't register application class");		return(-1);	}	SDL_Instance = hInst;#ifdef WM_MOUSELEAVE	/* Get the version of TrackMouseEvent() we use */	_TrackMouseEvent = NULL;	handle = GetModuleHandle("USER32.DLL");	if ( handle ) {		_TrackMouseEvent = (BOOL (WINAPI *)(TRACKMOUSEEVENT *))GetProcAddress(handle, "TrackMouseEvent");	}	if ( _TrackMouseEvent == NULL ) {		_TrackMouseEvent = WIN_TrackMouseEvent;	}#endif /* WM_MOUSELEAVE */	/* Check for SDL_WINDOWID hack */	SDL_windowid = getenv("SDL_WINDOWID");	initialized = 1;	return(0);}

⌨️ 快捷键说明

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