mirror of
https://github.com/ladislav-zezula/FileTest
synced 2026-06-08 15:24:12 +00:00
160 lines
4.8 KiB
C++
160 lines
4.8 KiB
C++
/*****************************************************************************/
|
|
/* DlgDataEditor.cpp Copyright (c) Ladislav Zezula 2014 */
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Description: Common module for a few simple dialogs */
|
|
/*---------------------------------------------------------------------------*/
|
|
/* Date Ver Who Comment */
|
|
/* -------- ---- --- ------- */
|
|
/* 19.03.14 1.00 Lad Created */
|
|
/*****************************************************************************/
|
|
|
|
#include "FileTest.h"
|
|
#include "resource.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Local structures
|
|
|
|
struct TDialogData
|
|
{
|
|
TAnchors * pAnchors;
|
|
ULONGLONG BaseAddress;
|
|
LPBYTE pbFileData;
|
|
size_t cbFileData;
|
|
HWND hDlg;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Message handlers
|
|
|
|
static void OnInitDialog(HWND hDlg, LPARAM lParam)
|
|
{
|
|
TDialogData * pData = (TDialogData *)lParam;
|
|
TAnchors * pAnchors;
|
|
HWND hWndChild;
|
|
|
|
// Initialize dialog data
|
|
SetDialogIcon(hDlg, IDI_FILE_TEST);
|
|
SetDialogData(hDlg, pData);
|
|
pData->hDlg = hDlg;
|
|
|
|
// Center the dialog to parent
|
|
CenterWindowToParent(hDlg);
|
|
|
|
// Configure the anchors
|
|
pData->pAnchors = pAnchors = new TAnchors(hDlg);
|
|
if(pAnchors != NULL)
|
|
{
|
|
pAnchors->AddAnchor(hDlg, IDC_FILE_DATA, akAll);
|
|
pAnchors->AddAnchor(hDlg, IDC_INFORMATION, akLeft | akRight | akBottom);
|
|
pAnchors->AddAnchor(hDlg, IDOK, akRight | akBottom);
|
|
}
|
|
|
|
// Configure the data viewer
|
|
hWndChild = GetDlgItem(hDlg, IDC_FILE_DATA);
|
|
if(hWndChild != NULL)
|
|
{
|
|
DataEditor_SetDataFormat(hWndChild, PtrPlatformSpecific, 0x10);
|
|
DataEditor_SetData(hWndChild, (ULONGLONG)pData->BaseAddress, pData->pbFileData, pData->cbFileData);
|
|
}
|
|
}
|
|
|
|
static void OnNotify(HWND hDlg, NMHDR * pNMHDR)
|
|
{
|
|
if(pNMHDR->code == DEN_EXCEPTION)
|
|
{
|
|
PDTE_EXCEPTION_DATA pExceptionData = (PDTE_EXCEPTION_DATA)pNMHDR;
|
|
HWND hWndChild = GetDlgItem(hDlg, IDC_INFORMATION);
|
|
|
|
if(hWndChild != NULL)
|
|
{
|
|
SetWindowTextRc(hWndChild, IDS_DATA_EXCEPTION,
|
|
pExceptionData->WriteOperation ? _T("writing") : _T("reading"),
|
|
pExceptionData->ExceptionAddress);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void OnDestroy(HWND hDlg)
|
|
{
|
|
TDialogData * pData = ((TDialogData *)GetWindowLongPtr(hDlg, DWLP_USER));
|
|
|
|
if(pData != NULL)
|
|
{
|
|
if(pData->pAnchors != NULL)
|
|
delete pData->pAnchors;
|
|
pData->pAnchors = NULL;
|
|
}
|
|
}
|
|
|
|
static int OnFlushViewOfFileClick(HWND hDlg)
|
|
{
|
|
TDialogData* pData = ((TDialogData*)GetWindowLongPtr(hDlg, DWLP_USER));
|
|
|
|
FlushViewOfFile(pData->pbFileData, pData->cbFileData);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
static INT_PTR CALLBACK DialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
TDialogData * pData;
|
|
UINT nIDCtrl;
|
|
UINT nIDNotify;
|
|
|
|
// Dialog initialization
|
|
switch(uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
OnInitDialog(hDlg, lParam);
|
|
return TRUE;
|
|
|
|
case WM_SIZE:
|
|
case WM_GETMINMAXINFO:
|
|
if((pData = ((TDialogData *)GetWindowLongPtr(hDlg, DWLP_USER))) != NULL)
|
|
pData->pAnchors->OnMessage(uMsg, wParam, lParam);
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
OnNotify(hDlg, (NMHDR *)lParam);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
nIDNotify = HIWORD(wParam);
|
|
nIDCtrl = LOWORD(wParam);
|
|
|
|
if (nIDNotify == BN_CLICKED)
|
|
{
|
|
switch (nIDCtrl)
|
|
{
|
|
case IDC_FLUSH_VIEW:
|
|
OnFlushViewOfFileClick(hDlg);
|
|
break;
|
|
|
|
default:
|
|
EndDialog(hDlg, nIDCtrl);
|
|
}
|
|
}
|
|
break;
|
|
|
|
case WM_DESTROY:
|
|
OnDestroy(hDlg);
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Dialog functions
|
|
|
|
INT_PTR DataEditorDialog(HWND hParent, LPVOID BaseAddress, size_t ViewSize)
|
|
{
|
|
TDialogData Data;
|
|
|
|
ZeroMemory(&Data, sizeof(TDialogData));
|
|
Data.BaseAddress = (ULONGLONG)BaseAddress;
|
|
Data.pbFileData = (LPBYTE)BaseAddress;
|
|
Data.cbFileData = ViewSize;
|
|
return DialogBoxParam(g_hInst, MAKEINTRESOURCE(IDD_DATA_EDITOR), hParent, DialogProc, (LPARAM)&Data);
|
|
}
|