SessionDialog.cpp
上传用户: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. // SessionDialog.cpp: implementation of the SessionDialog class.
  24. #include "stdhdrs.h"
  25. #include "vncviewer.h"
  26. #include "SessionDialog.h"
  27. #include "Exception.h"
  28. #define SESSION_MRU_KEY_NAME _T("Software\ORL\VNCviewer\MRU")
  29. #define NUM_MRU_ENTRIES 8
  30. SessionDialog::SessionDialog(VNCOptions *pOpt)
  31. {
  32. m_pOpt = pOpt;
  33.     m_pMRU = new MRU(SESSION_MRU_KEY_NAME);
  34. }
  35. SessionDialog::~SessionDialog()
  36. {
  37.     delete m_pMRU;
  38. }
  39. // It's exceedingly unlikely, but possible, that if two modal dialogs were
  40. // closed at the same time, the static variables used for transfer between 
  41. // window procedure and this method could overwrite each other.
  42. int SessionDialog::DoDialog()
  43. {
  44. return DialogBoxParam(pApp->m_instance, MAKEINTRESOURCE(IDD_SESSION_DLG), 
  45. NULL, (DLGPROC) SessDlgProc, (LONG) this);
  46. }
  47. BOOL CALLBACK SessionDialog::SessDlgProc(  HWND hwnd,  UINT uMsg,  WPARAM wParam, LPARAM lParam ) {
  48. // This is a static method, so we don't know which instantiation we're 
  49. // dealing with. But we can get a pseudo-this from the parameter to 
  50. // WM_INITDIALOG, which we therafter store with the window and retrieve
  51. // as follows:
  52. SessionDialog *_this = (SessionDialog *) GetWindowLong(hwnd, GWL_USERDATA);
  53. switch (uMsg) {
  54. case WM_INITDIALOG:
  55. {
  56.             SetWindowLong(hwnd, GWL_USERDATA, lParam);
  57.             SessionDialog *_this = (SessionDialog *) lParam;
  58.             CentreWindow(hwnd);
  59.             // Set up recently-used list
  60.             HWND hcombo = GetDlgItem(  hwnd, IDC_HOSTNAME_EDIT);
  61.             TCHAR valname[256];
  62.             for (int i = 0; i < _this->m_pMRU->NumItems(); i++) {
  63.                 _this->m_pMRU->GetItem(i, valname, 255);
  64.                 int pos = SendMessage(hcombo, CB_ADDSTRING, 0, (LPARAM) valname);
  65.             }
  66.             SendMessage(hcombo, CB_SETCURSEL, 0, 0);
  67.             return TRUE;
  68. }
  69. case WM_COMMAND:
  70. switch (LOWORD(wParam)) {
  71. case IDOK:
  72.             TCHAR tmphost[256];
  73.             TCHAR display[256];
  74.             TCHAR fulldisplay[256];
  75. GetDlgItemText(hwnd, IDC_HOSTNAME_EDIT, display, 256);
  76.             _tcscpy(fulldisplay, display);
  77.             if (!ParseDisplay(display, tmphost, 255, &_this->m_port)) {
  78.                 MessageBox(NULL, 
  79.                     _T("Invalid VNC server specified.nr")
  80.                     _T("Server should be of the form host:display."), 
  81.                     _T("Connection setup"), MB_OK | MB_ICONEXCLAMATION );
  82.             } else {
  83.                 _tcscpy(_this->m_host, tmphost);
  84.                 _this->m_pMRU->AddItem(fulldisplay);
  85.                 EndDialog(hwnd, TRUE);
  86.             }
  87. return TRUE;
  88. case IDCANCEL:
  89. EndDialog(hwnd, FALSE);
  90. return TRUE;
  91. case IDC_OPTIONBUTTON:
  92. {
  93. _this->m_pOpt->DoDialog();
  94. return TRUE;
  95. }
  96. }
  97. break;
  98. case WM_DESTROY:
  99. EndDialog(hwnd, FALSE);
  100. return TRUE;
  101. }
  102. return 0;
  103. }