static int OnDeltaPos(HWND hDlg, NMUPDOWN * pNMUpDown) { TFileTestData * pData = GetDialogData(hDlg); LONGLONG ByteOffset = 0; DWORD Length = 0; if(pNMUpDown->hdr.idFrom == IDC_BYTE_OFFSET_SPIN) { DlgText2Hex64(hDlg, IDC_BYTE_OFFSET, &ByteOffset); ByteOffset -= pNMUpDown->iDelta * 0x10000; if(ByteOffset < 0) ByteOffset = 0; Hex2DlgText64(hDlg, IDC_BYTE_OFFSET, ByteOffset); UpdateFileData(hDlg, NULL, pData->cbFileData, pData->FillPattern); } if(pNMUpDown->hdr.idFrom == IDC_LENGTH_SPIN) { DlgText2Hex32(hDlg, IDC_LENGTH, &Length); Length -= pNMUpDown->iDelta * 0x1000; if((int)Length < 0) Length = 0; Hex2DlgText32(hDlg, IDC_LENGTH, Length); UpdateFileData(hDlg, NULL, pData->cbFileData, pData->FillPattern); } return TRUE; }
static int OnCommand(HWND hDlg, UINT nNotify, UINT nIDCtrl) { TFileTestData * pData; if(nNotify == BN_CLICKED) { switch(nIDCtrl) { case IDC_READ_FILE: case IDC_WRITE_FILE: case IDC_NTREAD_FILE: case IDC_NTWRITE_FILE: return OnReadWriteFile(hDlg, nIDCtrl); case IDC_LOCK_FILE: case IDC_UNLOCK_FILE: case IDC_NTLOCK_FILE: case IDC_NTUNLOCK_FILE: return OnLockUnlockFile(hDlg, nIDCtrl); case IDC_FILL_DATA: return ExecuteContextMenuForDlgItem(hDlg, IDC_FILL_DATA, IDR_DATA_PATTERN); case IDC_FILL_DATA_ZEROS: case IDC_FILL_DATA_PATTERN: case IDC_FILL_DATA_RANDOM: return UpdateFileData(hDlg, NULL, 0, nIDCtrl); case IDC_GET_FILE_SIZE: return OnGetFileSizeClick(hDlg); case IDC_SET_FILE_POINTER: return OnSetFilePointerClick(hDlg); case IDC_SET_END_OF_FILE: return OnSetEndOfFileClick(hDlg); } } if(nNotify == EN_KILLFOCUS) { if(nIDCtrl == IDC_BYTE_OFFSET || nIDCtrl == IDC_LENGTH) { pData = GetDialogData(hDlg); UpdateFileData(hDlg, NULL, pData->cbFileData, 0); } } return FALSE; }
static int OnInitDialog(HWND hDlg, LPARAM lParam) { PROPSHEETPAGE * pPage = (PROPSHEETPAGE *)lParam; TFileTestData * pData = (TFileTestData *)pPage->lParam; HWND hWndChild; SetDialogData(hDlg, pPage->lParam); // Configure dialog resizing if(pData->bEnableResizing) { pAnchors = new TAnchors(); pAnchors->AddAnchor(hDlg, IDC_BYTE_OFFSET_TITLE, akLeft | akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_BYTE_OFFSET, akLeft | akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_BYTE_OFFSET_SPIN, akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_LENGTH_TITLE, akLeftCenter | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_LENGTH, akLeftCenter | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_LENGTH_SPIN, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_INCREASE_FILEPOS, akLeft | akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_READ_FILE, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_WRITE_FILE, akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_NTREAD_FILE, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_NTWRITE_FILE, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_LOCK_FILE, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_UNLOCK_FILE, akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_NTLOCK_FILE, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_NTUNLOCK_FILE, akRight | akTop); pAnchors->AddAnchor(hDlg, IDC_FILL_DATA_MENU, akLeft | akTop); pAnchors->AddAnchor(hDlg, IDC_GET_FILE_SIZE, akTop | akRightCenter); pAnchors->AddAnchor(hDlg, IDC_SET_FILE_POINTER, akLeftCenter | akTop); pAnchors->AddAnchor(hDlg, IDC_SET_END_OF_FILE, akTop | akRight); pAnchors->AddAnchor(hDlg, IDC_FILE_DATA, akAll); pAnchors->AddAnchor(hDlg, IDC_RESULT_FRAME, akLeft | akRight | akBottom); pAnchors->AddAnchor(hDlg, IDC_LAST_ERROR_TITLE, akLeft | akBottom); pAnchors->AddAnchor(hDlg, IDC_LAST_ERROR, akLeft | akRight | akBottom); pAnchors->AddAnchor(hDlg, IDC_IOSTATUS_INFO_TITLE, akLeft | akBottom); pAnchors->AddAnchor(hDlg, IDC_IOSTATUS_INFO, akLeft | akRight | akBottom); } // Allocate the initial data. Make them aligned to sector alignment pData->cbFileDataMax = INITIAL_DATA_BUFFER_SIZE; pData->pbFileData = (LPBYTE)VirtualAlloc(NULL, pData->cbFileDataMax, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); pData->cbFileData = 0; // Zero the data if(pData->pbFileData != NULL) memset(pData->pbFileData, 0, pData->cbFileDataMax); // If there's field for data obtained by ReadFile, sets it to 8 bytes per line hWndChild = GetDlgItem(hDlg, IDC_FILE_DATA); if(hWndChild != NULL) DataEditor_SetBytesPerLine(hWndChild, 0x08); // Set initial values for file position and data Hex2DlgText64(hDlg, IDC_BYTE_OFFSET, 0); Hex2DlgText32(hDlg, IDC_LENGTH, INITIAL_DATA_BUFFER_SIZE); UpdateFileData(hDlg, NULL, 0, IDC_FILL_DATA_PATTERN); return TRUE; }
static int OnDataPaste(HWND hDlg, PDTE_PASTE_DATA pPasteData) { // Ask the user whether to cut the data or not if(MessageBoxRc(hDlg, IDS_QUESTION, IDS_WANT_TRIM_DATA) == IDYES) { // Paste the data to the view UpdateFileData(hDlg, pPasteData->szPasteText, pPasteData->PasteOffset, 0); // Mark the request as handled, so the data editor stops fuhrter processing pPasteData->bHandled = TRUE; } return TRUE; }