vncDesktop.h
资源名称:vnc3326s.zip [点击查看]
上传用户:sbftbdw
上传日期:2007-01-03
资源大小:379k
文件大小:4k
源码类别:
远程控制编程
开发平台:
Visual C++
- // Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory
- //
- // This file is part of the VNC system.
- //
- // The VNC system is free software; you can redistribute it and/or modify
- // it under the terms of the GNU General Public License as published by
- // the Free Software Foundation; either version 2 of the License, or
- // (at your option) any later version.
- //
- // This program 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 General Public License for more details.
- //
- // You should have received a copy of the GNU General Public License
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- // USA.
- //
- // If the source code for the VNC system is not available from the place
- // whence you received this file, check http://www.orl.co.uk/vnc or contact
- // the authors on vnc@orl.co.uk for information on obtaining it.
- // vncDesktop object
- // The vncDesktop object handles retrieval of data from the
- // display buffer. It also uses the RFBLib DLL to supply
- // information on mouse movements and screen updates to
- // the server
- class vncDesktop;
- #if !defined(_WINVNC_VNCDESKTOP)
- #define _WINVNC_VNCDESKTOP
- #pragma once
- // Include files
- #include "stdhdrs.h"
- #include "vncServer.h"
- #include "vncRegion.h"
- #include "RectList.h"
- #include "translate.h"
- #include <omnithread.h>
- // Constants
- extern const UINT RFB_SCREEN_UPDATE;
- extern const UINT RFB_COPYRECT_UPDATE;
- extern const UINT RFB_MOUSE_UPDATE;
- extern const char szDesktopSink[];
- // Class definition
- class vncDesktop
- {
- // Fields
- public:
- // Methods
- public:
- // Make the desktop thread & window proc friends
- friend class vncDesktopThread;
- friend LRESULT CALLBACK DesktopWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
- // Create/Destroy methods
- vncDesktop();
- ~vncDesktop();
- BOOL Init(vncServer *pSrv);
- // Routine to signal a vncServer to trigger an update
- void RequestUpdate();
- // Screen translation, capture, info
- void FillDisplayInfo(rfbServerInitMsg *scrInfo);
- void Translate(
- rfbTranslateFnType translator,
- char *dest,
- char *scrBuff,
- rfbPixelFormat cli_pf,
- const RECT &rect
- );
- void CaptureScreen(RECT &UpdateArea, BYTE *scrBuff, UINT scrBuffSize);
- rectlist ChangedAreas(
- RECT &ChangedArea,
- rectlist &existingRects,
- BYTE *scrBuff,
- BYTE *oldBuff
- );
- int ScreenBuffSize();
- HWND Window() {return m_hwnd;};
- // Mouse related
- void CaptureMouse(BYTE *scrBuff, UINT scrBuffSize);
- RECT MouseRect();
- void SetCursor(HCURSOR cursor);
- // Clipboard manipulation
- void SetClipText(LPSTR text);
- BOOL m_initialClipBoardSeen;
- // Implementation
- protected:
- // Routines to hook and unhook us
- BOOL Startup();
- BOOL Shutdown();
- // Init routines called by the child thread
- BOOL InitDesktop();
- void KillScreenSaver();
- BOOL InitBitmap();
- BOOL InitWindow();
- BOOL ThunkBitmapInfo();
- BOOL SetPixFormat();
- BOOL SetPixShifts();
- BOOL InitHooks();
- BOOL SetPalette();
- void CopyToBuffer(RECT &rect, BYTE *scrBuff, UINT scrBuffSize);
- void CalcCopyRects();
- // Convert a bit mask eg. 00111000 to max=7, shift=3
- static void MaskToMaxAndShift(DWORD mask, CARD16 &max, CARD8 &shift);
- // DATA
- // Generally useful stuff
- vncServer *m_server;
- omni_thread *m_thread;
- HWND m_hwnd;
- UINT m_timerid;
- HWND m_hnextviewer;
- // device contexts for memory and the screen
- HDC m_hmemdc;
- HDC m_hrootdc;
- // New and old bitmaps
- HBITMAP m_membitmap;
- HBITMAP m_oldbitmap;
- omni_mutex m_bitbltlock;
- RECT m_bmrect;
- struct _BMInfo {
- BOOL truecolour;
- BITMAPINFO bmi;
- // Colormap info - comes straight after BITMAPINFO - **HACK**
- RGBQUAD cmap[256];
- } m_bminfo;
- // Screen info
- rfbServerInitMsg m_scrinfo;
- // These are the red, green & blue masks for a pixel
- DWORD m_rMask, m_gMask, m_bMask;
- // This is always handy to have
- int m_bytesPerRow;
- // Handle of the default cursor
- HCURSOR m_hcursor;
- // Handle of the basic arrow cursor
- HCURSOR m_hdefcursor;
- // The mousemoved flag & current mouse position
- BOOL m_cursormoved;
- RECT m_cursorpos;
- // Boolean flag to indicate when the display resolution has changed
- BOOL m_displaychanged;
- };
- #endif // _WINVNC_VNCDESKTOP