dlgbackuprestore.c

来自「文件驱动加密,功能强大,可产生加密分区,支持AES,MD2,MD4,MD5MD2」· C语言 代码 · 共 576 行 · 第 1/2 页

C
576
字号
                volFilesize.QuadPart)
                {
                MsgError(hDlg, TEXT("Volume file too small to contain CDB"));
                retval = FALSE;
                }

            }
        }


	G_dlgBackupRestore_Params.ParamsOK = retval;

    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgBackupRestore_ValidateInput\n")));
	return G_dlgBackupRestore_Params.ParamsOK;
}


// =========================================================================
BOOL CALLBACK dlgBackupRestore_HandleMsg_WM_COMMAND(HWND hDlg, WPARAM wParam)
{
    BOOL retval = FALSE;
	int ctrlID;

    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgBackupRestore_HandleMsg_WM_COMMAND\n")));
    DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Command: %d\n"), LOWORD(wParam)));

    ctrlID = LOWORD(wParam);

    switch(ctrlID)
        {
        case IDOK:
			{
			BOOL allOK;

			if (dlgBackupRestore_ValidateInput(hDlg))
				{
				if (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_BACKUP)
					{
					allOK = driver_BackupCDB(
											 G_dlgBackupRestore_Params.SrcFilename,
											 G_dlgBackupRestore_Params.SrcOffset,
											 G_dlgBackupRestore_Params.DestFilename
											);
					}
				else
					{
					allOK = driver_RestoreCDB(
											 G_dlgBackupRestore_Params.SrcFilename,
											 G_dlgBackupRestore_Params.DestFilename,
											 G_dlgBackupRestore_Params.DestOffset
											);
					}

				if (allOK)
					{
					if (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_BACKUP)
						{
						MsgInfo(hDlg, TEXT("Backup successful."));
						}
					else
						{
						MsgInfo(hDlg, TEXT("Restore successful."));
						}

					EndDialog(hDlg, TRUE);
					}
				else
					{
					MsgError(hDlg, TEXT("Operation failed."));
					}
				}

            retval = TRUE;
            break;
            }

        case IDCANCEL:
            {
            EndDialog(hDlg, TRUE);
            retval = TRUE;
            break;
            }

        case IDC_BUTTON_BROWSESRCFILE:
        case IDC_BUTTON_BROWSEDESTFILE:
            {
            OPENFILENAME ofn;
            DWORD flags;
            WCHAR filename[FREEOTFE_MAX_FILENAME_LENGTH];
			BOOL fileDlgOK;

            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Browse...\n")));

            memset(filename, 0, sizeof(filename));

            ofn.lStructSize       = sizeof(ofn);
            ofn.hwndOwner         = hDlg;
            ofn.hInstance         = NULL;
            ofn.lpstrCustomFilter = NULL;
            ofn.lpstrFile         = filename;
            ofn.nMaxFile          = (sizeof(filename) / sizeof(filename[0]));
            ofn.lpstrFileTitle    = NULL;
            ofn.nMaxFileTitle     = 0;
            ofn.lpstrInitialDir   = NULL;
            ofn.lpstrTitle        = NULL;
            flags = (
                     // OFN_HIDEREADONLY |
                     OFN_FILEMUSTEXIST | 
                     OFN_PATHMUSTEXIST
                    );
            ofn.Flags             = flags;
            ofn.nFileOffset       = 0;
            ofn.nFileExtension    = 0;
            ofn.lpstrDefExt       = NULL;
            ofn.lCustData         = 0;
            ofn.lpfnHook          = NULL;
            ofn.lpTemplateName    = NULL;

            if (
				(
				 (ctrlID == IDC_BUTTON_BROWSESRCFILE) &&
				 (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_RESTORE)
				) || 
				(
				 (ctrlID == IDC_BUTTON_BROWSEDESTFILE) &&
				 (G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_BACKUP)
				)
			   )
                {
                ofn.lpstrFilter       = FILE_FILTER_FLT_CDBBACKUPS;
                ofn.nMaxCustFilter    = FILE_FILTER_CNT_CDBBACKUPS;
                ofn.nFilterIndex      = FILE_FILTER_DFLT_CDBBACKUPS;
                }
            else
                {
                ofn.lpstrFilter       = FILE_FILTER_FLT_VOLUMESANDKEYFILES;
                ofn.nMaxCustFilter    = FILE_FILTER_CNT_VOLUMESANDKEYFILES;
                ofn.nFilterIndex      = FILE_FILTER_DFLT_VOLUMESANDKEYFILES;
                }

            if (
				(ctrlID == IDC_BUTTON_BROWSEDESTFILE) &&
				(G_dlgBackupRestore_DlgMode == DLGMODE_BACKUPRESTORE_BACKUP)
			   )
				{
				fileDlgOK = GetSaveFileName(&ofn);
				}
			else
				{
				fileDlgOK = GetOpenFileName(&ofn);
				}

			if (fileDlgOK)
                {
                DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Open file dialog OK'd...\n")));
                DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Filename: %ls\n"), filename));
                if (ctrlID == IDC_BUTTON_BROWSESRCFILE)
                    {
                    SetDlgItemText(hDlg, IDC_EDIT_SRCFILENAME, filename);
                    }
                else
                    {
                    SetDlgItemText(hDlg, IDC_EDIT_DESTFILENAME, filename);
                    }

                }
            else
                {
                DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("Open file dialog cancelled\n")));
                }

            break;
            }

        }

    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgBackupRestore_HandleMsg_WM_COMMAND\n")));
    return retval;
}


