- Reorganize the header inclusions; add a PCH.
- Transform the event details dialog into a control that can be embedded:
* in a resizable dialog,
* or in a pane below the window listing the events.
CORE-11637
svn path=/trunk/; revision=72079
+list(APPEND SOURCE
+ eventvwr.c
+ evtdetctl.c
+ eventvwr.h)
+
file(GLOB eventvwr_rc_deps res/*.*)
add_rc_deps(eventvwr.rc ${eventvwr_rc_deps})
-add_executable(eventvwr eventvwr.c eventvwr.rc)
+add_executable(eventvwr ${SOURCE} eventvwr.rc)
+add_pch(eventvwr eventvwr.h SOURCE)
set_module_type(eventvwr win32gui UNICODE)
target_link_libraries(eventvwr ${PSEH_LIB})
add_importlibs(eventvwr user32 gdi32 comctl32 comdlg32 advapi32 shell32 shlwapi msvcrt kernel32 ntdll)
* PROJECT: ReactOS Event Log Viewer
* LICENSE: GPL - See COPYING in the top level directory
* FILE: base/applications/mscutils/eventvwr/eventvwr.c
- * PURPOSE: Colors dialog
+ * PURPOSE: Event Log Viewer main file
* PROGRAMMERS: Marc Piulachs (marc.piulachs at codexchange [dot] net)
* Eric Kohl
* Hermes Belusca-Maito
*/
-#include <stdio.h>
-#include <stdlib.h>
-
-#define WIN32_NO_STATUS
-
-#include <windef.h>
-#include <winbase.h>
-#include <wingdi.h>
-#include <winuser.h>
-#include <winnls.h>
-#include <winreg.h>
-
-#include <ndk/rtlfuncs.h>
-
-#define ROUND_DOWN(n, align) (((ULONG)n) & ~((align) - 1l))
-#define ROUND_UP(n, align) ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
+#include "eventvwr.h"
+#include "evtdetctl.h"
#include <shellapi.h>
#include <shlwapi.h>
-
-#include <windowsx.h>
-#include <commctrl.h>
-#include <richedit.h>
-#include <commdlg.h>
-
-/*
- * windowsx.h extensions
- */
-#define EnableDlgItem(hDlg, nID, bEnable) \
- EnableWindow(GetDlgItem((hDlg), (nID)), (bEnable))
-
-#define ProgressBar_SetPos(hwndCtl,pos) \
- ((int)SNDMSG((hwndCtl),PBM_SETPOS,(WPARAM)(int)(pos),(LPARAM)0))
-#define ProgressBar_SetRange(hwndCtl,range) \
- ((int)SNDMSG((hwndCtl),PBM_SETRANGE,(WPARAM)0,(LPARAM)(range)))
-#define ProgressBar_SetStep(hwndCtl,inc) \
- ((int)SNDMSG((hwndCtl),PBM_SETSTEP,(WPARAM)(int)(inc),(LPARAM)0))
-#define ProgressBar_StepIt(hwndCtl) \
- ((int)SNDMSG((hwndCtl),PBM_STEPIT,(WPARAM)0,(LPARAM)0))
-
-#define StatusBar_GetItemRect(hwndCtl,index,lprc) \
- ((BOOL)SNDMSG((hwndCtl),SB_GETRECT,(WPARAM)(int)(index),(LPARAM)(RECT*)(lprc)))
-#define StatusBar_SetText(hwndCtl,index,data) \
- ((BOOL)SNDMSG((hwndCtl),SB_SETTEXT,(WPARAM)(index),(LPARAM)(data)))
-
-
#include <strsafe.h>
-/* Missing RichEdit flags in our richedit.h */
-#define AURL_ENABLEURL 1
-#define AURL_ENABLEEMAILADDR 2
-#define AURL_ENABLETELNO 4
-#define AURL_ENABLEEAURLS 8
-#define AURL_ENABLEDRIVELETTERS 16
-
-#include "resource.h"
-
-#ifndef WM_APP
- #define WM_APP 0x8000
-#endif
-#define LVM_PROGRESS (WM_APP + 1)
+// #include "resource.h"
+#define LVM_PROGRESS (WM_APP + 1) // Used by the subclassed ListView
static const LPCWSTR szWindowClass = L"EVENTVWR"; /* The main window class name */
static const WCHAR EVENTLOG_BASE_KEY[] = L"SYSTEM\\CurrentControlSet\\Services\\EventLog\\";
};
/* MessageFile message buffer size */
-#define EVENT_MESSAGE_EVENTTEXT_BUFFER 1024*10
+#define EVENT_MESSAGE_EVENTTEXT_BUFFER 1024*10 // NOTE: Used by evtdetctl.c
#define EVENT_MESSAGE_FILE_BUFFER 1024*10
#define EVENT_DLL_SEPARATOR L";"
#define EVENT_CATEGORY_MESSAGE_FILE L"CategoryMessageFile"
#define EVENT_PARAMETER_MESSAGE_FILE L"ParameterMessageFile"
#define MAX_LOADSTRING 255
-#define ENTRY_SIZE 2056
#define SPLIT_WIDTH 4
WCHAR szLoadingWait[MAX_LOADSTRING]; /* The "Loading, please wait..." text */
WCHAR szEmptyList[MAX_LOADSTRING]; /* The "There are no items to show in this view" text */
WCHAR szSaveFilter[MAX_LOADSTRING]; /* Filter Mask for the save Dialog */
-INT nSplitPos; /* Splitter position */
+
+INT nVSplitPos; /* Vertical splitter (1) position */
+INT nHSplitPos; /* Horizontal splitter (2) position */
+BYTE bSplit = 0; /* Splitter state:
+ * 0: No splitting;
+ * 1: Vertical splitting;
+ * 2: Horizontal splitting.
+ */
+
HWND hwndMainWindow; /* Main window */
HWND hwndTreeView; /* TreeView control */
-HWND hwndListView; /* ListView control */
+HWND hwndListView; /* ListView control */ // NOTE: Used by evtdetctl.c
+HWND hwndEventDetails; /* Event details pane */
HWND hwndStatus; /* Status bar */
HWND hwndStatusProgress; /* Progress bar in the status bar */
HMENU hMainMenu; /* The application's main menu */
HTREEITEM htiSystemLogs = NULL, htiAppLogs = NULL, htiUserLogs = NULL;
-/*
- * Structure that caches information about an opened event log.
- */
-typedef struct _EVENTLOG
-{
- LIST_ENTRY ListEntry;
-
- // HANDLE hEventLog; // At least for user logs, a handle is kept opened (by eventlog service) as long as the event viewer has the focus on this log.
-
- PWSTR ComputerName; // Computer where the log resides
-
-/** Cached information **/
- PWSTR LogName; // Internal name (from registry, or file path for user logs)
- PWSTR FileName; // Cached, for user logs; retrieved once (at startup) from registry for system logs (i.e. may be different from the one opened by the eventlog service)
- // PWSTR DisplayName; // The default value is the one computed; can be modified by the user for this local session only.
- // We can use the TreeView' item name for the DisplayName...
- BOOL Permanent; // TRUE: system log; FALSE: user log
-
-/** Volatile information **/
- // ULONG Flags;
- // ULONG MaxSize; // Always retrieved from registry (only valid for system logs)
- // ULONG Retention; // Always retrieved from registry (only valid for system logs)
-} EVENTLOG, *PEVENTLOG;
-
-typedef struct _EVENTLOGFILTER
-{
- LIST_ENTRY ListEntry;
-
- LONG ReferenceCount;
-
- // HANDLE hEnumEventsThread;
- // HANDLE hStopEnumEvent;
-
- // PWSTR DisplayName; // The default value is the one computed; can be modified by the user for this local session only.
- // We can use the TreeView' item name for the DisplayName...
-
- BOOL Information;
- BOOL Warning;
- BOOL Error;
- BOOL AuditSuccess;
- BOOL AuditFailure;
-
- // ULONG Category;
- ULONG EventID;
-
- /*
- * The following three string filters are multi-strings that enumerate
- * the list of sources/users/computers to be shown. If a string points
- * to an empty string: "\0", it filters for an empty source/user/computer.
- * If a string points to NULL, it filters for all sources/users/computers.
- */
- PWSTR Sources;
- PWSTR Users;
- PWSTR ComputerNames;
-
- /* List of event logs maintained by this filter */
- ULONG NumOfEventLogs;
- PEVENTLOG EventLogs[ANYSIZE_ARRAY];
-} EVENTLOGFILTER, *PEVENTLOGFILTER;
-
/* Global event records cache for the current active event log filter */
DWORD g_TotalRecords = 0;
PEVENTLOGRECORD *g_RecordPtrs = NULL;
/* Default Open/Save-As dialog box */
OPENFILENAMEW sfn;
-typedef struct _DETAILDATA
-{
- PEVENTLOGFILTER EventLogFilter;
- BOOL bDisplayWords;
- HFONT hMonospaceFont;
-} DETAILDATA, *PDETAILDATA;
-
/* Forward declarations of functions included in this code module */
}
-BOOL
+BOOL // NOTE: Used by evtdetctl.c
GetEventMessage(IN LPCWSTR KeyName,
IN LPCWSTR SourceName,
IN PEVENTLOGRECORD pevlr,
(HMENU)100, // window ID
hInstance, // instance
NULL); // window data
- nSplitPos = 250;
GetClientRect(hwndMainWindow, &rcClient);
GetWindowRect(hwndStatus, &rs);
StatusBar_GetItemRect(hwndStatus, 0, &rs);
hwndStatusProgress = CreateWindowExW(0, // no extended styles
PROGRESS_CLASSW, // status bar
- L"", // no text
+ NULL, // no text
WS_CHILD | PBS_SMOOTH, // styles
- rs.left, rs.top, rs.right-rs.left, rs.bottom-rs.top, // x, y, cx, cy
+ rs.left, rs.top, // x, y
+ rs.right-rs.left, rs.bottom-rs.top, // cx, cy
hwndStatus, // parent window
NULL, // window ID
hInstance, // instance
NULL); // window data
ProgressBar_SetStep(hwndStatusProgress, 1);
+ /* Initialize the splitter default positions */
+ nVSplitPos = 250;
+ nHSplitPos = 250;
+
/* Create the TreeView */
hwndTreeView = CreateWindowExW(WS_EX_CLIENTEDGE,
WC_TREEVIEWW,
- L"",
+ NULL,
// WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_SHOWSELALWAYS,
WS_CHILD | WS_VISIBLE | /* WS_TABSTOP | */ TVS_HASLINES | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS,
- 0,
- 0,
- nSplitPos - SPLIT_WIDTH/2,
+ 0, 0,
+ nVSplitPos - SPLIT_WIDTH/2,
(rcClient.bottom - rcClient.top) - StatusHeight,
hwndMainWindow,
NULL,
LoadStringW(hInstance, IDS_EVENTLOG_USER, szTemp, ARRAYSIZE(szTemp));
htiUserLogs = TreeViewAddItem(hwndTreeView, NULL, szTemp, 0, 1, (LPARAM)NULL);
+ /* Create the Event details pane (optional) */
+ hwndEventDetails = CreateEventDetailsCtrl(hInst, hwndMainWindow, (LPARAM)NULL);
+ // hwndEventDetails = NULL;
+ if (hwndEventDetails)
+ {
+ // SetWindowLongPtrW(hwndEventDetails, GWL_STYLE,
+ // GetWindowLongPtrW(hwndEventDetails, GWL_STYLE) | WS_BORDER);
+ SetWindowLongPtrW(hwndEventDetails, GWL_EXSTYLE,
+ GetWindowLongPtrW(hwndEventDetails, GWL_EXSTYLE) | WS_EX_CLIENTEDGE);
+ SetWindowPos(hwndEventDetails, NULL,
+ nVSplitPos + SPLIT_WIDTH/2,
+ nHSplitPos + SPLIT_WIDTH/2,
+ (rcClient.right - rcClient.left) - nVSplitPos - SPLIT_WIDTH/2,
+ (rcClient.bottom - rcClient.top) - nHSplitPos - SPLIT_WIDTH/2 - StatusHeight,
+ SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);
+ }
+
/* Create the ListView */
hwndListView = CreateWindowExW(WS_EX_CLIENTEDGE,
WC_LISTVIEWW,
- L"",
+ NULL,
WS_CHILD | WS_VISIBLE | LVS_SHOWSELALWAYS | LVS_REPORT,
- nSplitPos + SPLIT_WIDTH/2,
+ nVSplitPos + SPLIT_WIDTH/2,
0,
- (rcClient.right - rcClient.left) - nSplitPos - SPLIT_WIDTH/2,
- (rcClient.bottom - rcClient.top) - StatusHeight,
+ (rcClient.right - rcClient.left) - nVSplitPos - SPLIT_WIDTH/2,
+ hwndEventDetails ? nHSplitPos - SPLIT_WIDTH/2
+ : (rcClient.bottom - rcClient.top) - StatusHeight,
hwndMainWindow,
NULL,
hInstance,
rs.left, rs.top, rs.right-rs.left, rs.bottom-rs.top,
IsWindowVisible(hwndStatusProgress) ? TRUE : FALSE);
- nSplitPos = min(max(nSplitPos, SPLIT_WIDTH/2), cx - SPLIT_WIDTH/2);
+ /*
+ * TODO: Adjust the splitter positions:
+ * - Vertical splitter (1) : fixed position from the left window side.
+ * - Horizontal splitter (2): fixed position from the bottom window side.
+ */
+ nVSplitPos = min(max(nVSplitPos, SPLIT_WIDTH/2), cx - SPLIT_WIDTH/2); // OK
+ nHSplitPos = min(max(nHSplitPos, SPLIT_WIDTH/2), cy - SPLIT_WIDTH/2 - StatusHeight); // FIXME!
- hdwp = BeginDeferWindowPos(2);
+ hdwp = BeginDeferWindowPos(3);
if (hdwp)
hdwp = DeferWindowPos(hdwp,
hwndTreeView,
- 0,
+ HWND_TOP,
0, 0,
- nSplitPos - SPLIT_WIDTH/2, cy - StatusHeight,
+ nVSplitPos - SPLIT_WIDTH/2,
+ cy - StatusHeight,
SWP_NOZORDER | SWP_NOACTIVATE);
if (hdwp)
hdwp = DeferWindowPos(hdwp,
hwndListView,
- 0,
- nSplitPos + SPLIT_WIDTH/2, 0,
- cx - nSplitPos - SPLIT_WIDTH/2, cy - StatusHeight,
+ HWND_TOP,
+ nVSplitPos + SPLIT_WIDTH/2, 0,
+ cx - nVSplitPos - SPLIT_WIDTH/2,
+ hwndEventDetails ? nHSplitPos - SPLIT_WIDTH/2
+ : cy - StatusHeight,
+ SWP_NOZORDER | SWP_NOACTIVATE);
+
+ if (hwndEventDetails && hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hwndEventDetails,
+ HWND_TOP,
+ nVSplitPos + SPLIT_WIDTH/2,
+ nHSplitPos + SPLIT_WIDTH/2,
+ cx - nVSplitPos - SPLIT_WIDTH/2,
+ cy - nHSplitPos - SPLIT_WIDTH/2 - StatusHeight,
SWP_NOZORDER | SWP_NOACTIVATE);
if (hdwp)
{
switch (hdr->code)
{
- case NM_DBLCLK:
+ case LVN_ITEMCHANGED:
{
- LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)lParam;
- PEVENTLOGFILTER EventLogFilter = GetSelectedFilter(NULL);
- if (lpnmitem->iItem != -1 && EventLogFilter)
+ LPNMLISTVIEW pnmv = (LPNMLISTVIEW)lParam;
+
+ if ( (pnmv->uChanged & LVIF_STATE) && /* The state has changed */
+ (pnmv->uNewState & LVIS_SELECTED) /* The item has been (de)selected */ )
{
- EventLogFilter_AddRef(EventLogFilter);
- DialogBoxParamW(hInst,
- MAKEINTRESOURCEW(IDD_EVENTPROPERTIES),
- hWnd,
- EventDetails,
- (LPARAM)EventLogFilter);
- EventLogFilter_Release(EventLogFilter);
+ if (hwndEventDetails)
+ SendMessageW(hwndEventDetails, EVT_DISPLAY, 0, 0);
}
break;
}
+
+ case NM_DBLCLK:
+ case NM_RETURN:
+ SendMessageW(hWnd, WM_COMMAND, IDM_EVENT_DETAILS, 0);
+ break;
}
}
else if (hdr->hwndFrom == hwndTreeView)
PEVENTLOGFILTER EventLogFilter =
(PEVENTLOGFILTER)((LPNMTREEVIEW)lParam)->itemNew.lParam;
+ // FIXME: It might be nice to reference here the filter,
+ // so that we don't have to reference/dereference it many times
+ // in the other functions???
+
+ // FIXME: This is a hack!!
+ if (hwndEventDetails && EventLogFilter)
+ {
+ SendMessageW(hwndEventDetails, EVT_SETFILTER, 0, (LPARAM)EventLogFilter);
+ }
+
if (EventLogFilter)
{
/*
break;
}
+ case IDM_EVENT_DETAILS:
+ {
+ // LPNMITEMACTIVATE lpnmitem = (LPNMITEMACTIVATE)lParam;
+ PEVENTLOGFILTER EventLogFilter = GetSelectedFilter(NULL);
+ if (/*lpnmitem->iItem != -1 &&*/ EventLogFilter)
+ {
+ EventLogFilter_AddRef(EventLogFilter);
+ DialogBoxParamW(hInst,
+ MAKEINTRESOURCEW(IDD_EVENTDETAILS_DLG),
+ hWnd,
+ EventDetails,
+ (LPARAM)EventLogFilter);
+ EventLogFilter_Release(EventLogFilter);
+ }
+ break;
+ }
+
case IDM_REFRESH:
Refresh(GetSelectedFilter(NULL));
break;
POINT pt;
GetCursorPos(&pt);
ScreenToClient(hWnd, &pt);
- if (pt.x >= nSplitPos - SPLIT_WIDTH/2 && pt.x < nSplitPos + SPLIT_WIDTH/2 + 1)
+
+ /* Set the cursor for the vertical splitter */
+ if (pt.x >= nVSplitPos - SPLIT_WIDTH/2 && pt.x < nVSplitPos + SPLIT_WIDTH/2 + 1)
{
RECT rs;
GetClientRect(hWnd, &rect);
return TRUE;
}
}
+ else
+ /* Set the cursor for the horizontal splitter, if the Event details pane is displayed */
+ if (hwndEventDetails &&
+ (pt.y >= nHSplitPos - SPLIT_WIDTH/2 && pt.y < nHSplitPos + SPLIT_WIDTH/2 + 1))
+ {
+ // RECT rs;
+ GetClientRect(hWnd, &rect);
+ // GetWindowRect(hwndStatus, &rs);
+ if (pt.x >= nVSplitPos + SPLIT_WIDTH/2 + 1 /* rect.left + (rs.bottom - rs.top) */ &&
+ pt.x < rect.right)
+ {
+ SetCursor(LoadCursorW(NULL, IDC_SIZENS));
+ return TRUE;
+ }
+ }
}
goto Default;
case WM_LBUTTONDOWN:
{
INT x = GET_X_LPARAM(lParam);
- if (x >= nSplitPos - SPLIT_WIDTH/2 && x < nSplitPos + SPLIT_WIDTH/2 + 1)
+ INT y = GET_Y_LPARAM(lParam);
+
+ /* Reset the splitter state */
+ bSplit = 0;
+
+ /* Capture the cursor for the vertical splitter */
+ if (x >= nVSplitPos - SPLIT_WIDTH/2 && x < nVSplitPos + SPLIT_WIDTH/2 + 1)
+ {
+ bSplit = 1;
+ SetCapture(hWnd);
+ }
+ else
+ /* Capture the cursor for the horizontal splitter, if the Event details pane is displayed */
+ if (hwndEventDetails &&
+ (y >= nHSplitPos - SPLIT_WIDTH/2 && y < nHSplitPos + SPLIT_WIDTH/2 + 1))
{
+ bSplit = 2;
SetCapture(hWnd);
}
break;
case WM_RBUTTONDOWN:
if (GetCapture() == hWnd)
{
- GetClientRect(hWnd, &rect);
- nSplitPos = GET_X_LPARAM(lParam);
- ResizeWnd(rect.right, rect.bottom);
+ /* Adjust the correct splitter position */
+ if (bSplit == 1)
+ nVSplitPos = GET_X_LPARAM(lParam);
+ else if (bSplit == 2)
+ nHSplitPos = GET_Y_LPARAM(lParam);
+
+ /* If we are splitting, resize the windows */
+ if (bSplit != 0)
+ {
+ GetClientRect(hWnd, &rect);
+ ResizeWnd(rect.right - rect.left, rect.bottom - rect.top);
+ }
+
+ /* Reset the splitter state */
+ bSplit = 0;
+
ReleaseCapture();
}
break;
case WM_MOUSEMOVE:
if (GetCapture() == hWnd)
{
- INT x = GET_X_LPARAM(lParam);
+ /* Move the correct splitter */
+ if (bSplit == 1)
+ {
+ INT x = GET_X_LPARAM(lParam);
- GetClientRect(hWnd, &rect);
+ GetClientRect(hWnd, &rect);
- x = min(max(x, SPLIT_WIDTH/2), rect.right - rect.left - SPLIT_WIDTH/2);
- if (nSplitPos != x)
+ x = min(max(x, SPLIT_WIDTH/2), rect.right - rect.left - SPLIT_WIDTH/2);
+ if (nVSplitPos != x)
+ {
+ nVSplitPos = x;
+ ResizeWnd(rect.right - rect.left, rect.bottom - rect.top);
+ }
+ }
+ else if (bSplit == 2)
{
- nSplitPos = x;
- ResizeWnd(rect.right - rect.left, rect.bottom - rect.top);
+ RECT rs;
+ INT y = GET_Y_LPARAM(lParam);
+
+ GetClientRect(hWnd, &rect);
+ GetWindowRect(hwndStatus, &rs);
+
+ y = min(max(y, SPLIT_WIDTH/2), rect.bottom - rect.top - SPLIT_WIDTH/2 - (rs.bottom - rs.top));
+ if (nHSplitPos != y)
+ {
+ nHSplitPos = y;
+ ResizeWnd(rect.right - rect.left, rect.bottom - rect.top);
+ }
}
}
break;
case WM_SIZE:
{
- SendMessageW(hwndStatus, WM_SIZE, 0, 0);
- ResizeWnd(LOWORD(lParam), HIWORD(lParam));
- break;
+ if (wParam != SIZE_MINIMIZED)
+ {
+ SendMessageW(hwndStatus, WM_SIZE, 0, 0);
+ ResizeWnd(LOWORD(lParam), HIWORD(lParam));
+ break;
+ }
+ /* Fall through the default case */
}
default: Default:
}
-
static
VOID
InitPropertiesDlg(HWND hDlg, PEVENTLOG EventLog)
return ret;
}
+/* Message handler for Event Details dialog */
+static HWND hWndDetailsCtrl = NULL; // May go into the DWLP_USER
+static HWND hWndGrip = NULL;
+static INT cxMin, cyMin; // In window coordinates
+static INT cxOld, cyOld; // In client coordinates
-
-VOID
-DisplayEvent(HWND hDlg, PEVENTLOGFILTER EventLogFilter)
-{
- WCHAR szEventType[MAX_PATH];
- WCHAR szTime[MAX_PATH];
- WCHAR szDate[MAX_PATH];
- WCHAR szUser[MAX_PATH];
- WCHAR szComputer[MAX_PATH];
- WCHAR szSource[MAX_PATH];
- WCHAR szCategory[MAX_PATH];
- WCHAR szEventID[MAX_PATH];
- WCHAR szEventText[EVENT_MESSAGE_EVENTTEXT_BUFFER];
- BOOL bEventData = FALSE;
- LVITEMW li;
- PEVENTLOGRECORD pevlr;
- int iIndex;
-
- /* Get index of selected item */
- iIndex = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED | LVNI_FOCUSED);
- if (iIndex == -1)
- {
- MessageBoxW(hDlg,
- L"No Items in ListView",
- L"Error",
- MB_OK | MB_ICONINFORMATION);
- return;
- }
-
- li.mask = LVIF_PARAM;
- li.iItem = iIndex;
- li.iSubItem = 0;
-
- ListView_GetItem(hwndListView, &li);
-
- pevlr = (PEVENTLOGRECORD)li.lParam;
-
- ListView_GetItemText(hwndListView, iIndex, 0, szEventType, ARRAYSIZE(szEventType));
- ListView_GetItemText(hwndListView, iIndex, 1, szDate, ARRAYSIZE(szDate));
- ListView_GetItemText(hwndListView, iIndex, 2, szTime, ARRAYSIZE(szTime));
- ListView_GetItemText(hwndListView, iIndex, 3, szSource, ARRAYSIZE(szSource));
- ListView_GetItemText(hwndListView, iIndex, 4, szCategory, ARRAYSIZE(szCategory));
- ListView_GetItemText(hwndListView, iIndex, 5, szEventID, ARRAYSIZE(szEventID));
- ListView_GetItemText(hwndListView, iIndex, 6, szUser, ARRAYSIZE(szUser));
- ListView_GetItemText(hwndListView, iIndex, 7, szComputer, ARRAYSIZE(szComputer));
-
- SetDlgItemTextW(hDlg, IDC_EVENTDATESTATIC, szDate);
- SetDlgItemTextW(hDlg, IDC_EVENTTIMESTATIC, szTime);
- SetDlgItemTextW(hDlg, IDC_EVENTUSERSTATIC, szUser);
- SetDlgItemTextW(hDlg, IDC_EVENTSOURCESTATIC, szSource);
- SetDlgItemTextW(hDlg, IDC_EVENTCOMPUTERSTATIC, szComputer);
- SetDlgItemTextW(hDlg, IDC_EVENTCATEGORYSTATIC, szCategory);
- SetDlgItemTextW(hDlg, IDC_EVENTIDSTATIC, szEventID);
- SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, szEventType);
-
- bEventData = (pevlr->DataLength > 0);
- EnableDlgItem(hDlg, IDC_BYTESRADIO, bEventData);
- EnableDlgItem(hDlg, IDC_WORDRADIO, bEventData);
-
- // FIXME: At the moment we support only one event log in the filter
- GetEventMessage(EventLogFilter->EventLogs[0]->LogName, szSource, pevlr, szEventText);
- SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, szEventText);
-}
-
-UINT
-PrintByteDataLine(PWCHAR pBuffer, UINT uOffset, PBYTE pData, UINT uLength)
-{
- PWCHAR p = pBuffer;
- UINT n, i, r = 0;
-
- if (uOffset != 0)
- {
- n = swprintf(p, L"\r\n");
- p += n;
- r += n;
- }
-
- n = swprintf(p, L"%04lx:", uOffset);
- p += n;
- r += n;
-
- for (i = 0; i < uLength; i++)
- {
- n = swprintf(p, L" %02x", pData[i]);
- p += n;
- r += n;
- }
-
- for (i = 0; i < 9 - uLength; i++)
- {
- n = swprintf(p, L" ");
- p += n;
- r += n;
- }
-
- for (i = 0; i < uLength; i++)
- {
- // NOTE: Normally iswprint should return FALSE for tabs...
- n = swprintf(p, L"%c", (iswprint(pData[i]) && (pData[i] != L'\t')) ? pData[i] : L'.');
- p += n;
- r += n;
- }
-
- return r;
-}
-
-UINT
-PrintWordDataLine(PWCHAR pBuffer, UINT uOffset, PULONG pData, UINT uLength)
-{
- PWCHAR p = pBuffer;
- UINT n, i, r = 0;
-
- if (uOffset != 0)
- {
- n = swprintf(p, L"\r\n");
- p += n;
- r += n;
- }
-
- n = swprintf(p, L"%04lx:", uOffset);
- p += n;
- r += n;
-
- for (i = 0; i < uLength / sizeof(ULONG); i++)
- {
- n = swprintf(p, L" %08lx", pData[i]);
- p += n;
- r += n;
- }
-
- /* Display the remaining bytes if uLength was not a multiple of sizeof(ULONG) */
- for (i = (uLength / sizeof(ULONG)) * sizeof(ULONG); i < uLength; i++)
- {
- n = swprintf(p, L" %02x", ((PBYTE)pData)[i]);
- p += n;
- r += n;
- }
-
- return r;
-}
-
-
-VOID
-DisplayEventData(HWND hDlg, BOOL bDisplayWords)
+INT_PTR CALLBACK
+EventDetails(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
- LVITEMW li;
- PEVENTLOGRECORD pevlr;
- int iIndex;
-
- LPBYTE pData;
- UINT i, uOffset;
- UINT uBufferSize, uLineLength;
- PWCHAR pTextBuffer, pLine;
-
- /* Get index of selected item */
- iIndex = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED | LVNI_FOCUSED);
- if (iIndex == -1)
- {
- MessageBoxW(hDlg,
- L"No Items in ListView",
- L"Error",
- MB_OK | MB_ICONINFORMATION);
- return;
- }
-
- li.mask = LVIF_PARAM;
- li.iItem = iIndex;
- li.iSubItem = 0;
-
- ListView_GetItem(hwndListView, &li);
-
- pevlr = (PEVENTLOGRECORD)li.lParam;
- if (pevlr->DataLength == 0)
- {
- SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L"");
- return;
- }
-
- if (bDisplayWords)
- uBufferSize = ((pevlr->DataLength / 8) + 1) * 26 * sizeof(WCHAR);
- else
- uBufferSize = ((pevlr->DataLength / 8) + 1) * 43 * sizeof(WCHAR);
-
- pTextBuffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, uBufferSize);
- if (!pTextBuffer)
- return;
-
- pLine = pTextBuffer;
- uOffset = 0;
-
- for (i = 0; i < pevlr->DataLength / 8; i++)
- {
- pData = (LPBYTE)((LPBYTE)pevlr + pevlr->DataOffset + uOffset);
-
- if (bDisplayWords)
- uLineLength = PrintWordDataLine(pLine, uOffset, (PULONG)pData, 8);
- else
- uLineLength = PrintByteDataLine(pLine, uOffset, pData, 8);
- pLine = pLine + uLineLength;
-
- uOffset += 8;
- }
-
- if (pevlr->DataLength % 8 != 0)
+ switch (uMsg)
{
- pData = (LPBYTE)((LPBYTE)pevlr + pevlr->DataOffset + uOffset);
-
- if (bDisplayWords)
- PrintWordDataLine(pLine, uOffset, (PULONG)pData, pevlr->DataLength % 8);
- else
- PrintByteDataLine(pLine, uOffset, pData, pevlr->DataLength % 8);
- }
-
- SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, pTextBuffer);
-
- HeapFree(GetProcessHeap(), 0, pTextBuffer);
-}
-
-HFONT
-CreateMonospaceFont(VOID)
-{
- LOGFONTW tmpFont = {0};
- HFONT hFont;
- HDC hDc;
-
- hDc = GetDC(NULL);
-
- tmpFont.lfHeight = -MulDiv(8, GetDeviceCaps(hDc, LOGPIXELSY), 72);
- tmpFont.lfWeight = FW_NORMAL;
- wcscpy(tmpFont.lfFaceName, L"Courier New");
-
- hFont = CreateFontIndirectW(&tmpFont);
-
- ReleaseDC(NULL, hDc);
-
- return hFont;
-}
-
-VOID
-CopyEventEntry(HWND hWnd)
-{
- WCHAR output[4130], tmpHeader[512];
- WCHAR szEventType[MAX_PATH];
- WCHAR szSource[MAX_PATH];
- WCHAR szCategory[MAX_PATH];
- WCHAR szEventID[MAX_PATH];
- WCHAR szDate[MAX_PATH];
- WCHAR szTime[MAX_PATH];
- WCHAR szUser[MAX_PATH];
- WCHAR szComputer[MAX_PATH];
- WCHAR evtDesc[ENTRY_SIZE];
- HGLOBAL hMem;
-
- if (!OpenClipboard(hWnd))
- return;
-
- /* First, empty the clipboard before we begin to use it */
- EmptyClipboard();
-
- /* Get the formatted text needed to place the content into */
- LoadStringW(hInst, IDS_COPY, tmpHeader, ARRAYSIZE(tmpHeader));
-
- /* Grab all the information and get it ready for the clipboard */
- GetDlgItemTextW(hWnd, IDC_EVENTTYPESTATIC, szEventType, ARRAYSIZE(szEventType));
- GetDlgItemTextW(hWnd, IDC_EVENTSOURCESTATIC, szSource, ARRAYSIZE(szSource));
- GetDlgItemTextW(hWnd, IDC_EVENTCATEGORYSTATIC, szCategory, ARRAYSIZE(szCategory));
- GetDlgItemTextW(hWnd, IDC_EVENTIDSTATIC, szEventID, ARRAYSIZE(szEventID));
- GetDlgItemTextW(hWnd, IDC_EVENTDATESTATIC, szDate, ARRAYSIZE(szDate));
- GetDlgItemTextW(hWnd, IDC_EVENTTIMESTATIC, szTime, ARRAYSIZE(szTime));
- GetDlgItemTextW(hWnd, IDC_EVENTUSERSTATIC, szUser, ARRAYSIZE(szUser));
- GetDlgItemTextW(hWnd, IDC_EVENTCOMPUTERSTATIC, szComputer, ARRAYSIZE(szComputer));
- GetDlgItemTextW(hWnd, IDC_EVENTTEXTEDIT, evtDesc, ARRAYSIZE(evtDesc));
-
- /* Consolidate the information into on big piece */
- wsprintfW(output, tmpHeader, szEventType, szSource, szCategory, szEventID, szDate, szTime, szUser, szComputer, evtDesc);
-
- /* Sort out the memory needed to write to the clipboard */
- hMem = GlobalAlloc(GMEM_MOVEABLE, ENTRY_SIZE);
- memcpy(GlobalLock(hMem), output, ENTRY_SIZE);
- GlobalUnlock(hMem);
-
- /* Write the final content to the clipboard */
- SetClipboardData(CF_UNICODETEXT, hMem);
-
- /* Close the clipboard once we're done with it */
- CloseClipboard();
-}
-
-static
-VOID
-InitDetailsDlg(HWND hDlg, PDETAILDATA pData)
-{
- DWORD dwMask;
-
- HANDLE nextIcon = LoadImageW(hInst, MAKEINTRESOURCEW(IDI_NEXT), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
- HANDLE prevIcon = LoadImageW(hInst, MAKEINTRESOURCEW(IDI_PREV), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
- HANDLE copyIcon = LoadImageW(hInst, MAKEINTRESOURCEW(IDI_COPY), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
+ case WM_INITDIALOG:
+ {
+ LONG_PTR dwStyle;
+ INT sbVXSize, sbHYSize;
+ RECT rcWnd, rect;
- SendDlgItemMessageW(hDlg, IDC_NEXT, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)nextIcon);
- SendDlgItemMessageW(hDlg, IDC_PREVIOUS, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)prevIcon);
- SendDlgItemMessageW(hDlg, IDC_COPY, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)copyIcon);
+ hWndDetailsCtrl = CreateEventDetailsCtrl(hInst, hDlg, lParam);
+ if (!hWndDetailsCtrl)
+ {
+ EndDialog(hDlg, 0);
+ return (INT_PTR)TRUE;
+ }
- /* Set the default read-only RichEdit color */
- SendDlgItemMessageW(hDlg, IDC_EVENTTEXTEDIT, EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_3DFACE));
+ /* Create a size grip if the dialog has a sizing border */
+ GetClientRect(hDlg, &rcWnd);
+ dwStyle = GetWindowLongPtrW(hDlg, GWL_STYLE);
+ sbVXSize = GetSystemMetrics(SM_CXVSCROLL);
+ sbHYSize = GetSystemMetrics(SM_CYHSCROLL);
+ if (dwStyle & WS_THICKFRAME /* == WS_SIZEBOX */)
+ {
+ hWndGrip = CreateWindowW(WC_SCROLLBARW,
+ NULL,
+ WS_CHILD | WS_VISIBLE | /**/ WS_CLIPSIBLINGS | /**/ SBS_SIZEGRIP | SBS_SIZEBOXBOTTOMRIGHTALIGN,
+ rcWnd.right - sbVXSize,
+ rcWnd.bottom - sbHYSize,
+ sbVXSize, sbHYSize,
+ hDlg,
+ NULL,
+ hInst,
+ NULL);
+ }
- /* Enable RichEdit coloured and underlined links */
- dwMask = SendDlgItemMessageW(hDlg, IDC_EVENTTEXTEDIT, EM_GETEVENTMASK, 0, 0);
- SendDlgItemMessageW(hDlg, IDC_EVENTTEXTEDIT, EM_SETEVENTMASK, 0, dwMask | ENM_LINK | ENM_MOUSEEVENTS);
+ // SetWindowLongPtrW(hDlg, DWLP_USER, (LONG_PTR)hWndDetailsCtrl);
- /*
- * Activate automatic URL recognition by the RichEdit control. For more information, see:
- * https://blogs.msdn.microsoft.com/murrays/2009/08/31/automatic-richedit-hyperlinks/
- * https://blogs.msdn.microsoft.com/murrays/2009/09/24/richedit-friendly-name-hyperlinks/
- * https://msdn.microsoft.com/en-us/library/windows/desktop/bb787991(v=vs.85).aspx
- */
- SendDlgItemMessageW(hDlg, IDC_EVENTTEXTEDIT, EM_AUTOURLDETECT, AURL_ENABLEURL /* | AURL_ENABLEEAURLS */, 0);
+ /*
+ * Compute the minimum window size (in window coordinates) by
+ * adding the widths/heights of the "Help" and "Close" buttons,
+ * together with the margins, and add some minimal spacing
+ * between the buttons.
+ */
+ GetWindowRect(hDlg, &rcWnd);
+ cxMin = cyMin = 0;
- /* Note that the RichEdit control never gets themed under WinXP+. One would have to write code to simulate Edit-control theming */
+ GetWindowRect(GetDlgItem(hDlg, IDHELP), &rect);
+ cxMin += (rect.right - rect.left) + (rect.left - rcWnd.left); // == (rect.right - rcWnd.left);
+ cyMin += (rect.bottom - rect.top) + (rcWnd.bottom - rect.bottom); // == (rcWnd.bottom - rect.top);
- SendDlgItemMessageW(hDlg, pData->bDisplayWords ? IDC_WORDRADIO : IDC_BYTESRADIO, BM_SETCHECK, BST_CHECKED, 0);
- SendDlgItemMessageW(hDlg, IDC_EVENTDATAEDIT, WM_SETFONT, (WPARAM)pData->hMonospaceFont, (LPARAM)TRUE);
-}
+ GetWindowRect(GetDlgItem(hDlg, IDOK), &rect);
+ cxMin += (rect.right - rect.left) + (rcWnd.right - rect.right); // == (rcWnd.right - rect.left);
+ cyMin += (rect.bottom - rect.top) + (rcWnd.bottom - rect.bottom); // == (rcWnd.bottom - rect.top);
-/* Message handler for Event Details box */
-INT_PTR CALLBACK
-EventDetails(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
-{
- PDETAILDATA pData;
+ /*
+ * Convert the window rect from window to client coordinates
+ * in order to retrieve the sizes of the left and top margins,
+ * and add some extra space.
+ */
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rcWnd, sizeof(RECT)/sizeof(POINT));
- pData = (PDETAILDATA)GetWindowLongPtrW(hDlg, DWLP_USER);
+ cxMin += -2*rcWnd.left; // Minimal spacing between the buttons == 2 * left margin
+ cyMin += -rcWnd.top + 12; // Add some space on top
- switch (uMsg)
- {
- case WM_INITDIALOG:
- pData = (PDETAILDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pData));
- if (pData)
- {
- SetWindowLongPtrW(hDlg, DWLP_USER, (LONG_PTR)pData);
+ GetClientRect(hDlg, &rcWnd);
+ cxOld = rcWnd.right - rcWnd.left;
+ cyOld = rcWnd.bottom - rcWnd.top;
- pData->EventLogFilter = (PEVENTLOGFILTER)lParam;
- pData->bDisplayWords = FALSE;
- pData->hMonospaceFont = CreateMonospaceFont();
+ /* Show event info on dialog control */
+ SendMessageW(hWndDetailsCtrl, EVT_DISPLAY, 0, 0);
- InitDetailsDlg(hDlg, pData);
+ // SetWindowPos(hWndDetailsCtrl, NULL,
+ // 0, 0,
+ // (rcWnd.right - rcWnd.left),
+ // (rcWnd.bottom - rcWnd.top),
+ // SWP_NOZORDER | SWP_NOACTIVATE | SWP_SHOWWINDOW);
- /* Show event info on dialog box */
- DisplayEvent(hDlg, pData->EventLogFilter);
- DisplayEventData(hDlg, pData->bDisplayWords);
- }
+ /*
+ * Hide the placeholder static control and show the event details
+ * control instead. Note that the placeholder is here so far just
+ * to get the dimensions right in the dialog resource editor.
+ * I plan to remove it and use a custom control with a suitable
+ * window class for it, that would create the event details control
+ * instead.
+ */
+ ShowWindow(GetDlgItem(hDlg, IDC_STATIC), SW_HIDE);
+ ShowWindow(hWndDetailsCtrl, SW_SHOW);
return (INT_PTR)TRUE;
+ }
case WM_DESTROY:
- if (pData->hMonospaceFont)
- DeleteObject(pData->hMonospaceFont);
- HeapFree(GetProcessHeap(), 0, pData);
+ if (IsWindow(hWndDetailsCtrl))
+ DestroyWindow(hWndDetailsCtrl);
+ hWndDetailsCtrl = NULL;
return (INT_PTR)TRUE;
case WM_COMMAND:
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
- case IDC_PREVIOUS:
- SendMessageW(hwndListView, WM_KEYDOWN, VK_UP, 0);
-
- /* Show event info on dialog box */
- if (pData)
- {
- DisplayEvent(hDlg, pData->EventLogFilter);
- DisplayEventData(hDlg, pData->bDisplayWords);
- }
- return (INT_PTR)TRUE;
-
- case IDC_NEXT:
- SendMessageW(hwndListView, WM_KEYDOWN, VK_DOWN, 0);
-
- /* Show event info on dialog box */
- if (pData)
- {
- DisplayEvent(hDlg, pData->EventLogFilter);
- DisplayEventData(hDlg, pData->bDisplayWords);
- }
- return (INT_PTR)TRUE;
-
- case IDC_COPY:
- CopyEventEntry(hDlg);
- return (INT_PTR)TRUE;
-
- case IDC_BYTESRADIO:
- if (pData)
- {
- pData->bDisplayWords = FALSE;
- DisplayEventData(hDlg, pData->bDisplayWords);
- }
- return (INT_PTR)TRUE;
-
- case IDC_WORDRADIO:
- if (pData)
- {
- pData->bDisplayWords = TRUE;
- DisplayEventData(hDlg, pData->bDisplayWords);
- }
- return (INT_PTR)TRUE;
-
case IDHELP:
MessageBoxW(hDlg,
L"Help not implemented yet!",
}
break;
- case WM_NOTIFY:
- switch (((LPNMHDR)lParam)->code)
+ case WM_SETCURSOR:
+ if (((HWND)wParam == hWndGrip) && (LOWORD(lParam) == HTCLIENT))
{
- case EN_LINK:
- // TODO: Act on the activated RichEdit link!
- break;
+ SetCursor(LoadCursorW(NULL, IDC_SIZENWSE));
+ SetWindowLongPtrW(hDlg, DWLP_MSGRESULT, TRUE);
+ return (INT_PTR)TRUE;
}
break;
+
+ case WM_SIZING:
+ {
+ /* Forbid resizing the dialog smaller than its minimal size */
+ PRECT dragRect = (PRECT)lParam;
+
+ if ((wParam == WMSZ_LEFT) || (wParam == WMSZ_TOPLEFT) || (wParam == WMSZ_BOTTOMLEFT))
+ {
+ if (dragRect->right - dragRect->left < cxMin)
+ dragRect->left = dragRect->right - cxMin;
+ }
+
+ if ((wParam == WMSZ_RIGHT) || (wParam == WMSZ_TOPRIGHT) || (wParam == WMSZ_BOTTOMRIGHT))
+ {
+ if (dragRect->right - dragRect->left < cxMin)
+ dragRect->right = dragRect->left + cxMin;
+ }
+
+ if ((wParam == WMSZ_TOP) || (wParam == WMSZ_TOPLEFT) || (wParam == WMSZ_TOPRIGHT))
+ {
+ if (dragRect->bottom - dragRect->top < cyMin)
+ dragRect->top = dragRect->bottom - cyMin;
+ }
+
+ if ((wParam == WMSZ_BOTTOM) || (wParam == WMSZ_BOTTOMLEFT) || (wParam == WMSZ_BOTTOMRIGHT))
+ {
+ if (dragRect->bottom - dragRect->top < cyMin)
+ dragRect->bottom = dragRect->top + cyMin;
+ }
+
+ SetWindowLongPtrW(hDlg, DWLP_MSGRESULT, TRUE);
+ return (INT_PTR)TRUE;
+ }
+
+ case WM_SIZE:
+ {
+ INT cx = LOWORD(lParam);
+ INT cy = HIWORD(lParam);
+
+ HDWP hdwp;
+ HWND hItemWnd;
+ RECT rect;
+
+ hdwp = BeginDeferWindowPos(4);
+
+ /* Resize the event details control window */
+
+ hItemWnd = hWndDetailsCtrl;
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ HWND_TOP,
+ 0, 0,
+ (rect.right - rect.left) + (cx - cxOld),
+ (rect.bottom - rect.top) + (cy - cyOld),
+ SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ /* Move the buttons */
+
+ hItemWnd = GetDlgItem(hDlg, IDHELP);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ HWND_TOP,
+ rect.left,
+ rect.top + (cy - cyOld),
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ hItemWnd = GetDlgItem(hDlg, IDOK);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ HWND_TOP,
+ rect.left + (cx - cxOld),
+ rect.top + (cy - cyOld),
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ /* Move the size grip */
+ if (hWndGrip && hdwp)
+ {
+ GetWindowRect(hWndGrip, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+
+ hdwp = DeferWindowPos(hdwp,
+ hWndGrip,
+ HWND_TOP,
+ rect.left + (cx - cxOld),
+ rect.top + (cy - cyOld),
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+ }
+
+ if (hdwp)
+ EndDeferWindowPos(hdwp);
+
+ /* Hide the size grip if we are in maximized mode */
+ if (hWndGrip)
+ ShowWindow(hWndGrip, (wParam == SIZE_MAXIMIZED) ? SW_HIDE : SW_SHOW);
+
+ cxOld = cx;
+ cyOld = cy;
+
+ SetWindowLongPtrW(hDlg, DWLP_MSGRESULT, 0);
+ return (INT_PTR)TRUE;
+ }
}
return (INT_PTR)FALSE;
-#pragma once
+/*
+ * PROJECT: ReactOS Event Log Viewer
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: base/applications/mscutils/eventvwr/eventvwr.h
+ * PURPOSE: Event Log Viewer header
+ * PROGRAMMERS: Marc Piulachs (marc.piulachs at codexchange [dot] net)
+ * Eric Kohl
+ * Hermes Belusca-Maito
+ */
+
+#ifndef _EVENTVWR_PCH_
+#define _EVENTVWR_PCH_
+
+// #pragma once
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define WIN32_NO_STATUS
+
+#include <windef.h>
+#include <winbase.h>
+#include <wingdi.h>
+#include <winuser.h>
+#include <winnls.h>
+#include <winreg.h>
+
+#include <ndk/rtlfuncs.h>
+
+#define ROUND_DOWN(n, align) (((ULONG)n) & ~((align) - 1l))
+#define ROUND_UP(n, align) ROUND_DOWN(((ULONG)n) + (align) - 1, (align))
+
+#include <commctrl.h>
+#include <commdlg.h>
+
+#include <richedit.h>
+
+/* Missing RichEdit flags in our richedit.h */
+#define AURL_ENABLEURL 1
+#define AURL_ENABLEEMAILADDR 2
+#define AURL_ENABLETELNO 4
+#define AURL_ENABLEEAURLS 8
+#define AURL_ENABLEDRIVELETTERS 16
+
+#include <windowsx.h>
+
+/*
+ * windowsx.h extensions
+ */
+#define EnableDlgItem(hDlg, nID, bEnable) \
+ EnableWindow(GetDlgItem((hDlg), (nID)), (bEnable))
+
+#define ProgressBar_SetPos(hwndCtl,pos) \
+ ((int)SNDMSG((hwndCtl),PBM_SETPOS,(WPARAM)(int)(pos),(LPARAM)0))
+#define ProgressBar_SetRange(hwndCtl,range) \
+ ((int)SNDMSG((hwndCtl),PBM_SETRANGE,(WPARAM)0,(LPARAM)(range)))
+#define ProgressBar_SetStep(hwndCtl,inc) \
+ ((int)SNDMSG((hwndCtl),PBM_SETSTEP,(WPARAM)(int)(inc),(LPARAM)0))
+#define ProgressBar_StepIt(hwndCtl) \
+ ((int)SNDMSG((hwndCtl),PBM_STEPIT,(WPARAM)0,(LPARAM)0))
+
+#define StatusBar_GetItemRect(hwndCtl,index,lprc) \
+ ((BOOL)SNDMSG((hwndCtl),SB_GETRECT,(WPARAM)(int)(index),(LPARAM)(RECT*)(lprc)))
+#define StatusBar_SetText(hwndCtl,index,data) \
+ ((BOOL)SNDMSG((hwndCtl),SB_SETTEXT,(WPARAM)(index),(LPARAM)(data)))
+
+#ifndef WM_APP
+ #define WM_APP 0x8000
+#endif
#include "resource.h"
+
+extern HINSTANCE hInst;
+
+
+/*
+ * Structure that caches information about an opened event log.
+ */
+typedef struct _EVENTLOG
+{
+ LIST_ENTRY ListEntry;
+
+ // HANDLE hEventLog; // At least for user logs, a handle is kept opened (by eventlog service) as long as the event viewer has the focus on this log.
+
+ PWSTR ComputerName; // Computer where the log resides
+
+/** Cached information **/
+ PWSTR LogName; // Internal name (from registry, or file path for user logs)
+ PWSTR FileName; // Cached, for user logs; retrieved once (at startup) from registry for system logs (i.e. may be different from the one opened by the eventlog service)
+ // PWSTR DisplayName; // The default value is the one computed; can be modified by the user for this local session only.
+ // We can use the TreeView' item name for the DisplayName...
+ BOOL Permanent; // TRUE: system log; FALSE: user log
+
+/** Volatile information **/
+ // ULONG Flags;
+ // ULONG MaxSize; // Always retrieved from registry (only valid for system logs)
+ // ULONG Retention; // Always retrieved from registry (only valid for system logs)
+} EVENTLOG, *PEVENTLOG;
+
+typedef struct _EVENTLOGFILTER
+{
+ LIST_ENTRY ListEntry;
+
+ LONG ReferenceCount;
+
+ // HANDLE hEnumEventsThread;
+ // HANDLE hStopEnumEvent;
+
+ // PWSTR DisplayName; // The default value is the one computed; can be modified by the user for this local session only.
+ // We can use the TreeView' item name for the DisplayName...
+
+ BOOL Information;
+ BOOL Warning;
+ BOOL Error;
+ BOOL AuditSuccess;
+ BOOL AuditFailure;
+
+ // ULONG Category;
+ ULONG EventID;
+
+ /*
+ * The following three string filters are multi-strings that enumerate
+ * the list of sources/users/computers to be shown. If a string points
+ * to an empty string: "\0", it filters for an empty source/user/computer.
+ * If a string points to NULL, it filters for all sources/users/computers.
+ */
+ PWSTR Sources;
+ PWSTR Users;
+ PWSTR ComputerNames;
+
+ /* List of event logs maintained by this filter */
+ ULONG NumOfEventLogs;
+ PEVENTLOG EventLogs[ANYSIZE_ARRAY];
+} EVENTLOGFILTER, *PEVENTLOGFILTER;
+
+#endif /* _EVENTVWR_PCH_ */
--- /dev/null
+/*
+ * PROJECT: ReactOS Event Log Viewer
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: base/applications/mscutils/eventvwr/evtdetctl.c
+ * PURPOSE: Event Details Control
+ * PROGRAMMERS: Marc Piulachs (marc.piulachs at codexchange [dot] net)
+ * Eric Kohl
+ * Hermes Belusca-Maito
+ */
+
+#include "eventvwr.h"
+#include "evtdetctl.h"
+
+#define ENTRY_SIZE 2056
+
+// FIXME:
+#define EVENT_MESSAGE_EVENTTEXT_BUFFER 1024*10
+extern HWND hwndListView;
+extern BOOL
+GetEventMessage(IN LPCWSTR KeyName,
+ IN LPCWSTR SourceName,
+ IN PEVENTLOGRECORD pevlr,
+ OUT PWCHAR EventText);
+
+
+typedef struct _DETAILDATA
+{
+ PEVENTLOGFILTER EventLogFilter;
+
+ BOOL bDisplayWords;
+ HFONT hMonospaceFont;
+
+ INT cxMin, cyMin;
+ INT cxOld, cyOld;
+ POINT scPos;
+} DETAILDATA, *PDETAILDATA;
+
+
+static
+VOID
+DisplayEvent(HWND hDlg, PEVENTLOGFILTER EventLogFilter)
+{
+ WCHAR szEventType[MAX_PATH];
+ WCHAR szTime[MAX_PATH];
+ WCHAR szDate[MAX_PATH];
+ WCHAR szUser[MAX_PATH];
+ WCHAR szComputer[MAX_PATH];
+ WCHAR szSource[MAX_PATH];
+ WCHAR szCategory[MAX_PATH];
+ WCHAR szEventID[MAX_PATH];
+ WCHAR szEventText[EVENT_MESSAGE_EVENTTEXT_BUFFER];
+ BOOL bEventData = FALSE;
+ LVITEMW li;
+ PEVENTLOGRECORD pevlr;
+ int iIndex;
+
+ /* Get index of selected item */
+ iIndex = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED | LVNI_FOCUSED);
+ if (iIndex == -1)
+ {
+ MessageBoxW(hDlg,
+ L"No Items in ListView",
+ L"Error",
+ MB_OK | MB_ICONINFORMATION);
+ return;
+ }
+
+ li.mask = LVIF_PARAM;
+ li.iItem = iIndex;
+ li.iSubItem = 0;
+
+ ListView_GetItem(hwndListView, &li);
+
+ pevlr = (PEVENTLOGRECORD)li.lParam;
+
+ ListView_GetItemText(hwndListView, iIndex, 0, szEventType, ARRAYSIZE(szEventType));
+ ListView_GetItemText(hwndListView, iIndex, 1, szDate, ARRAYSIZE(szDate));
+ ListView_GetItemText(hwndListView, iIndex, 2, szTime, ARRAYSIZE(szTime));
+ ListView_GetItemText(hwndListView, iIndex, 3, szSource, ARRAYSIZE(szSource));
+ ListView_GetItemText(hwndListView, iIndex, 4, szCategory, ARRAYSIZE(szCategory));
+ ListView_GetItemText(hwndListView, iIndex, 5, szEventID, ARRAYSIZE(szEventID));
+ ListView_GetItemText(hwndListView, iIndex, 6, szUser, ARRAYSIZE(szUser));
+ ListView_GetItemText(hwndListView, iIndex, 7, szComputer, ARRAYSIZE(szComputer));
+
+ SetDlgItemTextW(hDlg, IDC_EVENTDATESTATIC, szDate);
+ SetDlgItemTextW(hDlg, IDC_EVENTTIMESTATIC, szTime);
+ SetDlgItemTextW(hDlg, IDC_EVENTUSERSTATIC, szUser);
+ SetDlgItemTextW(hDlg, IDC_EVENTSOURCESTATIC, szSource);
+ SetDlgItemTextW(hDlg, IDC_EVENTCOMPUTERSTATIC, szComputer);
+ SetDlgItemTextW(hDlg, IDC_EVENTCATEGORYSTATIC, szCategory);
+ SetDlgItemTextW(hDlg, IDC_EVENTIDSTATIC, szEventID);
+ SetDlgItemTextW(hDlg, IDC_EVENTTYPESTATIC, szEventType);
+
+ bEventData = (pevlr->DataLength > 0);
+ EnableDlgItem(hDlg, IDC_BYTESRADIO, bEventData);
+ EnableDlgItem(hDlg, IDC_WORDRADIO, bEventData);
+
+ // FIXME: At the moment we support only one event log in the filter
+ GetEventMessage(EventLogFilter->EventLogs[0]->LogName, szSource, pevlr, szEventText);
+ SetDlgItemTextW(hDlg, IDC_EVENTTEXTEDIT, szEventText);
+}
+
+static
+UINT
+PrintByteDataLine(PWCHAR pBuffer, UINT uOffset, PBYTE pData, UINT uLength)
+{
+ PWCHAR p = pBuffer;
+ UINT n, i, r = 0;
+
+ if (uOffset != 0)
+ {
+ n = swprintf(p, L"\r\n");
+ p += n;
+ r += n;
+ }
+
+ n = swprintf(p, L"%04lx:", uOffset);
+ p += n;
+ r += n;
+
+ for (i = 0; i < uLength; i++)
+ {
+ n = swprintf(p, L" %02x", pData[i]);
+ p += n;
+ r += n;
+ }
+
+ for (i = 0; i < 9 - uLength; i++)
+ {
+ n = swprintf(p, L" ");
+ p += n;
+ r += n;
+ }
+
+ for (i = 0; i < uLength; i++)
+ {
+ // NOTE: Normally iswprint should return FALSE for tabs...
+ n = swprintf(p, L"%c", (iswprint(pData[i]) && (pData[i] != L'\t')) ? pData[i] : L'.');
+ p += n;
+ r += n;
+ }
+
+ return r;
+}
+
+static
+UINT
+PrintWordDataLine(PWCHAR pBuffer, UINT uOffset, PULONG pData, UINT uLength)
+{
+ PWCHAR p = pBuffer;
+ UINT n, i, r = 0;
+
+ if (uOffset != 0)
+ {
+ n = swprintf(p, L"\r\n");
+ p += n;
+ r += n;
+ }
+
+ n = swprintf(p, L"%04lx:", uOffset);
+ p += n;
+ r += n;
+
+ for (i = 0; i < uLength / sizeof(ULONG); i++)
+ {
+ n = swprintf(p, L" %08lx", pData[i]);
+ p += n;
+ r += n;
+ }
+
+ /* Display the remaining bytes if uLength was not a multiple of sizeof(ULONG) */
+ for (i = (uLength / sizeof(ULONG)) * sizeof(ULONG); i < uLength; i++)
+ {
+ n = swprintf(p, L" %02x", ((PBYTE)pData)[i]);
+ p += n;
+ r += n;
+ }
+
+ return r;
+}
+
+static
+VOID
+DisplayEventData(HWND hDlg, BOOL bDisplayWords)
+{
+ LVITEMW li;
+ PEVENTLOGRECORD pevlr;
+ int iIndex;
+
+ LPBYTE pData;
+ UINT i, uOffset;
+ UINT uBufferSize, uLineLength;
+ PWCHAR pTextBuffer, pLine;
+
+ /* Get index of selected item */
+ iIndex = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED | LVNI_FOCUSED);
+ if (iIndex == -1)
+ {
+ MessageBoxW(hDlg,
+ L"No Items in ListView",
+ L"Error",
+ MB_OK | MB_ICONINFORMATION);
+ return;
+ }
+
+ li.mask = LVIF_PARAM;
+ li.iItem = iIndex;
+ li.iSubItem = 0;
+
+ ListView_GetItem(hwndListView, &li);
+
+ pevlr = (PEVENTLOGRECORD)li.lParam;
+ if (pevlr->DataLength == 0)
+ {
+ SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, L"");
+ return;
+ }
+
+ if (bDisplayWords)
+ uBufferSize = ((pevlr->DataLength / 8) + 1) * 26 * sizeof(WCHAR);
+ else
+ uBufferSize = ((pevlr->DataLength / 8) + 1) * 43 * sizeof(WCHAR);
+
+ pTextBuffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, uBufferSize);
+ if (!pTextBuffer)
+ return;
+
+ pLine = pTextBuffer;
+ uOffset = 0;
+
+ for (i = 0; i < pevlr->DataLength / 8; i++)
+ {
+ pData = (LPBYTE)((LPBYTE)pevlr + pevlr->DataOffset + uOffset);
+
+ if (bDisplayWords)
+ uLineLength = PrintWordDataLine(pLine, uOffset, (PULONG)pData, 8);
+ else
+ uLineLength = PrintByteDataLine(pLine, uOffset, pData, 8);
+ pLine = pLine + uLineLength;
+
+ uOffset += 8;
+ }
+
+ if (pevlr->DataLength % 8 != 0)
+ {
+ pData = (LPBYTE)((LPBYTE)pevlr + pevlr->DataOffset + uOffset);
+
+ if (bDisplayWords)
+ PrintWordDataLine(pLine, uOffset, (PULONG)pData, pevlr->DataLength % 8);
+ else
+ PrintByteDataLine(pLine, uOffset, pData, pevlr->DataLength % 8);
+ }
+
+ SetDlgItemTextW(hDlg, IDC_EVENTDATAEDIT, pTextBuffer);
+
+ HeapFree(GetProcessHeap(), 0, pTextBuffer);
+}
+
+static
+HFONT
+CreateMonospaceFont(VOID)
+{
+ LOGFONTW tmpFont = {0};
+ HFONT hFont;
+ HDC hDc;
+
+ hDc = GetDC(NULL);
+
+ tmpFont.lfHeight = -MulDiv(8, GetDeviceCaps(hDc, LOGPIXELSY), 72);
+ tmpFont.lfWeight = FW_NORMAL;
+ wcscpy(tmpFont.lfFaceName, L"Courier New");
+
+ hFont = CreateFontIndirectW(&tmpFont);
+
+ ReleaseDC(NULL, hDc);
+
+ return hFont;
+}
+
+static
+VOID
+CopyEventEntry(HWND hWnd)
+{
+ WCHAR output[4130], tmpHeader[512];
+ WCHAR szEventType[MAX_PATH];
+ WCHAR szSource[MAX_PATH];
+ WCHAR szCategory[MAX_PATH];
+ WCHAR szEventID[MAX_PATH];
+ WCHAR szDate[MAX_PATH];
+ WCHAR szTime[MAX_PATH];
+ WCHAR szUser[MAX_PATH];
+ WCHAR szComputer[MAX_PATH];
+ WCHAR evtDesc[ENTRY_SIZE];
+ HGLOBAL hMem;
+
+ if (!OpenClipboard(hWnd))
+ return;
+
+ /* First, empty the clipboard before we begin to use it */
+ EmptyClipboard();
+
+ /* Get the formatted text needed to place the content into */
+ LoadStringW(hInst, IDS_COPY, tmpHeader, ARRAYSIZE(tmpHeader));
+
+ /* Grab all the information and get it ready for the clipboard */
+ GetDlgItemTextW(hWnd, IDC_EVENTTYPESTATIC, szEventType, ARRAYSIZE(szEventType));
+ GetDlgItemTextW(hWnd, IDC_EVENTSOURCESTATIC, szSource, ARRAYSIZE(szSource));
+ GetDlgItemTextW(hWnd, IDC_EVENTCATEGORYSTATIC, szCategory, ARRAYSIZE(szCategory));
+ GetDlgItemTextW(hWnd, IDC_EVENTIDSTATIC, szEventID, ARRAYSIZE(szEventID));
+ GetDlgItemTextW(hWnd, IDC_EVENTDATESTATIC, szDate, ARRAYSIZE(szDate));
+ GetDlgItemTextW(hWnd, IDC_EVENTTIMESTATIC, szTime, ARRAYSIZE(szTime));
+ GetDlgItemTextW(hWnd, IDC_EVENTUSERSTATIC, szUser, ARRAYSIZE(szUser));
+ GetDlgItemTextW(hWnd, IDC_EVENTCOMPUTERSTATIC, szComputer, ARRAYSIZE(szComputer));
+ GetDlgItemTextW(hWnd, IDC_EVENTTEXTEDIT, evtDesc, ARRAYSIZE(evtDesc));
+
+ /* Consolidate the information into on big piece */
+ wsprintfW(output, tmpHeader, szEventType, szSource, szCategory, szEventID, szDate, szTime, szUser, szComputer, evtDesc);
+
+ /* Sort out the memory needed to write to the clipboard */
+ hMem = GlobalAlloc(GMEM_MOVEABLE, ENTRY_SIZE);
+ memcpy(GlobalLock(hMem), output, ENTRY_SIZE);
+ GlobalUnlock(hMem);
+
+ /* Write the final content to the clipboard */
+ SetClipboardData(CF_UNICODETEXT, hMem);
+
+ /* Close the clipboard once we're done with it */
+ CloseClipboard();
+}
+
+static VOID
+OnScroll(HWND hDlg, PDETAILDATA pData, INT nBar, WORD sbCode)
+{
+ RECT rect;
+
+ SCROLLINFO sInfo;
+ INT oldPos, Maximum;
+ PLONG pOriginXY;
+
+ ASSERT(nBar == SB_HORZ || nBar == SB_VERT);
+
+ GetClientRect(hDlg, &rect);
+
+ if (nBar == SB_HORZ)
+ {
+ Maximum = pData->cxMin - (rect.right-rect.left) /* pData->cxOld */;
+ pOriginXY = &pData->scPos.x;
+ }
+ else // if (nBar == SB_VERT)
+ {
+ Maximum = pData->cyMin - (rect.bottom-rect.top) /* pData->cyOld */;
+ pOriginXY = &pData->scPos.y;
+ }
+
+ /* Set scrollbar sizes */
+ sInfo.cbSize = sizeof(sInfo);
+ sInfo.fMask = SIF_RANGE | SIF_POS | SIF_PAGE | SIF_TRACKPOS;
+
+ if (!GetScrollInfo(hDlg, nBar, &sInfo))
+ return;
+
+ oldPos = sInfo.nPos;
+
+ switch (sbCode)
+ {
+ case SB_LINEUP: // SB_LINELEFT:
+ sInfo.nPos--;
+ break;
+
+ case SB_LINEDOWN: // SB_LINERIGHT:
+ sInfo.nPos++;
+ break;
+
+ case SB_PAGEUP: // SB_PAGELEFT:
+ sInfo.nPos -= sInfo.nPage;
+ break;
+
+ case SB_PAGEDOWN: // SB_PAGERIGHT:
+ sInfo.nPos += sInfo.nPage;
+ break;
+
+ case SB_THUMBTRACK:
+ sInfo.nPos = sInfo.nTrackPos;
+ break;
+
+ case SB_THUMBPOSITION:
+ sInfo.nPos = sInfo.nTrackPos;
+ break;
+
+ case SB_TOP: // SB_LEFT:
+ sInfo.nPos = sInfo.nMin;
+ break;
+
+ case SB_BOTTOM: // SB_RIGHT:
+ sInfo.nPos = sInfo.nMax;
+ break;
+
+ default:
+ break;
+ }
+
+ sInfo.nPos = min(max(sInfo.nPos, 0), Maximum);
+
+ if (oldPos != sInfo.nPos)
+ {
+ POINT scOldPos = pData->scPos;
+
+ /* We now modify pData->scPos */
+ *pOriginXY = sInfo.nPos;
+
+ ScrollWindowEx(hDlg,
+ (scOldPos.x - pData->scPos.x),
+ (scOldPos.y - pData->scPos.y),
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ SW_INVALIDATE | SW_ERASE | SW_SCROLLCHILDREN);
+
+ sInfo.fMask = SIF_POS;
+ SetScrollInfo(hDlg, nBar, &sInfo, TRUE);
+
+ // UpdateWindow(hDlg);
+ }
+}
+
+static VOID
+OnSize(HWND hDlg, PDETAILDATA pData, INT cx, INT cy)
+{
+ LONG_PTR dwStyle;
+ INT sbVXSize, sbHYSize;
+ SCROLLINFO sInfo;
+ POINT scOldPos;
+ HDWP hdwp;
+ HWND hItemWnd;
+ RECT rect;
+ INT y = 0;
+
+ if (!pData)
+ return;
+
+ dwStyle = GetWindowLongPtrW(hDlg, GWL_STYLE);
+ sbVXSize = GetSystemMetrics(SM_CXVSCROLL);
+ sbHYSize = GetSystemMetrics(SM_CYHSCROLL);
+
+ /* Compensate for existing scroll bars (because lParam values do not accommodate scroll bar) */
+ if (dwStyle & WS_HSCROLL) cy += sbHYSize; // Window currently has a horizontal scrollbar
+ if (dwStyle & WS_VSCROLL) cx += sbVXSize; // Window currently has a vertical scrollbar
+
+ /* Compensate for added scroll bars in window */
+ if (cx < pData->cxMin) cy -= sbHYSize; // Window will have a horizontal scroll bar
+ if (cy < pData->cyMin) cx -= sbVXSize; // Window will have a vertical scroll bar
+
+ /* Set scrollbar sizes */
+ sInfo.cbSize = sizeof(sInfo);
+
+ sInfo.fMask = SIF_POS;
+ if (GetScrollInfo(hDlg, SB_VERT, &sInfo))
+ scOldPos.y = sInfo.nPos;
+ else
+ scOldPos.y = pData->scPos.y;
+
+ sInfo.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
+ sInfo.nMin = 0;
+ if (pData->cyMin > cy)
+ {
+ sInfo.nMax = pData->cyMin - 1;
+ sInfo.nPage = cy;
+ sInfo.nPos = pData->scPos.y;
+ SetScrollInfo(hDlg, SB_VERT, &sInfo, TRUE);
+
+ /* Display the scrollbar if needed */
+ if (!(dwStyle & WS_VSCROLL))
+ ShowScrollBar(hDlg, SB_VERT, TRUE);
+ }
+ else
+ {
+ scOldPos.y = 0;
+
+ sInfo.nMax = pData->cyMin - 1;
+ sInfo.nPage = cy;
+ sInfo.nPos = pData->scPos.y;
+ sInfo.nPos = scOldPos.y;
+ SetScrollInfo(hDlg, SB_VERT, &sInfo, TRUE);
+
+ ShowScrollBar(hDlg, SB_VERT, FALSE);
+
+ rect.left = cx - sbVXSize;
+ rect.right = cx;
+ rect.top = 0;
+ rect.bottom = cy;
+ InvalidateRect(hDlg, &rect, TRUE);
+ }
+
+ sInfo.fMask = SIF_POS;
+ if (GetScrollInfo(hDlg, SB_HORZ, &sInfo))
+ scOldPos.x = sInfo.nPos;
+ else
+ scOldPos.x = pData->scPos.x;
+
+ sInfo.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
+ sInfo.nMin = 0;
+ if (pData->cxMin > cx)
+ {
+ sInfo.nMax = pData->cxMin - 1;
+ sInfo.nPage = cx;
+ sInfo.nPos = pData->scPos.x;
+ SetScrollInfo(hDlg, SB_HORZ, &sInfo, TRUE);
+
+ /* Display the scrollbar if needed */
+ if (!(dwStyle & WS_HSCROLL))
+ ShowScrollBar(hDlg, SB_HORZ, TRUE);
+ }
+ else
+ {
+ scOldPos.x = 0;
+
+ sInfo.nMax = pData->cxMin - 1;
+ sInfo.nPage = cx;
+ sInfo.nPos = pData->scPos.x;
+ sInfo.nPos = scOldPos.x;
+ SetScrollInfo(hDlg, SB_HORZ, &sInfo, TRUE);
+
+ ShowScrollBar(hDlg, SB_HORZ, FALSE);
+
+ rect.left = 0;
+ rect.right = cx;
+ rect.top = cy - sbHYSize;
+ rect.bottom = cy;
+ InvalidateRect(hDlg, &rect, TRUE);
+ }
+
+ if ((scOldPos.x != pData->scPos.x) || (scOldPos.y != pData->scPos.y))
+ {
+ ScrollWindowEx(hDlg,
+ // (scOldPos.x - pData->scPos.x),
+ (pData->scPos.x - scOldPos.x),
+ // (scOldPos.y - pData->scPos.y),
+ (pData->scPos.y - scOldPos.y),
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ SW_INVALIDATE | SW_ERASE | SW_SCROLLCHILDREN);
+
+ pData->scPos = scOldPos;
+ }
+
+ // /* Adjust the start of the visible area if we are attempting to show nonexistent areas */
+ // if ((pData->cxMin - pData->scPos.x) < cx) pData->scPos.x = pData->cxMin - cx;
+ // if ((pData->cyMin - pData->scPos.y) < cy) pData->scPos.y = pData->cyMin - cy;
+ // // InvalidateRect(GuiData->hWindow, NULL, TRUE);
+
+ /* Forbid resizing the control smaller than its minimal size */
+ if (cx < pData->cxMin) cx = pData->cxMin;
+ if (cy < pData->cyMin) cy = pData->cyMin;
+
+ if ((cx != pData->cxOld) || (cy != pData->cyOld))
+ {
+ hdwp = BeginDeferWindowPos(8);
+
+ /* Move the edit boxes */
+
+ GetWindowRect(hDlg, &rect);
+
+ hItemWnd = GetDlgItem(hDlg, IDC_EVENTTEXTEDIT);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+ // OffsetRect(&rect, 0, y);
+ // y += (cy - pData->cyOld) / 2 ; // + (cy - pData->cyOld) % 2;
+ /** y += (cy - pData->cyOld) / 2 ; // + (cy - pData->cyOld) % 2; **/
+ if (cy >= pData->cyOld)
+ y += (cy - pData->cyOld) / 2 + (cy - pData->cyOld) % 2;
+ else
+ y -= (pData->cyOld - cy) / 2 + (pData->cyOld - cy) % 2;
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ 0,
+ rect.left, rect.top,
+ (rect.right - rect.left) + (cx - pData->cxOld),
+ (rect.bottom - rect.top) + y,
+ /** SWP_NOMOVE | **/ SWP_NOZORDER | SWP_NOACTIVATE);
+
+ hItemWnd = GetDlgItem(hDlg, IDC_DETAILS_STATIC);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+ // OffsetRect(&rect, 0, y);
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ 0,
+ rect.left, rect.top + y,
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ hItemWnd = GetDlgItem(hDlg, IDC_BYTESRADIO);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+ // OffsetRect(&rect, 0, y);
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ 0,
+ rect.left, rect.top + y,
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ hItemWnd = GetDlgItem(hDlg, IDC_WORDRADIO);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+ // OffsetRect(&rect, 0, y);
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ 0,
+ rect.left, rect.top + y,
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ hItemWnd = GetDlgItem(hDlg, IDC_EVENTDATAEDIT);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+ // OffsetRect(&rect, 0, y);
+ // // y -= (cy - pData->cyOld) % 2;
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ 0,
+ rect.left, rect.top + y,
+ (rect.right - rect.left) + (cx - pData->cxOld),
+ (rect.bottom - rect.top) + y,
+ SWP_NOZORDER | SWP_NOACTIVATE);
+
+ /* Move the buttons */
+
+ hItemWnd = GetDlgItem(hDlg, IDC_PREVIOUS);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ 0,
+ rect.left + (cx - pData->cxOld),
+ rect.top,
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ hItemWnd = GetDlgItem(hDlg, IDC_NEXT);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ 0,
+ rect.left + (cx - pData->cxOld),
+ rect.top,
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ hItemWnd = GetDlgItem(hDlg, IDC_COPY);
+ GetWindowRect(hItemWnd, &rect);
+ MapWindowPoints(HWND_DESKTOP /*NULL*/, hDlg, (LPPOINT)&rect, sizeof(RECT)/sizeof(POINT));
+
+ if (hdwp)
+ hdwp = DeferWindowPos(hdwp,
+ hItemWnd,
+ 0,
+ rect.left + (cx - pData->cxOld),
+ rect.top,
+ 0, 0,
+ SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);
+
+ if (hdwp)
+ EndDeferWindowPos(hdwp);
+
+ pData->cxOld = cx;
+ pData->cyOld = cy;
+ }
+}
+
+static
+VOID
+InitDetailsDlgCtrl(HWND hDlg, PDETAILDATA pData)
+{
+ DWORD dwMask;
+
+ HANDLE nextIcon = LoadImageW(hInst, MAKEINTRESOURCEW(IDI_NEXT), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
+ HANDLE prevIcon = LoadImageW(hInst, MAKEINTRESOURCEW(IDI_PREV), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
+ HANDLE copyIcon = LoadImageW(hInst, MAKEINTRESOURCEW(IDI_COPY), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);
+
+ SendDlgItemMessageW(hDlg, IDC_NEXT, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)nextIcon);
+ SendDlgItemMessageW(hDlg, IDC_PREVIOUS, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)prevIcon);
+ SendDlgItemMessageW(hDlg, IDC_COPY, BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)copyIcon);
+
+ /* Set the default read-only RichEdit color */
+ SendDlgItemMessageW(hDlg, IDC_EVENTTEXTEDIT, EM_SETBKGNDCOLOR, 0, GetSysColor(COLOR_3DFACE));
+
+ /* Enable RichEdit coloured and underlined links */
+ dwMask = SendDlgItemMessageW(hDlg, IDC_EVENTTEXTEDIT, EM_GETEVENTMASK, 0, 0);
+ SendDlgItemMessageW(hDlg, IDC_EVENTTEXTEDIT, EM_SETEVENTMASK, 0, dwMask | ENM_LINK | ENM_MOUSEEVENTS);
+
+ /*
+ * Activate automatic URL recognition by the RichEdit control. For more information, see:
+ * https://blogs.msdn.microsoft.com/murrays/2009/08/31/automatic-richedit-hyperlinks/
+ * https://blogs.msdn.microsoft.com/murrays/2009/09/24/richedit-friendly-name-hyperlinks/
+ * https://msdn.microsoft.com/en-us/library/windows/desktop/bb787991(v=vs.85).aspx
+ */
+ SendDlgItemMessageW(hDlg, IDC_EVENTTEXTEDIT, EM_AUTOURLDETECT, AURL_ENABLEURL /* | AURL_ENABLEEAURLS */, 0);
+
+ /* Note that the RichEdit control never gets themed under WinXP+. One would have to write code to simulate Edit-control theming */
+
+ SendDlgItemMessageW(hDlg, pData->bDisplayWords ? IDC_WORDRADIO : IDC_BYTESRADIO, BM_SETCHECK, BST_CHECKED, 0);
+ SendDlgItemMessageW(hDlg, IDC_EVENTDATAEDIT, WM_SETFONT, (WPARAM)pData->hMonospaceFont, (LPARAM)TRUE);
+}
+
+/* Message handler for Event Details control */
+static
+INT_PTR CALLBACK
+EventDetailsCtrl(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ PDETAILDATA pData;
+
+ pData = (PDETAILDATA)GetWindowLongPtrW(hDlg, DWLP_USER);
+
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ {
+ RECT rect;
+
+ pData = (PDETAILDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pData));
+ if (!pData)
+ {
+ EndDialog(hDlg, 0);
+ return (INT_PTR)TRUE;
+ }
+ SetWindowLongPtrW(hDlg, DWLP_USER, (LONG_PTR)pData);
+
+ pData->EventLogFilter = (PEVENTLOGFILTER)lParam;
+ pData->bDisplayWords = FALSE;
+ pData->hMonospaceFont = CreateMonospaceFont();
+
+ GetClientRect(hDlg, &rect);
+ pData->cxOld = pData->cxMin = rect.right - rect.left;
+ pData->cyOld = pData->cyMin = rect.bottom - rect.top;
+ pData->scPos.x = pData->scPos.y = 0;
+
+ InitDetailsDlgCtrl(hDlg, pData);
+
+#if 0
+ /* Show event info on dialog box */
+ DisplayEvent(hDlg, pData->EventLogFilter);
+ DisplayEventData(hDlg, pData->bDisplayWords);
+#endif
+
+ // OnSize(hDlg, pData, pData->cxOld, pData->cyOld);
+ return (INT_PTR)TRUE;
+ }
+
+ case WM_DESTROY:
+ if (pData)
+ {
+ if (pData->hMonospaceFont)
+ DeleteObject(pData->hMonospaceFont);
+ HeapFree(GetProcessHeap(), 0, pData);
+ }
+ return (INT_PTR)TRUE;
+
+ case EVT_SETFILTER:
+ pData->EventLogFilter = (PEVENTLOGFILTER)lParam;
+ return (INT_PTR)TRUE;
+
+ case EVT_DISPLAY:
+ if (pData->EventLogFilter)
+ {
+ /* Show event info on dialog box */
+ DisplayEvent(hDlg, pData->EventLogFilter);
+ DisplayEventData(hDlg, pData->bDisplayWords);
+ }
+ return (INT_PTR)TRUE;
+
+ case WM_COMMAND:
+ switch (LOWORD(wParam))
+ {
+ case IDC_PREVIOUS:
+ {
+ SendMessageW(hwndListView, WM_KEYDOWN, VK_UP, 0);
+
+ /* Show event info on dialog box */
+ if (pData->EventLogFilter)
+ {
+ DisplayEvent(hDlg, pData->EventLogFilter);
+ DisplayEventData(hDlg, pData->bDisplayWords);
+ }
+ return (INT_PTR)TRUE;
+ }
+
+ case IDC_NEXT:
+ {
+ SendMessageW(hwndListView, WM_KEYDOWN, VK_DOWN, 0);
+
+ /* Show event info on dialog box */
+ if (pData->EventLogFilter)
+ {
+ DisplayEvent(hDlg, pData->EventLogFilter);
+ DisplayEventData(hDlg, pData->bDisplayWords);
+ }
+ return (INT_PTR)TRUE;
+ }
+
+ case IDC_COPY:
+ if (pData->EventLogFilter)
+ CopyEventEntry(hDlg);
+ return (INT_PTR)TRUE;
+
+ case IDC_BYTESRADIO:
+ if (pData->EventLogFilter)
+ {
+ pData->bDisplayWords = FALSE;
+ DisplayEventData(hDlg, pData->bDisplayWords);
+ }
+ return (INT_PTR)TRUE;
+
+ case IDC_WORDRADIO:
+ if (pData->EventLogFilter)
+ {
+ pData->bDisplayWords = TRUE;
+ DisplayEventData(hDlg, pData->bDisplayWords);
+ }
+ return (INT_PTR)TRUE;
+
+ default:
+ break;
+ }
+ break;
+
+ case WM_NOTIFY:
+ switch (((LPNMHDR)lParam)->code)
+ {
+ case EN_LINK:
+ // TODO: Act on the activated RichEdit link!
+ break;
+ }
+ break;
+
+ case WM_HSCROLL:
+ OnScroll(hDlg, pData, SB_HORZ, LOWORD(wParam));
+ SetWindowLongPtrW(hDlg, DWLP_MSGRESULT, 0);
+ return (INT_PTR)TRUE;
+
+ case WM_VSCROLL:
+ OnScroll(hDlg, pData, SB_VERT, LOWORD(wParam));
+ SetWindowLongPtrW(hDlg, DWLP_MSGRESULT, 0);
+ return (INT_PTR)TRUE;
+
+ case WM_SIZE:
+ OnSize(hDlg, pData, LOWORD(lParam), HIWORD(lParam));
+ SetWindowLongPtrW(hDlg, DWLP_MSGRESULT, 0);
+ return (INT_PTR)TRUE;
+ }
+
+ return (INT_PTR)FALSE;
+}
+
+HWND
+CreateEventDetailsCtrl(HINSTANCE hInstance,
+ HWND hParentWnd,
+ LPARAM lParam)
+{
+ return CreateDialogParamW(hInstance,
+ MAKEINTRESOURCEW(IDD_EVENTDETAILS_CTRL),
+ hParentWnd, EventDetailsCtrl, lParam);
+}
--- /dev/null
+/*
+ * PROJECT: ReactOS Event Log Viewer
+ * LICENSE: GPL - See COPYING in the top level directory
+ * FILE: base/applications/mscutils/eventvwr/evtdetctl.h
+ * PURPOSE: Event Details Control
+ * PROGRAMMERS: Marc Piulachs (marc.piulachs at codexchange [dot] net)
+ * Eric Kohl
+ * Hermes Belusca-Maito
+ */
+
+#ifndef _EVTDETCTL_H_
+#define _EVTDETCTL_H_
+
+#define EVT_SETFILTER (WM_APP + 2)
+#define EVT_DISPLAY (WM_APP + 3)
+
+HWND
+CreateEventDetailsCtrl(HINSTANCE hInstance,
+ HWND hParentWnd,
+ LPARAM lParam);
+
+#endif /* _EVTDETCTL_H_ */
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "О&пресняване\tF5", IDM_REFRESH
END
- MENUITEM "На&стройки", IDM_OPTIONS
+ POPUP "На&стройки"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "Помо&щ"
BEGIN
MENUITEM "Помо&щ", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Подробно за събитието"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "Помо&щ", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Затваряне", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Дата:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Описание:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "&Данни:", IDC_STATIC, 8, 169, 25, 8
- CONTROL "&Байтове", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 40, 8
- CONTROL "&Думи", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 85, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "Помо&щ", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Затваряне", IDOK, 208, 228, 50, 14
+ LTEXT "&Данни:", IDC_DETAILS_STATIC, 8, 140, 25, 8
+ CONTROL "&Байтове", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Думи", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 85, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Obnovit\tF5", IDM_REFRESH
END
- MENUITEM "&Možnosti", IDM_OPTIONS
+ POPUP "&Možnosti"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Nápověda"
BEGIN
MENUITEM "Ná&pověda", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Podrobnosti události"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Nápověda", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Zavřít", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Popis:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&ata:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Byty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Nápověda", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Zavřít", IDOK, 208, 228, 50, 14
+ LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Byty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Aktualisieren\tF5", IDM_REFRESH
END
- MENUITEM "&Optionen", IDM_OPTIONS
+ POPUP "&Optionen"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Hilfe"
BEGIN
MENUITEM "H&ilfe", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Ereignisdetails"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Hilfe", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Schließen", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Bezeichnung:", IDC_STATIC, 8, 65, 45, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&aten:", IDC_STATIC, 8, 169, 24, 8
- CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Hilfe", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Schließen", IDOK, 208, 228, 50, 14
+ LTEXT "D&aten:", IDC_DETAILS_STATIC, 8, 140, 24, 8
+ CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Ανανέωση\tF5", IDM_REFRESH
END
- MENUITEM "&Επιλογές", IDM_OPTIONS
+ POPUP "&Επιλογές"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Βοήθεια"
BEGIN
MENUITEM "Βο&ήθεια", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Λεπτομέρειες συμβάντος"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Βοήθεια", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Κλείσιμο", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Ημερομηνία:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Περιγραφή:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "Δ&εδομένα:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Βοήθεια", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Κλείσιμο", IDOK, 208, 228, 50, 14
+ LTEXT "Δ&εδομένα:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Refresh\tF5", IDM_REFRESH
END
- MENUITEM "&Options", IDM_OPTIONS
+ POPUP "&Options"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Help"
BEGIN
MENUITEM "H&elp", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
-CAPTION "Event Properties"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+CAPTION "Event Details"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Help", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Close", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Date:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Description:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&ata:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Help", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Close", IDOK, 208, 228, 50, 14
+ LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Actualizar\tF5", IDM_REFRESH
END
- MENUITEM "&Opciones", IDM_OPTIONS
+ POPUP "&Opciones"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "Ay&uda"
BEGIN
MENUITEM "Ay&uda", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Detalles del evento"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Ayuda", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Cerrar", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Fecha:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Descripción:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&atos:", IDC_STATIC, 8, 169, 25, 8
- CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Ayuda", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Cerrar", IDOK, 208, 228, 50, 14
+ LTEXT "D&atos:", IDC_DETAILS_STATIC, 8, 140, 25, 8
+ CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "Plus ré¢ d'abord", IDM_LIST_NEWEST
MENUITEM "Plus anci&en d'abord", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Détails...\tEntrée", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Rafraîchir\tF5", IDM_REFRESH
END
- MENUITEM "&Options", IDM_OPTIONS
+ POPUP "&Options"
+ BEGIN
+ MENUITEM "&Montrer la vue des détails d'événements", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "Aide"
BEGIN
MENUITEM "Aide", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
-CAPTION "Détail de l'événement"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+CAPTION "Détails de l'événement"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "Aide", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "Fermer", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Date :", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Description :", IDC_STATIC, 8, 65, 45, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "Données :", IDC_STATIC, 8, 169, 35, 8
- CONTROL "&Octets", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 50, 169, 34, 8
- CONTROL "&Mots", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 88, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "Aide", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "Fermer", IDOK, 208, 228, 50, 14
+ LTEXT "Données :", IDC_DETAILS_STATIC, 8, 140, 35, 8
+ CONTROL "&Octets", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 50, 140, 34, 8
+ CONTROL "&Mots", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 88, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "רענן\tF5", IDM_REFRESH
END
- MENUITEM "אפשרויות", IDM_OPTIONS
+ POPUP "אפשרויות"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "עזרה"
BEGIN
MENUITEM "עזרה", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "מאפייני אירוע"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "עזרה", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "סגור", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "תאריך:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "תיאור:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "נתונים:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "בתים", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "מילים", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "עזרה", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "סגור", IDOK, 208, 228, 50, 14
+ LTEXT "נתונים:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "בתים", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "מילים", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Aggiorna\tF5", IDM_REFRESH
END
- MENUITEM "&Opzioni", IDM_OPTIONS
+ POPUP "&Opzioni"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Aiuto"
BEGIN
MENUITEM "A&iuto", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Dettagli"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Aiuto", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Chiudi", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Descrizione:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&ati:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Aiuto", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Chiudi", IDOK, 208, 228, 50, 14
+ LTEXT "D&ati:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "Newest first (&N)", IDM_LIST_NEWEST
MENUITEM "Oldest first (&O)", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "Details... (&D)\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "更新(&R)\tF5", IDM_REFRESH
END
- MENUITEM "オプション(&O)", IDM_OPTIONS
+ POPUP "オプション(&O)"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "ヘルプ(&H)"
BEGIN
MENUITEM "ヘルプ(&E)", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "イベントの詳細情報"
FONT 9, "MS UI Gothic", 400, 0, 0x1
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "ヘルプ(&H)", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "閉じる(&C)", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 9, "MS UI Gothic", 400, 0, 0x1
BEGIN
LTEXT "日付:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "説明(&D):", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "データ(&A):", IDC_STATIC, 8, 169, 20, 8
- CONTROL "バイト(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "ワード(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "ヘルプ(&H)", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "閉じる(&C)", IDOK, 208, 228, 50, 14
+ LTEXT "データ(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "バイト(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "ワード(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "Newest first (&N)", IDM_LIST_NEWEST
MENUITEM "Oldest first (&O)", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "Details... (&D)\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "새로 고침(&R)\tF5", IDM_REFRESH
END
- MENUITEM "옵션(&O)", IDM_OPTIONS
+ POPUP "옵션(&O)"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "도움말(&H)"
BEGIN
MENUITEM "도움말(&H)", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Event Detail"
FONT 9, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "도움말(&H)", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "닫기(&C)", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 9, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "날짜:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "설명(&D):", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "데이터(&A):", IDC_STATIC, 8, 169, 20, 8
- CONTROL "바이트(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "글자(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "도움말(&H)", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "닫기(&C)", IDOK, 208, 228, 50, 14
+ LTEXT "데이터(&A):", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "바이트(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "글자(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Oppdater\tF5", IDM_REFRESH
END
- MENUITEM "&Handling", IDM_OPTIONS
+ POPUP "&Handling"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Hjelp"
BEGIN
MENUITEM "Hj&elp", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Hendelse detaljer"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Hjelp", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Lukk", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Dato:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Beskrivelse:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&ata", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Tegn", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Ord", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Hjelp", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Lukk", IDOK, 208, 228, 50, 14
+ LTEXT "D&ata", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Tegn", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Ord", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Odśwież\tF5", IDM_REFRESH
END
- MENUITEM "Op&cje", IDM_OPTIONS
+ POPUP "Op&cje"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "Po&moc"
BEGIN
MENUITEM "Pomo&c", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Szczegóły zdarzenia"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "Po&moc", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Zamknij", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Opis:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&ane", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Bajty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Słowa", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "Po&moc", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Zamknij", IDOK, 208, 228, 50, 14
+ LTEXT "D&ane", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Bajty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Słowa", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Atualizar\tF5", IDM_REFRESH
END
- MENUITEM "&Opções", IDM_OPTIONS
+ POPUP "&Opções"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Ajuda"
BEGIN
MENUITEM "&Ajuda", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Detalhes do Evento"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "A&juda", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Fechar", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Descrição:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "Dad&os:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "A&juda", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Fechar", IDOK, 208, 228, 50, 14
+ LTEXT "Dad&os:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "Împ&rospătare\tF5", IDM_REFRESH
END
- MENUITEM "&Opțiuni", IDM_OPTIONS
+ POPUP "&Opțiuni"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "Aj&utor"
BEGIN
MENUITEM "&Manual…", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Detalii eveniment"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Manual…", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "Î&nchide", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Dată:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Descriere:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&ate:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&8 biți", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&16 biți", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Manual…", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "Î&nchide", IDOK, 208, 228, 50, 14
+ LTEXT "D&ate:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&8 biți", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&16 biți", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "Сначала &новые", IDM_LIST_NEWEST
MENUITEM "Сначала &старые", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Обновить\tF5", IDM_REFRESH
END
- MENUITEM "&Настройки", IDM_OPTIONS
+ POPUP "&Настройки"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Справка"
BEGIN
MENUITEM "&Помощь", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Свойства события"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "П&омощь", IDHELP, 8, 220, 55, 14
+ DEFPUSHBUTTON "&Закрыть", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Дата:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Описание:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "&Данные:", IDC_STATIC, 8, 169, 30, 8
- CONTROL "&Байты", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 49, 169, 34, 8
- CONTROL "&Слова", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 87, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "П&омощь", IDHELP, 8, 228, 55, 14
- DEFPUSHBUTTON "&Закрыть", IDOK, 208, 228, 50, 14
+ LTEXT "&Данные:", IDC_DETAILS_STATIC, 8, 140, 30, 8
+ CONTROL "&Байты", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 49, 140, 34, 8
+ CONTROL "&Слова", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 87, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Obnoviť\tF5", IDM_REFRESH
END
- MENUITEM "&Možnosti", IDM_OPTIONS
+ POPUP "&Možnosti"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Pomocník"
BEGIN
MENUITEM "&Pomocník", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Podrobnosti o udalosti"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Pomocník", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Zavrieť", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Dátum:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Popis:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "Ú&daje:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Bajty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Slová", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Pomocník", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Zavrieť", IDOK, 208, 228, 50, 14
+ LTEXT "Ú&daje:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Bajty", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Slová", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Rifresko\tF5", IDM_REFRESH
END
- MENUITEM "&Opsione", IDM_OPTIONS
+ POPUP "&Opsione"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "Ndihmë"
BEGIN
MENUITEM "Ndihmë", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Detaje te ngjarjeve"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "Ndihmë", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "Mbylle", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Data:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "Përshkrimi:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&ata:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "Ndihmë", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "Mbylle", IDOK, 208, 228, 50, 14
+ LTEXT "D&ata:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Bytes", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Word", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Uppdatera\tF5", IDM_REFRESH
END
- MENUITEM "&Åtgärd", IDM_OPTIONS
+ POPUP "&Åtgärd"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Hjälp"
BEGIN
MENUITEM "Hj&älp", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Händelsedetaljer"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Hjälp", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Stäng", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Datum:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Beskrivning:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "D&ata", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Byte", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Ord", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Hjälp", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Stäng", IDOK, 208, 228, 50, 14
+ LTEXT "D&ata", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Byte", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Ord", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Yenile\tF5", IDM_REFRESH
END
- MENUITEM "&Seçenekler", IDM_OPTIONS
+ POPUP "&Seçenekler"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Yardım"
BEGIN
MENUITEM "&Yardım", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Olay Ayrıntıları"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Yardım", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Kapat", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Târih:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "Açıklama:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "Veri:", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Çoklu", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "Sö&zcük", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Yardım", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Kapat", IDOK, 208, 228, 50, 14
+ LTEXT "Veri:", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Çoklu", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "Sö&zcük", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "&Newest first", IDM_LIST_NEWEST
MENUITEM "&Oldest first", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "&Details...\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "&Оновити\tF5", IDM_REFRESH
END
- MENUITEM "&Властивості", IDM_OPTIONS
+ POPUP "&Властивості"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "&Допомога"
BEGIN
MENUITEM "Д&опомога", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "Деталі події"
-FONT 8, "MS Shell Dlg", 400, 0, 0x1
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "&Допомога", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "&Закрити", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 8, "MS Shell Dlg"
BEGIN
LTEXT "Дата:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "&Опис:", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "Д&aта", IDC_STATIC, 8, 169, 20, 8
- CONTROL "&Байт", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "&Слово", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "&Допомога", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "&Закрити", IDOK, 208, 228, 50, 14
+ LTEXT "Д&aта", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "&Байт", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "&Слово", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "Newest first (&N)", IDM_LIST_NEWEST
MENUITEM "Oldest first (&O)", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "Details... (&D)\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "刷新(&R)\tF5", IDM_REFRESH
END
- MENUITEM "选项(&O)", IDM_OPTIONS
+ POPUP "选项(&O)"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "帮助(&H)"
BEGIN
MENUITEM "帮助内容(&E)", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "事件详细信息"
FONT 9, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "帮助(&H)", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "关闭(&C)", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 9, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "日期:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "描述(&D):", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "数据(&A)", IDC_STATIC, 8, 169, 20, 8
- CONTROL "字节(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "字(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "帮助(&H)", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "关闭(&C)", IDOK, 208, 228, 50, 14
+ LTEXT "数据(&A)", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "字节(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "字(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
MENUITEM "Newest first (&N)", IDM_LIST_NEWEST
MENUITEM "Oldest first (&O)", IDM_LIST_OLDEST
MENUITEM SEPARATOR
+ MENUITEM "Details... (&D)\tEnter", IDM_EVENT_DETAILS
+ MENUITEM SEPARATOR
MENUITEM "刷新(&R)\tF5", IDM_REFRESH
END
- MENUITEM "選項(&O)", IDM_OPTIONS
+ POPUP "選項(&O)"
+ BEGIN
+ MENUITEM "&Show event details view", IDM_SHOW_EVENT_DETAILS_VIEW
+ END
POPUP "説明(&H)"
BEGIN
MENUITEM "説明內容(&E)", IDM_HELP
VK_F5, IDM_REFRESH, VIRTKEY
END
-IDD_EVENTPROPERTIES DIALOGEX 0, 0, 266, 251
-STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
+IDD_EVENTDETAILS_DLG DIALOGEX 0, 0, 266, 240
+STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_THICKFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
EXSTYLE WS_EX_CONTEXTHELP
CAPTION "事件詳細資訊"
FONT 9, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ LTEXT "EvtDetailsCtrl", IDC_STATIC, 0, 0, 266, 215
+ PUSHBUTTON "説明(&H)", IDHELP, 8, 220, 50, 14
+ DEFPUSHBUTTON "關閉(&C)", IDOK, 208, 220, 50, 14
+END
+
+IDD_EVENTDETAILS_CTRL DIALOGEX 0, 0, 266, 215
+STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN
+FONT 9, "MS Shell Dlg", 400, 0, 0x1
BEGIN
LTEXT "日期:", IDC_STATIC, 8, 5, 31, 8
EDITTEXT IDC_EVENTDATESTATIC, 46, 5, 47, 8, ES_LEFT | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP | ES_AUTOHSCROLL
PUSHBUTTON "", IDC_COPY, 230, 37, 28, 14, BS_ICON
LTEXT "描述(&D):", IDC_STATIC, 8, 65, 39, 8
- CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 88
-
- LTEXT "資料(&A)", IDC_STATIC, 8, 169, 20, 8
- CONTROL "位元組(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 169, 34, 8
- CONTROL "位元(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 169, 33, 8
- EDITTEXT IDC_EVENTDATAEDIT, 8, 179, 250, 44, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
+ CONTROL "", IDC_EVENTTEXTEDIT, RICHEDIT_CLASS, ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER, 8, 76, 250, 60
- PUSHBUTTON "説明(&H)", IDHELP, 8, 228, 50, 14
- DEFPUSHBUTTON "關閉(&C)", IDOK, 208, 228, 50, 14
+ LTEXT "資料(&A)", IDC_DETAILS_STATIC, 8, 140, 20, 8
+ CONTROL "位元組(&B)", IDC_BYTESRADIO, "Button", BS_AUTORADIOBUTTON, 39, 140, 34, 8
+ CONTROL "位元(&W)", IDC_WORDRADIO, "Button", BS_AUTORADIOBUTTON, 77, 140, 34, 8
+ EDITTEXT IDC_EVENTDATAEDIT, 8, 150, 250, 60, ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL | WS_BORDER
END
IDD_LOGPROPERTIES_GENERAL DIALOGEX 0, 0, 252, 234
/* Dialog IDs */
-#define IDD_EVENTPROPERTIES 101
-#define IDD_LOGPROPERTIES_GENERAL 102
+#define IDD_EVENTDETAILS_DLG 101
+#define IDD_EVENTDETAILS_CTRL 102
+#define IDD_LOGPROPERTIES_GENERAL 103
/* Control IDs */
#define IDC_NEXT 1009
#define IDC_COPY 1010
#define IDC_EVENTTEXTEDIT 1011
+#define IDC_DETAILS_STATIC -2
#define IDC_BYTESRADIO 1012
#define IDC_WORDRADIO 1013
#define IDC_EVENTDATAEDIT 1014
#define IDM_EXIT 32777
#define IDM_LIST_NEWEST 32778
#define IDM_LIST_OLDEST 32779
-#define IDM_REFRESH 32780
-#define IDM_OPTIONS 32781
-#define IDM_HELP 32782
-#define IDM_ABOUT 32783
+#define IDM_EVENT_DETAILS 32780
+#define IDM_REFRESH 32781
+#define IDM_SHOW_EVENT_DETAILS_VIEW 32782
+#define IDM_HELP 32783
+#define IDM_ABOUT 32784
/* String IDs */