ClientConnectionFullScreen.cpp
资源名称:vnc3326s.zip [点击查看]
上传用户:sbftbdw
上传日期:2007-01-03
资源大小:379k
文件大小:4k
源码类别:
远程控制编程
开发平台:
Visual C++
- // 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.
- // Many thanks to Greg Hewgill <greg@hewgill.com> for providing the basis for
- // the full-screen mode.
- #include "stdhdrs.h"
- #include "vncviewer.h"
- #include "ClientConnection.h"
- // Parameters for scrolling in full screen mode
- #define BUMPSCROLLBORDER 4
- #define BUMPSCROLLAMOUNTX 16
- #define BUMPSCROLLAMOUNTY 4
- bool ClientConnection::InFullScreenMode()
- {
- return m_opts.m_FullScreen;
- };
- // You can explicitly change mode by calling this
- void ClientConnection::SetFullScreenMode(bool enable)
- {
- m_opts.m_FullScreen = enable;
- RealiseFullScreenMode();
- }
- // If the options have been changed other than by calling
- // SetFullScreenMode, you need to call this to make it happen.
- void ClientConnection::RealiseFullScreenMode()
- {
- LONG style = GetWindowLong(m_hwnd, GWL_STYLE);
- if (m_opts.m_FullScreen) {
- ShowWindow(m_hwnd, SW_MAXIMIZE);
- style = GetWindowLong(m_hwnd, GWL_STYLE);
- style &= ~(WS_DLGFRAME | WS_THICKFRAME);
- SetWindowLong(m_hwnd, GWL_STYLE, style);
- int cx = GetSystemMetrics(SM_CXSCREEN);
- int cy = GetSystemMetrics(SM_CYSCREEN);
- SetWindowPos(m_hwnd, HWND_TOPMOST, -1, -1, cx+3, cy+3, SWP_FRAMECHANGED);
- CheckMenuItem(GetSystemMenu(m_hwnd, FALSE), ID_FULLSCREEN, MF_BYCOMMAND|MF_CHECKED);
- // A bit crude here - we can skip the prompt on a registry setting.
- // We'll do this properly later.
- HKEY hRegKey;
- DWORD skipprompt = 0;
- if ( RegCreateKey(HKEY_CURRENT_USER, SETTINGS_KEY_NAME, &hRegKey) != ERROR_SUCCESS ) {
- hRegKey = NULL;
- } else {
- DWORD skippromptsize = sizeof(skipprompt);
- DWORD valtype;
- if ( RegQueryValueEx( hRegKey, "SkipFullScreenPrompt", NULL, &valtype,
- (LPBYTE) &skipprompt, &skippromptsize) != ERROR_SUCCESS) {
- skipprompt = 0;
- }
- RegCloseKey(hRegKey);
- }
- if (!skipprompt)
- MessageBox(m_hwnd,
- _T("To exit from full-screen mode, use Ctrl-Esc Esc and thenrn"
- "right-click on the vncviewer taskbar icon to see the menu."),
- _T("VNCviewer full-screen mode"),
- MB_OK | MB_ICONINFORMATION );
- } else {
- style |= WS_DLGFRAME | WS_THICKFRAME;
- SetWindowLong(m_hwnd, GWL_STYLE, style);
- SetWindowPos(m_hwnd, HWND_NOTOPMOST, 0,0,100,100, SWP_NOMOVE | SWP_NOSIZE);
- ShowWindow(m_hwnd, SW_NORMAL);
- CheckMenuItem(GetSystemMenu(m_hwnd, FALSE), ID_FULLSCREEN, MF_BYCOMMAND|MF_UNCHECKED);
- }
- }
- bool ClientConnection::BumpScroll(int x, int y)
- {
- int dx = 0;
- int dy = 0;
- int rightborder = GetSystemMetrics(SM_CXSCREEN)-BUMPSCROLLBORDER;
- int bottomborder = GetSystemMetrics(SM_CYSCREEN)-BUMPSCROLLBORDER;
- if (x < BUMPSCROLLBORDER)
- dx = -BUMPSCROLLAMOUNTX;
- if (x >= rightborder)
- dx = +BUMPSCROLLAMOUNTX;
- if (y < BUMPSCROLLBORDER)
- dy = -BUMPSCROLLAMOUNTY;
- if (y >= bottomborder)
- dy = +BUMPSCROLLAMOUNTY;
- if (dx || dy) {
- if (ScrollScreen(dx,dy)) {
- // If we haven't physically moved the cursor, artificially
- // generate another mouse event so we keep scrolling.
- POINT p;
- GetCursorPos(&p);
- if (p.x == x && p.y == y)
- SetCursorPos(x,y);
- return true;
- }
- }
- return false;
- }