// =========================================================================
BOOL CALLBACK dlgBackupRestore_HandleMsg_WM_NOTIFY(HWND hDlg, WPARAM wParam, LPARAM lParam)
{
    BOOL retval = FALSE;
    int idCtrl;
    NMHDR* notifHdr;
    NMUPDOWN* lpnmud;

    DEBUGOUTGUI(DEBUGLEV_ENTER, (TEXT("dlgBackupRestore_HandleMsg_WM_NOTIFY\n")));

    idCtrl = (int)wParam;
    notifHdr = (NMHDR*)lParam;

    switch (notifHdr->code)
        {
        // Spin edit up/down button
        case UDN_DELTAPOS:
            {
            switch(idCtrl)
                {
                case IDC_SPIN_SRCOFFSET:
                    {
                    lpnmud = (NMUPDOWN*)lParam;
                    AdjustSpinControl(
                                      hDlg, 
                                      IDC_EDIT_SRCOFFSET, 
                                      0, 
                                      INT_MAX, 
                                      -(lpnmud->iDelta)
                                     );
                    retval = TRUE;
                    break;
                    }

                case IDC_SPIN_DESTOFFSET:
                    {
                    lpnmud = (NMUPDOWN*)lParam;
                    AdjustSpinControl(
                                      hDlg, 
                                      IDC_EDIT_DESTOFFSET, 
                                      0, 
                                      INT_MAX, 
                                      -(lpnmud->iDelta)
                                     );
                    retval = TRUE;
                    break;
                    }

                }
            break;
            }

        }


    DEBUGOUTGUI(DEBUGLEV_EXIT, (TEXT("dlgBackupRestore_HandleMsg_WM_NOTIFY\n")));
    return TRUE;
}


// =========================================================================
BOOL CALLBACK dlgBackupRestore_Proc(
                           HWND hDlg, 
                           UINT msg, 
                           WPARAM wParam, 
                           LPARAM lParam
                          )
{
    BOOL retval = FALSE;

    switch(msg)
        {
        case WM_NOTIFY:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_NOTIFY\n")));
            retval = dlgBackupRestore_HandleMsg_WM_NOTIFY(hDlg, wParam, lParam);
            break;
            }

        case WM_INITDIALOG:
            {
            retval = dlgBackupRestore_HandleMsg_WM_INITDIALOG(hDlg);
            break;
            }

        case WM_CLOSE:
            {
            DEBUGOUTGUI(DEBUGLEV_INFO, (TEXT("MSG: WM_CLOSE\n")));
            retval = dlgBackupRestore_HandleMsg_WM_CLOSE(hDlg);
            break;
            }

        case WM_COMMAND:
            {
            retval = dlgBackupRestore_HandleMsg_WM_COMMAND(hDlg, wParam);
            break;
            }

        }

    return retval;
}


// =========================================================================
// =========================================================================

⌨️ 快捷键说明

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