⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dboxmain.cpp

📁 Password Safe Password Safe is a password database utility. Users can keep their passwords securely
💻 CPP
📖 第 1 页 / 共 4 页
字号:
// file DboxMain.cpp//// Methods related to viewing the actual password database are in DboxView.cpp//-----------------------------------------------------------------------------#include "PasswordSafe.h"#include "ThisMfcApp.h"#include "corelib/PWSprefs.h"#if defined(POCKET_PC)  #include "pocketpc/resource.h"#else  #include <errno.h>  #include "resource.h"#endif// dialog boxen#include "DboxMain.h"#include "ClearQuestionDlg.h"#include "FindDlg.h"#include "PasskeyChangeDlg.h"#include "PasskeyEntry.h"#include "PasskeySetup.h"#include "UsernameEntry.h"#include "TryAgainDlg.h"#include "ExportText.h"// widget override?#include "SysColStatic.h"#ifdef POCKET_PC  #include "pocketpc/PocketPC.h"  #include "ShowPasswordDlg.h"#endif#include <afxpriv.h>#include <stdlib.h> // for qsort#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif#if defined(UNICODE)  #define CLIPBOARD_TEXT_FORMAT	CF_UNICODETEXT#else  #define CLIPBOARD_TEXT_FORMAT	CF_TEXT#endif/* * This is the string to be displayed instead of the actual password, unless * the user chooses to see the password: */const TCHAR *HIDDEN_PASSWORD = _T("**************");//-----------------------------------------------------------------------------class DboxAbout#if defined(POCKET_PC)   : public CPwsPopupDialog#else   : public CDialog#endif{public:#if defined(POCKET_PC)	typedef CPwsPopupDialog	super;#else	typedef CDialog			super;#endif   DboxAbout()      : super(DboxAbout::IDD)   {}   enum { IDD = IDD_ABOUTBOX };protected:   virtual void DoDataExchange(CDataExchange* pDX)    // DDX/DDV support   {      super::DoDataExchange(pDX);   }protected:   DECLARE_MESSAGE_MAP()};// I don't think we need this, but...BEGIN_MESSAGE_MAP(DboxAbout, super)END_MESSAGE_MAP()//-----------------------------------------------------------------------------DboxMain::DboxMain(CWnd* pParent)   : CDialog(DboxMain::IDD, pParent),     m_bSizing( false ), m_needsreading(true), m_windowok(false),     m_existingrestore(FALSE), m_toolbarsSetup(FALSE),     m_bShowPasswordInEdit(false), m_bShowPasswordInList(false),     m_bSortAscending(true), m_iSortedColumn(0),     m_core(app.m_core), m_LockDisabled(false){	//{{AFX_DATA_INIT(DboxMain)		// NOTE: the ClassWizard will add member initialization here	//}}AFX_DATA_INIT   m_hIcon = app.LoadIcon(IDI_CORNERICON);   m_hIconSm = (HICON) ::LoadImage(app.m_hInstance, MAKEINTRESOURCE(IDI_CORNERICON), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);   ClearData();   /*    * current file and current backup file specs are stored in registry    * Note that if m_currfile is non-empty, we will not read the registry value.    * This will happen if a filename was given in the command line.    */   if (m_core.GetCurFile().IsEmpty()) {     // If there's no stored preference, this is probably a fresh install.     // CheckPassword will catch this and handle it correctly     m_core.SetCurFile(PWSprefs::GetInstance()->		       GetPref(PWSprefs::StringPrefs::CurrentFile));   }#if !defined(POCKET_PC)   m_title = _T("");   m_toolbarsSetup = FALSE;#endif   m_bShowPasswordInEdit = false;   m_bShowPasswordInList = false;   m_bSortAscending = true;   m_iSortedColumn = 0;}BEGIN_MESSAGE_MAP(DboxMain, CDialog)	//{{AFX_MSG_MAP(DboxMain)   ON_WM_DESTROY()   ON_WM_SIZE()   ON_COMMAND(ID_MENUITEM_ABOUT, OnAbout)   ON_COMMAND(ID_PWSAFE_WEBSITE, OnPasswordSafeWebsite)   ON_COMMAND(ID_MENUITEM_COPYUSERNAME, OnCopyUsername)#if defined(POCKET_PC)   ON_WM_CREATE()#else   ON_WM_CONTEXTMENU()#endif   ON_NOTIFY(LVN_KEYDOWN, IDC_ITEMLIST, OnKeydownItemlist)   ON_NOTIFY(NM_DBLCLK, IDC_ITEMLIST, OnItemDoubleClick)   ON_NOTIFY(NM_DBLCLK, IDC_ITEMTREE, OnItemDoubleClick)   ON_COMMAND(ID_MENUITEM_BROWSE, OnBrowse)   ON_COMMAND(ID_MENUITEM_COPYPASSWORD, OnCopyPassword)   ON_COMMAND(ID_MENUITEM_NEW, OnNew)   ON_COMMAND(ID_MENUITEM_OPEN, OnOpen)   ON_COMMAND(ID_MENUITEM_RESTORE, OnRestore)   ON_COMMAND(ID_MENUTIME_SAVEAS, OnSaveAs)   ON_COMMAND(ID_MENUITEM_BACKUPSAFE, OnBackupSafe)   ON_COMMAND(ID_MENUITEM_CHANGECOMBO, OnPasswordChange)   ON_COMMAND(ID_MENUITEM_CLEARCLIPBOARD, OnClearClipboard)   ON_COMMAND(ID_MENUITEM_DELETE, OnDelete)   ON_COMMAND(ID_MENUITEM_EDIT, OnEdit)   ON_COMMAND(ID_MENUITEM_RENAME, OnRename)   ON_COMMAND(ID_MENUITEM_FIND, OnFind)   ON_COMMAND(ID_MENUITEM_OPTIONS, OnOptions)   ON_COMMAND(ID_MENUITEM_SAVE, OnSave)   ON_COMMAND(ID_MENUITEM_LIST_VIEW, OnListView)   ON_COMMAND(ID_MENUITEM_TREE_VIEW, OnTreeView)   ON_COMMAND(ID_MENUITEM_OLD_TOOLBAR, OnOldToolbar)   ON_COMMAND(ID_MENUITEM_NEW_TOOLBAR, OnNewToolbar)   ON_COMMAND(ID_FILE_EXPORTTO_OLD1XFORMAT, OnExportV17)   ON_COMMAND(ID_FILE_EXPORTTO_PLAINTEXT, OnExportText)   ON_COMMAND(ID_FILE_EXPORTTO_XML, OnExportXML)   ON_COMMAND(ID_FILE_IMPORT_PLAINTEXT, OnImportText)   ON_COMMAND(ID_FILE_IMPORT_XML, OnImportXML)   ON_COMMAND(ID_MENUITEM_ADD, OnAdd)   ON_COMMAND(ID_MENUITEM_ADDGROUP, OnAddGroup)   ON_WM_TIMER()   ON_COMMAND(ID_MENUITEM_AUTOTYPE, OnAutoType)#if defined(POCKET_PC)   ON_COMMAND(ID_MENUITEM_SHOWPASSWORD, OnShowPassword)#else   ON_NOTIFY(NM_SETFOCUS, IDC_ITEMLIST, OnSetfocusItemlist)   ON_NOTIFY(NM_KILLFOCUS, IDC_ITEMLIST, OnKillfocusItemlist)   ON_WM_DROPFILES()#endif   ON_NOTIFY(LVN_COLUMNCLICK, IDC_ITEMLIST, OnColumnClick)   ON_UPDATE_COMMAND_UI(ID_FILE_MRU_ENTRY1, OnUpdateMRU)   ON_WM_INITMENU()   ON_WM_INITMENUPOPUP()   ON_COMMAND(ID_MENUITEM_EXIT, OnOK)   ON_COMMAND(ID_MENUITEM_MINIMIZE, OnMinimize)   ON_COMMAND(ID_MENUITEM_UNMINIMIZE, OnUnMinimize)#if !defined(POCKET_PC)   ON_COMMAND(ID_TOOLBUTTON_ADD, OnAdd)   ON_COMMAND(ID_TOOLBUTTON_COPYPASSWORD, OnCopyPassword)   ON_COMMAND(ID_TOOLBUTTON_COPYUSERNAME, OnCopyUsername)   ON_COMMAND(ID_TOOLBUTTON_CLEARCLIPBOARD, OnClearClipboard)   ON_COMMAND(ID_TOOLBUTTON_DELETE, OnDelete)   ON_COMMAND(ID_TOOLBUTTON_EDIT, OnEdit)   ON_COMMAND(ID_TOOLBUTTON_NEW, OnNew)   ON_COMMAND(ID_TOOLBUTTON_OPEN, OnOpen)   ON_COMMAND(ID_TOOLBUTTON_SAVE, OnSave)#endif   ON_WM_SYSCOMMAND()#if !defined(POCKET_PC)   ON_BN_CLICKED(IDOK, OnEdit)   ON_WM_SIZING()#endif   ON_MESSAGE(WM_ICON_NOTIFY, OnTrayNotification)	//}}AFX_MSG_MAP   ON_COMMAND_EX_RANGE(ID_FILE_MRU_ENTRY1, ID_FILE_MRU_ENTRY20, OnOpenMRU)#if !defined(POCKET_PC)   ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipText)   ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipText)#endifEND_MESSAGE_MAP()BOOLDboxMain::OnInitDialog(){  ConfigureSystemMenu();  CDialog::OnInitDialog();  if (OpenOnInit()==FALSE) // If this function fails, abort launch    return TRUE;  // AlwaysOnTop preference read from database, if possible, hence set after OpenOnInit  m_bAlwaysOnTop = PWSprefs::GetInstance()->GetPref(PWSprefs::BoolPrefs::AlwaysOnTop);  UpdateAlwaysOnTop();  // ditto for CurrentBackup...   m_currbackup =     PWSprefs::GetInstance()->GetPref(PWSprefs::StringPrefs::CurrentBackup);   // ... and for UseSystemTray   if (!PWSprefs::GetInstance()->       GetPref(PWSprefs::BoolPrefs::UseSystemTray))     app.m_TrayIcon.HideIcon();   m_windowok = true;	  // Set the icon for this dialog.  The framework does this automatically  //  when the application's main window is not a dialog  SetIcon(m_hIcon, TRUE);  // Set big icon  SetIcon(m_hIconSm, FALSE); // Set small icon  // Init stuff for tree view  CImageList *pImageList = new CImageList();  BOOL status = pImageList->Create(9, 9, ILC_COLOR, 2, 0);  ASSERT(status != 0);  CBitmap bitmap;  // Order of LoadBitmap() calls matches CMyTreeCtrl public enum  bitmap.LoadBitmap(IDB_NODE);  pImageList->Add(&bitmap, (COLORREF)0x0);  bitmap.DeleteObject();  bitmap.LoadBitmap(IDB_LEAF);  pImageList->Add(&bitmap, (COLORREF)0x0);  bitmap.DeleteObject();  m_ctlItemTree.SetImageList(pImageList, TVSIL_NORMAL);  // Init stuff for list view  m_ctlItemList.SetExtendedStyle(LVS_EX_FULLROWSELECT);  int iColumnCount = 3;  m_ctlItemList.InsertColumn(0, _T("Title"));  m_ctlItemList.InsertColumn(1, _T("User Name"));  m_ctlItemList.InsertColumn(2, _T("Notes"));  m_bShowPasswordInEdit = PWSprefs::GetInstance()->    GetPref(PWSprefs::BoolPrefs::ShowPWDefault);  m_bShowPasswordInList = PWSprefs::GetInstance()->    GetPref(PWSprefs::BoolPrefs::ShowPWInList);  const CString lastView = PWSprefs::GetInstance()->    GetPref(PWSprefs::StringPrefs::LastView);  if (lastView != _T("list")) {    // not list mode, so start in tree view.    m_ctlItemList.ShowWindow(SW_HIDE);    m_ctlItemTree.ShowWindow(SW_SHOW);  }  CRect rect;  m_ctlItemList.GetClientRect(&rect);  int i1stWidth = PWSprefs::GetInstance()->GetPref(PWSprefs::IntPrefs::Column1Width,						   (rect.Width() / iColumnCount +						    rect.Width() % iColumnCount));  int i2ndWidth = PWSprefs::GetInstance()->GetPref(PWSprefs::IntPrefs::Column2Width,						   rect.Width() / iColumnCount);  int i3rdWidth = PWSprefs::GetInstance()->GetPref(PWSprefs::IntPrefs::Column3Width,						   rect.Width() / iColumnCount);  m_ctlItemList.SetColumnWidth(0, i1stWidth);  m_ctlItemList.SetColumnWidth(1, i2ndWidth);  m_ctlItemList.SetColumnWidth(2, i3rdWidth);  m_iSortedColumn = PWSprefs::GetInstance()->GetPref(PWSprefs::IntPrefs::SortedColumn);  m_bSortAscending = PWSprefs::GetInstance()->    GetPref(PWSprefs::BoolPrefs::SortAscending);  // refresh list will add and size password column if necessary...  RefreshList();  ChangeOkUpdate();  setupBars(); // Just to keep things a little bit cleaner#if !defined(POCKET_PC)  // {kjp} Can't drag and drop files onto an application in PocketPC  DragAcceptFiles(TRUE);  // {kjp} meaningless when target is a PocketPC device.  PWSprefs::GetInstance()->GetPrefRect(rect.top, rect.bottom, rect.left, rect.right);  if (rect.top == -1 || rect.bottom == -1 || rect.left == -1 || rect.right == -1) {    GetWindowRect(&rect);    SendMessage(WM_SIZE, SIZE_RESTORED, MAKEWPARAM(rect.Width(), rect.Height()));  } else {    MoveWindow(&rect, TRUE);  }#endif  m_core.SetUseDefUser(PWSprefs::GetInstance()->		       GetPref(PWSprefs::BoolPrefs::UseDefUser));  m_core.SetDefUsername(PWSprefs::GetInstance()->		       GetPref(PWSprefs::StringPrefs::DefUserName));  return TRUE;  // return TRUE unless you set the focus to a control}BOOLDboxMain::OpenOnInit(void){   /*     Routine to account for the differences between opening PSafe for     the first time, and just opening a different database or     un-minimizing the application   */   CMyString passkey;   int rc = GetAndCheckPassword(m_core.GetCurFile(), passkey, true);   int rc2 = PWScore::NOT_SUCCESS;   switch (rc)   {   case PWScore::SUCCESS:      rc2 = m_core.ReadCurFile(passkey);#if !defined(POCKET_PC)      m_title = "Password Safe - " + m_core.GetCurFile();#endif      break;    case PWScore::CANT_OPEN_FILE:      if (m_core.GetCurFile().IsEmpty()) {	 // Empty filename. Assume they are starting Password Safe 	 // for the first time and don't confuse them.	 // fallthrough to New()      } else {	// Here if there was a filename saved from last invocation, but it couldn't	// be opened. It was either removed or renamed, so ask the user what to do	CMyString msg = _T("The database ") + m_core.GetCurFile();	msg += _T(" couldn't be opened.\nDo you wish to look for it elsewhere (Yes), ");	msg += _T("create a new database (No), or exit (Cancel)?");	int rc3 = MessageBox(msg, AfxGetAppName(), (MB_ICONQUESTION | MB_YESNOCANCEL));	switch (rc3) {	case IDYES:	  rc2 = Open();	  break;	case IDNO:	  rc2 = New();	  break;	case IDCANCEL:	  rc2 = PWScore::USER_CANCEL;	  break;	}         break;      }   case TAR_NEW:      rc2 = New();      if (PWScore::USER_CANCEL == rc2) {         // somehow, get DboxPasskeyEntryFirst redisplayed...	  }      break;   case TAR_OPEN:      rc2 = Open();      if (PWScore::USER_CANCEL == rc2) {         // somehow, get DboxPasskeyEntryFirst redisplayed...	  }      break;   case PWScore::WRONG_PASSWORD:   default:      break;   }   if (rc2 == PWScore::SUCCESS)   {      m_existingrestore = FALSE;      m_needsreading = false;	  startLockCheckTimer();      return TRUE;   }   else   {      app.m_pMainWnd = NULL;      CDialog::OnCancel();      return FALSE;   }}voidDboxMain::OnDestroy(){   //WinHelp(0L, HELP_QUIT);   CDialog::OnDestroy();}voidDboxMain::OnItemDoubleClick( NMHDR *, LRESULT *){#if defined(POCKET_PC)	if ( app.GetProfileInt(_T(PWS_REG_OPTIONS), _T("dcshowspassword"), FALSE) == FALSE )	{		OnCopyPassword();	}	else	{		OnShowPassword();	}#else	OnCopyPassword();#endif}// Called to open a web browser to the URL associated with an entry.void DboxMain::OnBrowse(){  if (!m_BrowseURL.IsEmpty()) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -