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

远程控制编程

开发平台:

Visual C++

  1. //  The VNC system is free software; you can redistribute it and/or modify
  2. //  it under the terms of the GNU General Public License as published by
  3. //  the Free Software Foundation; either version 2 of the License, or
  4. //  (at your option) any later version.
  5. //
  6. //  This program is distributed in the hope that it will be useful,
  7. //  but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9. //  GNU General Public License for more details.
  10. //
  11. //  You should have received a copy of the GNU General Public License
  12. //  along with this program; if not, write to the Free Software
  13. //  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,
  14. //  USA.
  15. //
  16. // If the source code for the VNC system is not available from the place 
  17. // whence you received this file, check http://www.orl.co.uk/vnc or contact
  18. // the authors on vnc@orl.co.uk for information on obtaining it.
  19. // Many thanks to Greg Hewgill <greg@hewgill.com> for providing the basis for 
  20. // the full-screen mode.
  21. #include "stdhdrs.h"
  22. #include "vncviewer.h"
  23. #include "ClientConnection.h"
  24. // Parameters for scrolling in full screen mode
  25. #define BUMPSCROLLBORDER 4
  26. #define BUMPSCROLLAMOUNTX 16
  27. #define BUMPSCROLLAMOUNTY 4
  28. bool ClientConnection::InFullScreenMode() 
  29. {
  30. return m_opts.m_FullScreen; 
  31. };
  32. // You can explicitly change mode by calling this
  33. void ClientConnection::SetFullScreenMode(bool enable)
  34. {
  35. m_opts.m_FullScreen = enable;
  36. RealiseFullScreenMode();
  37. }
  38. // If the options have been changed other than by calling 
  39. // SetFullScreenMode, you need to call this to make it happen.
  40. void ClientConnection::RealiseFullScreenMode()
  41. {
  42. LONG style = GetWindowLong(m_hwnd, GWL_STYLE);
  43. if (m_opts.m_FullScreen) {
  44. ShowWindow(m_hwnd, SW_MAXIMIZE);
  45. style = GetWindowLong(m_hwnd, GWL_STYLE);
  46. style &= ~(WS_DLGFRAME | WS_THICKFRAME);
  47. SetWindowLong(m_hwnd, GWL_STYLE, style);
  48. int cx = GetSystemMetrics(SM_CXSCREEN);
  49. int cy = GetSystemMetrics(SM_CYSCREEN);
  50. SetWindowPos(m_hwnd, HWND_TOPMOST, -1, -1, cx+3, cy+3, SWP_FRAMECHANGED);
  51. CheckMenuItem(GetSystemMenu(m_hwnd, FALSE), ID_FULLSCREEN, MF_BYCOMMAND|MF_CHECKED);
  52. // A bit crude here - we can skip the prompt on a registry setting.
  53. // We'll do this properly later.
  54. HKEY hRegKey;
  55. DWORD skipprompt = 0;
  56. if ( RegCreateKey(HKEY_CURRENT_USER, SETTINGS_KEY_NAME, &hRegKey)  != ERROR_SUCCESS ) {
  57.         hRegKey = NULL;
  58. } else {
  59. DWORD skippromptsize = sizeof(skipprompt);
  60. DWORD valtype;
  61. if ( RegQueryValueEx( hRegKey,  "SkipFullScreenPrompt", NULL, &valtype, 
  62. (LPBYTE) &skipprompt, &skippromptsize) != ERROR_SUCCESS) {
  63. skipprompt = 0;
  64. }
  65. RegCloseKey(hRegKey);
  66. }
  67. if (!skipprompt)
  68. MessageBox(m_hwnd, 
  69. _T("To exit from full-screen mode, use Ctrl-Esc Esc and thenrn"
  70. "right-click on the vncviewer taskbar icon to see the menu."),
  71. _T("VNCviewer full-screen mode"),
  72. MB_OK | MB_ICONINFORMATION );
  73. } else {
  74. style |= WS_DLGFRAME | WS_THICKFRAME;
  75. SetWindowLong(m_hwnd, GWL_STYLE, style);
  76. SetWindowPos(m_hwnd, HWND_NOTOPMOST, 0,0,100,100, SWP_NOMOVE | SWP_NOSIZE);
  77. ShowWindow(m_hwnd, SW_NORMAL);
  78. CheckMenuItem(GetSystemMenu(m_hwnd, FALSE), ID_FULLSCREEN, MF_BYCOMMAND|MF_UNCHECKED);
  79. }
  80. }
  81. bool ClientConnection::BumpScroll(int x, int y)
  82. {
  83. int dx = 0;
  84. int dy = 0;
  85. int rightborder = GetSystemMetrics(SM_CXSCREEN)-BUMPSCROLLBORDER;
  86. int bottomborder = GetSystemMetrics(SM_CYSCREEN)-BUMPSCROLLBORDER;
  87. if (x < BUMPSCROLLBORDER)
  88. dx = -BUMPSCROLLAMOUNTX;
  89. if (x >= rightborder)
  90. dx = +BUMPSCROLLAMOUNTX;
  91. if (y < BUMPSCROLLBORDER)
  92. dy = -BUMPSCROLLAMOUNTY;
  93. if (y >= bottomborder)
  94. dy = +BUMPSCROLLAMOUNTY;
  95. if (dx || dy) {
  96. if (ScrollScreen(dx,dy)) {
  97. // If we haven't physically moved the cursor, artificially
  98. // generate another mouse event so we keep scrolling.
  99. POINT p;
  100. GetCursorPos(&p);
  101. if (p.x == x && p.y == y)
  102. SetCursorPos(x,y);
  103. return true;
  104. }
  105. return false;
  106. }