vncDesktop.h
上传用户:sbftbdw
上传日期:2007-01-03
资源大小:379k
文件大小:4k
源码类别:

远程控制编程

开发平台:

Visual C++

  1. //  Copyright (C) 1997, 1998 Olivetti & Oracle Research Laboratory
  2. //
  3. //  This file is part of the VNC system.
  4. //
  5. //  The VNC system is free software; you can redistribute it and/or modify
  6. //  it under the terms of the GNU General Public License as published by
  7. //  the Free Software Foundation; either version 2 of the License, or
  8. //  (at your option) any later version.
  9. //
  10. //  This program is distributed in the hope that it will be useful,
  11. //  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. //  GNU General Public License for more details.
  14. //
  15. //  You should have received a copy of the GNU General Public License
  16. //  along with this program; if not, write to the Free Software
  17. //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  18. //  USA.
  19. //
  20. // If the source code for the VNC system is not available from the place 
  21. // whence you received this file, check http://www.orl.co.uk/vnc or contact
  22. // the authors on vnc@orl.co.uk for information on obtaining it.
  23. // vncDesktop object
  24. // The vncDesktop object handles retrieval of data from the
  25. // display buffer.  It also uses the RFBLib DLL to supply
  26. // information on mouse movements and screen updates to
  27. // the server
  28. class vncDesktop;
  29. #if !defined(_WINVNC_VNCDESKTOP)
  30. #define _WINVNC_VNCDESKTOP
  31. #pragma once
  32. // Include files
  33. #include "stdhdrs.h"
  34. #include "vncServer.h"
  35. #include "vncRegion.h"
  36. #include "RectList.h"
  37. #include "translate.h"
  38. #include <omnithread.h>
  39. // Constants
  40. extern const UINT RFB_SCREEN_UPDATE;
  41. extern const UINT RFB_COPYRECT_UPDATE;
  42. extern const UINT RFB_MOUSE_UPDATE;
  43. extern const char szDesktopSink[];
  44. // Class definition
  45. class vncDesktop
  46. {
  47. // Fields
  48. public:
  49. // Methods
  50. public:
  51. // Make the desktop thread & window proc friends
  52. friend class vncDesktopThread;
  53. friend LRESULT CALLBACK DesktopWndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp);
  54. // Create/Destroy methods
  55. vncDesktop();
  56. ~vncDesktop();
  57. BOOL Init(vncServer *pSrv);
  58. // Routine to signal a vncServer to trigger an update
  59. void RequestUpdate();
  60. // Screen translation, capture, info
  61. void FillDisplayInfo(rfbServerInitMsg *scrInfo);
  62. void Translate(
  63. rfbTranslateFnType translator,
  64. char *dest,
  65. char *scrBuff,
  66. rfbPixelFormat cli_pf,
  67. const RECT &rect
  68. );
  69. void CaptureScreen(RECT &UpdateArea, BYTE *scrBuff, UINT scrBuffSize);
  70. rectlist ChangedAreas(
  71. RECT &ChangedArea,
  72. rectlist &existingRects,
  73. BYTE *scrBuff,
  74. BYTE *oldBuff
  75. );
  76. int ScreenBuffSize();
  77. HWND Window() {return m_hwnd;};
  78. // Mouse related
  79. void CaptureMouse(BYTE *scrBuff, UINT scrBuffSize);
  80. RECT MouseRect();
  81. void SetCursor(HCURSOR cursor);
  82. // Clipboard manipulation
  83. void SetClipText(LPSTR text);
  84. BOOL m_initialClipBoardSeen;
  85. // Implementation
  86. protected:
  87. // Routines to hook and unhook us
  88. BOOL Startup();
  89. BOOL Shutdown();
  90. // Init routines called by the child thread
  91. BOOL InitDesktop();
  92. void KillScreenSaver();
  93. BOOL InitBitmap();
  94. BOOL InitWindow();
  95. BOOL ThunkBitmapInfo();
  96. BOOL SetPixFormat();
  97. BOOL SetPixShifts();
  98. BOOL InitHooks();
  99. BOOL SetPalette();
  100. void CopyToBuffer(RECT &rect, BYTE *scrBuff, UINT scrBuffSize);
  101. void CalcCopyRects();
  102. // Convert a bit mask eg. 00111000 to max=7, shift=3
  103. static void MaskToMaxAndShift(DWORD mask, CARD16 &max, CARD8 &shift);
  104. // DATA
  105. // Generally useful stuff
  106. vncServer  *m_server;
  107. omni_thread  *m_thread;
  108. HWND m_hwnd;
  109. UINT m_timerid;
  110. HWND m_hnextviewer;
  111. // device contexts for memory and the screen
  112. HDC m_hmemdc;
  113. HDC m_hrootdc;
  114. // New and old bitmaps
  115. HBITMAP m_membitmap;
  116. HBITMAP m_oldbitmap;
  117. omni_mutex m_bitbltlock;
  118. RECT m_bmrect;
  119. struct _BMInfo {
  120. BOOL truecolour;
  121. BITMAPINFO bmi;
  122. // Colormap info - comes straight after BITMAPINFO - **HACK**
  123. RGBQUAD cmap[256];
  124. } m_bminfo;
  125. // Screen info
  126. rfbServerInitMsg m_scrinfo;
  127. // These are the red, green & blue masks for a pixel
  128. DWORD m_rMask, m_gMask, m_bMask;
  129. // This is always handy to have
  130. int m_bytesPerRow;
  131. // Handle of the default cursor
  132. HCURSOR m_hcursor;
  133. // Handle of the basic arrow cursor
  134. HCURSOR m_hdefcursor;
  135. // The mousemoved flag & current mouse position
  136. BOOL m_cursormoved;
  137. RECT m_cursorpos;
  138. // Boolean flag to indicate when the display resolution has changed
  139. BOOL m_displaychanged;
  140. };
  141. #endif // _WINVNC_VNCDESKTOP