📄 sdl_sysevents.c
字号:
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 + -