📄 page00transaction.cpp
字号:
/*****************************************************************************/
/* Page00Transaction.cpp Copyright (c) Ladislav Zezula 2006 */
/*---------------------------------------------------------------------------*/
/* Description: */
/*---------------------------------------------------------------------------*/
/* Date Ver Who Comment */
/* -------- ---- --- ------- */
/* 02.05.06 1.00 Lad The first version of Page00Transaction.cpp */
/*****************************************************************************/
#include "FileTest.h"
#include "resource.h"
static void UpdateDialog(HWND hDlg, int nError)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
UINT nIDFormat = IDS_TRANSACTION_NONE;
BOOL bEnable;
if(pfnCreateTransaction != NULL)
{
// CreateTransaction is allowed when no transaction is created
bEnable = (BOOL)(IsHandleInvalid(pData->hTransaction));
EnableDlgItems(hDlg, bEnable, IDC_CREATE_TRANSACTION, IDC_CREATE_TRANSACTION_HINT, 0);
// CommitTransaction and RollbackTransaction are allowed when a transaction is assigned
bEnable = (BOOL)(IsHandleValid(pData->hTransaction));
EnableDlgItems(hDlg, bEnable, IDC_COMMIT_TRANSACTION, IDC_COMMIT_TRANSACTION_HINT,
IDC_ROLLBACK_TRANSACTION, IDC_ROLLBACK_TRANSACTION_HINT,
0);
// Show the current transaction
if(IsHandleValid(pData->hTransaction) && pData->bTransactionActive)
nIDFormat = IDS_TRANSACTION_ACTIVE;
else
nIDFormat = IDS_TRANSACTION_INACTIVE;
// Show the last error
SetLastErrorText(hDlg, IDC_LAST_ERROR, nError);
// Show the transaction handle
if(IsHandleInvalid(pData->hTransaction))
SetDlgItemText(hDlg, IDC_FILE_HANDLE, _T("INVALID_HANDLE_VALUE"));
else
Hex2DlgTextPtr(hDlg, IDC_FILE_HANDLE, (DWORD_PTR)pData->hTransaction);
// Closing transaction is allowed when a transaction is created
bEnable = (BOOL)(IsHandleValid(pData->hTransaction));
EnableDlgItems(hDlg, bEnable, IDC_CLOSE_TRANSACTION, IDC_CLOSE_TRANSACTION_HINT, 0);
}
}
//-----------------------------------------------------------------------------
// Message handlers
static int OnInitDialog(HWND hDlg, LPARAM lParam)
{
PROPSHEETPAGE * pPage = (PROPSHEETPAGE *)lParam;
TPropSheetData * pData = (TPropSheetData *)pPage->lParam;
// Load the transaction APIs, as they are only supported in Vista and later
SetWindowLongPtr(hDlg, DWLP_USER, (LONG)pPage->lParam);
pData->hTransaction = INVALID_HANDLE_VALUE;
// If the transactions are not suported, show only the "not supported" static text
if(pfnCreateTransaction == NULL)
{
ShowDlgItems(hDlg, SW_HIDE, IDC_CREATE_TRANSACTION, IDC_CREATE_TRANSACTION_HINT,
IDC_COMMIT_TRANSACTION, IDC_COMMIT_TRANSACTION_HINT,
IDC_ROLLBACK_TRANSACTION, IDC_ROLLBACK_TRANSACTION_HINT,
0);
ShowDlgItems(hDlg, SW_SHOW, IDC_NOT_SUPPORTED, 0);
}
// Enable buttons if transactions are supported
UpdateDialog(hDlg, ERROR_SUCCESS);
return TRUE;
}
static int OnCreateTransaction(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
int nError = ERROR_SUCCESS;
// Create new transaction
if(nError == ERROR_SUCCESS && pfnCreateTransaction != NULL)
{
pData->hTransaction = pfnCreateTransaction(NULL,
NULL,
0,
0,
0,
NULL,
_T("Transaction for FileTest"));
if(IsHandleValid(pData->hTransaction))
pData->bTransactionActive = TRUE;
else
nError = GetLastError();
}
UpdateDialog(hDlg, nError);
return TRUE;
}
static int OnCommitTransaction(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
int nError = ERROR_SUCCESS;
// Commit the transaction
if(IsHandleValid(pData->hTransaction))
{
if(!pfnCommitTransaction(pData->hTransaction))
nError = GetLastError();
pData->bTransactionActive = FALSE;
pData->bUseTransaction = FALSE;
UpdateDialog(hDlg, nError);
}
return TRUE;
}
static int OnRollbackTransaction(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
int nError = ERROR_SUCCESS;
// Rollback the transaction
if(IsHandleValid(pData->hTransaction))
{
if(!pfnRollbackTransaction(pData->hTransaction))
nError = GetLastError();
pData->bTransactionActive = FALSE;
pData->bUseTransaction = FALSE;
UpdateDialog(hDlg, nError);
}
return TRUE;
}
static int OnCloseTransaction(HWND hDlg)
{
TPropSheetData * pData = (TPropSheetData *)GetWindowLongPtr(hDlg, DWLP_USER);
int nError = ERROR_SUCCESS;
// Assign the transaction to the current thread
if(IsHandleValid(pData->hTransaction))
CloseHandle(pData->hTransaction);
// Clear information about transaction
pData->hTransaction = INVALID_HANDLE_VALUE;
UpdateDialog(hDlg, nError);
return TRUE;
}
static int OnDestroy(HWND /* hDlg */)
{
return FALSE;
}
//-----------------------------------------------------------------------------
// Dialog procedure
static int OnCommand(HWND hDlg, UINT nNotify, UINT nIDCtrl)
{
if(nNotify == BN_CLICKED)
{
switch(nIDCtrl)
{
case IDC_CREATE_TRANSACTION:
OnCreateTransaction(hDlg);
return TRUE;
case IDC_COMMIT_TRANSACTION:
OnCommitTransaction(hDlg);
return TRUE;
case IDC_ROLLBACK_TRANSACTION:
OnRollbackTransaction(hDlg);
return TRUE;
case IDC_CLOSE_TRANSACTION:
OnCloseTransaction(hDlg);
return TRUE;
}
}
return FALSE;
}
INT_PTR CALLBACK PageProc00(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
return OnInitDialog(hDlg, lParam);
case WM_COMMAND:
return OnCommand(hDlg, HIWORD(wParam), LOWORD(wParam));
case WM_DESTROY:
return OnDestroy(hDlg);
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -