📄 vncacceptdialog.cpp
字号:
// Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.//// 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.uk.research.att.com/vnc or contact// the authors on vnc@uk.research.att.com for information on obtaining it.// vncAcceptDialog.cpp: implementation of the vncAcceptDialog class, used// to query whether or not to accept incoming connections.#include "stdhdrs.h"#include "vncAcceptDialog.h"#include "WinVNC.h"#include "vncService.h"#include "resource.h"// ConstructorvncAcceptDialog::vncAcceptDialog(UINT timeoutSecs, const char *ipAddress){ m_timeoutSecs = timeoutSecs; m_ipAddress = strdup(ipAddress);}// DestructorvncAcceptDialog::~vncAcceptDialog(){ if (m_ipAddress) free(m_ipAddress);}// Routine called to activate the dialog and, once it's done, delete itBOOL vncAcceptDialog::DoDialog(){ int retVal = DialogBoxParam(hAppInstance, MAKEINTRESOURCE(IDD_ACCEPT_CONN), NULL, (DLGPROC) vncAcceptDlgProc, (LONG) this); delete this; return retVal == IDACCEPT;}// Callback function - handles messages sent to the dialog boxBOOL CALLBACK vncAcceptDialog::vncAcceptDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { // This is a static method, so we don't know which instantiation we're // dealing with. But we can get a pseudo-this from the parameter to // WM_INITDIALOG, which we therafter store with the window and retrieve // as follows: vncAcceptDialog *_this = (vncAcceptDialog *) GetWindowLong(hwnd, GWL_USERDATA); switch (uMsg) { // Dialog has just been created case WM_INITDIALOG: { // Save the lParam into our user data so that subsequent calls have // access to the parent C++ object SetWindowLong(hwnd, GWL_USERDATA, lParam); vncAcceptDialog *_this = (vncAcceptDialog *) lParam; // Set the IP-address string SetDlgItemText(hwnd, IDC_ACCEPT_IP, _this->m_ipAddress); if (SetTimer(hwnd, 1, 1000, NULL) == 0) EndDialog(hwnd, IDREJECT); _this->m_timeoutCount = _this->m_timeoutSecs; // Attempt to mimic Win98/2000 dialog behaviour if ((vncService::IsWinNT() && (vncService::VersionMajor() <= 4)) || (vncService::IsWin95() && (vncService::VersionMinor() == 0))) { // Perform special hack to display the dialog safely if (GetWindowThreadProcessId(GetForegroundWindow(), NULL) != GetCurrentProcessId()) { // We can't set our dialog as foreground if the foreground window // doesn't belong to us - it's unsafe! SetActiveWindow(hwnd); _this->m_foreground_hack = TRUE; _this->m_flash_state = FALSE; } } if (!_this->m_foreground_hack) { SetForegroundWindow(hwnd); } // Beep MessageBeep(MB_ICONEXCLAMATION); // Return success! return TRUE; } // Timer event case WM_TIMER: if ((_this->m_timeoutCount) == 0) EndDialog(hwnd, IDREJECT); _this->m_timeoutCount--; // Flash if necessary if (_this->m_foreground_hack) { if (GetWindowThreadProcessId(GetForegroundWindow(), NULL) != GetCurrentProcessId()) { _this->m_flash_state = !_this->m_flash_state; FlashWindow(hwnd, _this->m_flash_state); } else { _this->m_foreground_hack = FALSE; } } // Update the displayed count char temp[256]; sprintf(temp, "AutoReject:%u", (_this->m_timeoutCount)); SetDlgItemText(hwnd, IDC_ACCEPT_TIMEOUT, temp); break; // Dialog has just received a command case WM_COMMAND: switch (LOWORD(wParam)) { // User clicked Accept or pressed return case IDACCEPT: case IDOK: EndDialog(hwnd, IDACCEPT); return TRUE; case IDREJECT: case IDCANCEL: EndDialog(hwnd, IDREJECT); return TRUE; }; break; // Window is being destroyed! (Should never happen) case WM_DESTROY: EndDialog(hwnd, IDREJECT); return TRUE; } return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -