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

📄 event.c

📁 超强的嵌入式GUI系统
💻 C
字号:
/***************************************************************************    begin                : Fri Dec 30 2005    copyright            : (C) 2005 - 2007 by Caglar Oral    email                : caglaroral@yahoo.com ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU Lesser General Public License as        * *   published by the Free Software Foundation; either version 2.1 of the  * *   License, or (at your option) any later version.                       * *                                                                         * ***************************************************************************/#if defined(VIDEO_GDI)#include "../../../lib/xynth_.h"#include "server.h"#include "gdi.h"LRESULT CALLBACK MainWndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){        int k = 0;        int m = 0;	s_rect_t coor;	BYTE chars[2];        BYTE keystate[256];	s_video_gdi_data_t *priv = (s_video_gdi_data_t *) server->driver->driver_data;	switch (message) {		case WM_DESTROY:			s_server_quit(server->window);			PostQuitMessage(0);                        break;		case WM_CREATE:                        ShowCursor(FALSE);		case WM_PAINT:		case WM_DISPLAYCHANGE:			coor.x = 0;			coor.y = 0;			coor.w = server->window->surface->width;			coor.h = server->window->surface->height;			s_video_gdi_server_surface_update(&coor);			break;		case WM_LBUTTONDOWN:                        priv->mouse.buttons |= MOUSE_LEFTBUTTON;                        goto mouse_event;		case WM_LBUTTONUP:                        priv->mouse.buttons &= ~MOUSE_LEFTBUTTON;                        goto mouse_event;		case WM_RBUTTONDOWN:                        priv->mouse.buttons |= MOUSE_RIGHTBUTTON;                        goto mouse_event;		case WM_RBUTTONUP:                        priv->mouse.buttons &= ~MOUSE_RIGHTBUTTON;                        goto mouse_event;                case WM_MOUSEMOVE:mouse_event:            priv->mouse.x = (((int) lParam) & 0xFFFF);                        priv->mouse.y = ((((int) lParam) >> 16) & 0xFFFF);			if (priv->mouse_fd[1] != -1) {				s_pipe_api_write(priv->mouse_fd[1], &m, sizeof(int));			}                        break;                case WM_KEYUP:                case WM_SYSKEYUP:                        priv->keybd.state = KEYBD_RELEASED;                        goto keybd_event;                case WM_KEYDOWN:                case WM_SYSKEYDOWN:                        priv->keybd.state = KEYBD_PRESSED;keybd_event:            GetKeyboardState(keystate);                        priv->keybd.scancode = (((unsigned int) lParam) >> 16) & 0xFF;                        priv->keybd.button = priv->keymap[priv->keybd.scancode];                        priv->keybd.keycode = priv->keymap[priv->keybd.scancode];                        priv->keybd.ascii = wParam;                        if (ToAscii(wParam, lParam, keystate, (WORD *) chars, 0) == 1) {                                priv->keybd.ascii = chars[0];                        }			if (priv->keybd_fd[1] != -1) {	         		s_pipe_api_write(priv->keybd_fd[1], &k, sizeof(int));          		}                        break;//		default://      		printf("%d\n", message);	}	return DefWindowProc(hwnd, message, wParam, lParam);}void s_video_gdi_server_fullscreen (void){	RECT rect;        DEVMODE settings;	s_video_gdi_data_t *priv = (s_video_gdi_data_t *) server->driver->driver_data;		if (priv->fullscreen == 0) {                EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &priv->dmode);                memset(&settings, 0, sizeof(DEVMODE));                settings.dmSize = sizeof(DEVMODE);                settings.dmBitsPerPel = priv->bpp_windows;                settings.dmPelsWidth = server->window->surface->width;                settings.dmPelsHeight = server->window->surface->height;                settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;        } else {                settings.dmSize = sizeof(DEVMODE);                settings.dmBitsPerPel = priv->dmode.dmBitsPerPel;                settings.dmPelsWidth = priv->dmode.dmPelsWidth;                settings.dmPelsHeight = priv->dmode.dmPelsHeight;                settings.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL;        }        switch (ChangeDisplaySettings(&settings, CDS_FULLSCREEN)) {                case DISP_CHANGE_SUCCESSFUL:                        break;                case DISP_CHANGE_BADFLAGS:                case DISP_CHANGE_BADMODE:                case DISP_CHANGE_BADPARAM:                case DISP_CHANGE_FAILED:                case DISP_CHANGE_NOTUPDATED:                case DISP_CHANGE_RESTART:                        break;        }	if (priv->fullscreen == 0) {        	rect.left = 0;        	rect.right = server->window->surface->width;        	rect.top = 0;        	rect.bottom = server->window->surface->height;                AdjustWindowRect(&rect, GetWindowLong(priv->hwndMain, GWL_STYLE), FALSE);                SetWindowPos(priv->hwndMain, HWND_TOPMOST, rect.left, rect.top, rect.right + 100, rect.bottom + 100, 0);                priv->fullscreen = 1;        } else {        	rect.left = 0;        	rect.right = server->window->surface->width;        	rect.top = 0;        	rect.bottom = server->window->surface->height;                AdjustWindowRect(&rect, GetWindowLong(priv->hwndMain, GWL_STYLE), FALSE);                SetWindowPos(priv->hwndMain, HWND_NOTOPMOST, 0, 0, rect.right - rect.left, rect.bottom - rect.top, 0);                priv->fullscreen = 0;        }	UpdateWindow(priv->hwndMain);}void * s_video_gdi_create_window (void *arg){	MSG msg;	RECT rect;	HDC mainwindow;	WNDCLASSEX wndclass;	char *szMainWndClass = "XynthWindowingSystem";	s_video_gdi_data_t *priv = (s_video_gdi_data_t *) server->driver->driver_data;	memset(&wndclass, 0, sizeof(WNDCLASSEX));	wndclass.lpszClassName = szMainWndClass;	wndclass.cbSize = sizeof(WNDCLASSEX);	wndclass.style = CS_HREDRAW | CS_VREDRAW;	wndclass.lpfnWndProc = MainWndProc;	wndclass.hInstance = priv->hinst;	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);	wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);	wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);	RegisterClassEx(&wndclass);		priv->hwndMain = CreateWindow(szMainWndClass,	                              "Xynth Windowing system",                                      WS_POPUP | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX | WS_CAPTION,	                              CW_USEDEFAULT,	                              CW_USEDEFAULT,	                              CW_USEDEFAULT,	                              CW_USEDEFAULT,	                              NULL,	                              NULL,	                              priv->hinst,	                              NULL);	rect.left = 0;	rect.right = server->window->surface->width;	rect.top = 0;	rect.bottom = server->window->surface->height;        AdjustWindowRect(&rect, GetWindowLong(priv->hwndMain, GWL_STYLE), FALSE);        SetWindowPos(priv->hwndMain, HWND_TOP, 0, 0, rect.right - rect.left, rect.bottom - rect.top, SWP_NOMOVE);	ShowWindow(priv->hwndMain, TRUE);	UpdateWindow(priv->hwndMain);		mainwindow = GetDC(priv->hwndMain);	if (mainwindow == NULL) {                debugf(DSER | DFAT, "What the fuck is this?");		return NULL;	}	priv->bpp_windows = GetDeviceCaps(mainwindow, BITSPIXEL);	if (priv->bpp_windows == 24) {                debugf(DSER | DFAT, "24 bitsperpixel modes are not supported by Xynth Windowing System. "                                    "Try changing display mode from "                                    "Display Properties -> Settings -> Color quality.");        }	while (GetMessage(&msg, NULL, 0, 0)) {		TranslateMessage(&msg);		DispatchMessage(&msg);	}	return (void *) msg.wParam;}#endif /* VIDEO_GDI */

⌨️ 快捷键说明

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