📄 screen.c
字号:
// $Id: screen.c,v 1.5 2000/11/20 05:46:45 ymwei Exp $//// Screen operations of GDI//// Copyright (C) 2000, Wei Yongming.//// Current maintainer: Wei Yongming./*** This library is free software; you can redistribute it and/or** modify it under the terms of the GNU Library General Public** License as published by the Free Software Foundation; either** version 2 of the License, or (at your option) any later version.**** This library is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU** Library General Public License for more details.**** You should have received a copy of the GNU Library General Public** License along with this library; if not, write to the Free** Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,** MA 02111-1307, USA*/// Create date: 2000/06/12, derived from original gdi.c//// Modify records://// Who When Where For What Status//-----------------------------------------------------------------------------//// TODO:// #include <stdio.h>#include <stdlib.h>#include <pthread.h>#include <semaphore.h>#include "common.h"#include "gdi.h"#include "window.h"#include "cliprect.h"#include "gal.h"#include "internals.h"#include "dc.h"#ifndef lintstatic char fileid[] = "$Id: screen.c,v 1.5 2000/11/20 05:46:45 ymwei Exp $";#endifextern pthread_mutex_t gdilock;extern BOOL dc_GenerateECRgn (PDC pdc, BOOL fForce);extern void ShowCursorForGDI (BOOL fShow, const RECT* prc);#ifdef _MISC_SAVESCREENvoid SaveScreenBox (int x, int y, int w, int h, void* vbuf){ RECT rcOutput; rcOutput.left = x; rcOutput.top = y; rcOutput.right = x + w; rcOutput.bottom = y + h; pthread_mutex_lock (&gdilock); ShowCursorForGDI (FALSE, &rcOutput); GAL_SetGC (PHYSICALGC); GAL_GetBox (PHYSICALGC, x, y, w, h, vbuf); ShowCursorForGDI (TRUE, &rcOutput); pthread_mutex_unlock (&gdilock);}void* SaveCoveredScreenBox (int x, int y, int w, int h){ void* vbuf; if (!(vbuf = malloc (w * h * BYTESPERPHYPIXEL))) { return NULL; } SaveScreenBox (x, y, w, h, vbuf); return vbuf;}BOOL GUIAPI SaveMainWindowContent (HWND hWnd, const char* filename){ RECT rcScreen; RECT rcWin; BITMAP bitmap; int save_ret; SetRect (&rcScreen, 0, 0, WIDTHOFPHYGC, HEIGHTOFPHYGC); if (hWnd) { GetWindowRect (hWnd, &rcWin); if (!IntersectRect (&rcWin, &rcWin, &rcScreen)) return FALSE; } else rcWin = rcScreen; bitmap.bmWidth = RECTW (rcWin); bitmap.bmHeight = RECTH (rcWin); if (bitmap.bmWidth == 0 || bitmap.bmHeight == 0) {#ifdef _DEBUG fprintf (stderr, "SaveContent: Empty Rect.\n");#endif return FALSE; } bitmap.bmBits = SaveCoveredScreenBox (rcWin.left, rcWin.top, RECTW (rcWin), RECTH (rcWin)); if (!bitmap.bmBits) {#ifdef _DEBUG fprintf (stderr, "SaveContent: SaveBox error.\n");#endif return FALSE; } save_ret = SaveBitmap (HDC_SCREEN, &bitmap, filename); free (bitmap.bmBits); return (save_ret == 0);}#endifvoid PutSavedBoxOnScreen (int x, int y, int w, int h, void* vbuf){ RECT rcOutput; rcOutput.left = x; rcOutput.top = y; rcOutput.right = x + w; rcOutput.bottom = y + h; pthread_mutex_lock (&gdilock); ShowCursorForGDI (FALSE, &rcOutput); GAL_SetGC (PHYSICALGC); GAL_SetClipping (PHYSICALGC, 0, 0, WIDTHOFPHYGC - 1, HEIGHTOFPHYGC - 1); GAL_PutBox (PHYSICALGC, x, y, w, h, vbuf); ShowCursorForGDI (TRUE, &rcOutput); pthread_mutex_unlock (&gdilock);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -