[EVENTVWR]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 1 Aug 2016 23:29:55 +0000 (23:29 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 1 Aug 2016 23:29:55 +0000 (23:29 +0000)
- 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

29 files changed:
reactos/base/applications/mscutils/eventvwr/CMakeLists.txt
reactos/base/applications/mscutils/eventvwr/eventvwr.c
reactos/base/applications/mscutils/eventvwr/eventvwr.h
reactos/base/applications/mscutils/eventvwr/evtdetctl.c [new file with mode: 0644]
reactos/base/applications/mscutils/eventvwr/evtdetctl.h [new file with mode: 0644]
reactos/base/applications/mscutils/eventvwr/lang/bg-BG.rc
reactos/base/applications/mscutils/eventvwr/lang/cs-CZ.rc
reactos/base/applications/mscutils/eventvwr/lang/de-DE.rc
reactos/base/applications/mscutils/eventvwr/lang/el-GR.rc
reactos/base/applications/mscutils/eventvwr/lang/en-US.rc
reactos/base/applications/mscutils/eventvwr/lang/es-ES.rc
reactos/base/applications/mscutils/eventvwr/lang/fr-FR.rc
reactos/base/applications/mscutils/eventvwr/lang/he-IL.rc
reactos/base/applications/mscutils/eventvwr/lang/it-IT.rc
reactos/base/applications/mscutils/eventvwr/lang/ja-JP.rc
reactos/base/applications/mscutils/eventvwr/lang/ko-KR.rc
reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc
reactos/base/applications/mscutils/eventvwr/lang/pl-PL.rc
reactos/base/applications/mscutils/eventvwr/lang/pt-BR.rc
reactos/base/applications/mscutils/eventvwr/lang/ro-RO.rc
reactos/base/applications/mscutils/eventvwr/lang/ru-RU.rc
reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc
reactos/base/applications/mscutils/eventvwr/lang/sq-AL.rc
reactos/base/applications/mscutils/eventvwr/lang/sv-SE.rc
reactos/base/applications/mscutils/eventvwr/lang/tr-TR.rc
reactos/base/applications/mscutils/eventvwr/lang/uk-UA.rc
reactos/base/applications/mscutils/eventvwr/lang/zh-CN.rc
reactos/base/applications/mscutils/eventvwr/lang/zh-TW.rc
reactos/base/applications/mscutils/eventvwr/resource.h

index 6bd25cb..de8b52d 100644 (file)
@@ -1,7 +1,13 @@
 
+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)
index 4079a7a..96c8fd0 100644 (file)
  * 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\\";
@@ -101,7 +49,7 @@ static const LPCWSTR SystemLogs[] =
 };
 
 /* 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"
@@ -109,7 +57,6 @@ static const LPCWSTR SystemLogs[] =
 #define EVENT_PARAMETER_MESSAGE_FILE    L"ParameterMessageFile"
 
 #define MAX_LOADSTRING 255
-#define ENTRY_SIZE 2056
 
 #define SPLIT_WIDTH 4
 
@@ -121,10 +68,19 @@ WCHAR szStatusBarTemplate[MAX_LOADSTRING];  /* The status bar text */
 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 */
@@ -132,66 +88,6 @@ 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;
@@ -216,13 +112,6 @@ HANDLE hStartEnumEvent     = NULL;  // Command event
 /* 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 */
 
@@ -1200,7 +1089,7 @@ Quit:
 }
 
 
-BOOL
+BOOL                                                                        // NOTE: Used by evtdetctl.c
 GetEventMessage(IN LPCWSTR KeyName,
                 IN LPCWSTR SourceName,
                 IN PEVENTLOGRECORD pevlr,
@@ -2639,7 +2528,6 @@ InitInstance(HINSTANCE hInstance,
                                  (HMENU)100,                         // window ID
                                  hInstance,                          // instance
                                  NULL);                              // window data
-    nSplitPos = 250;
 
     GetClientRect(hwndMainWindow, &rcClient);
     GetWindowRect(hwndStatus, &rs);
@@ -2649,24 +2537,28 @@ InitInstance(HINSTANCE hInstance,
     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,
@@ -2699,15 +2591,33 @@ InitInstance(HINSTANCE hInstance,
     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,
@@ -2849,24 +2759,43 @@ VOID ResizeWnd(INT cx, INT cy)
                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)
@@ -2897,22 +2826,23 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
             {
                 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)
@@ -2966,6 +2896,16 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
                         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)
                         {
                             /*
@@ -3066,6 +3006,23 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
                     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;
@@ -3105,7 +3062,9 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
                 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);
@@ -3116,14 +3075,44 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
                         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;
@@ -3133,9 +3122,22 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
         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;
@@ -3143,24 +3145,47 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
         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:
@@ -3171,7 +3196,6 @@ WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 }
 
 
-
 static
 VOID
 InitPropertiesDlg(HWND hDlg, PEVENTLOG EventLog)
@@ -3482,362 +3506,108 @@ Quit:
     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:
@@ -3848,48 +3618,6 @@ EventDetails(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
                     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!",
@@ -3902,14 +3630,130 @@ EventDetails(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
             }
             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;
index d00d47e..710261e 100644 (file)
@@ -1,3 +1,136 @@
-#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_ */
diff --git a/reactos/base/applications/mscutils/eventvwr/evtdetctl.c b/reactos/base/applications/mscutils/eventvwr/evtdetctl.c
new file mode 100644 (file)
index 0000000..b5535d9
--- /dev/null
@@ -0,0 +1,881 @@
+/*
+ * 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);
+}
diff --git a/reactos/base/applications/mscutils/eventvwr/evtdetctl.h b/reactos/base/applications/mscutils/eventvwr/evtdetctl.h
new file mode 100644 (file)
index 0000000..e2fc8dd
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * 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_ */
index e575105..2640150 100644 (file)
@@ -19,9 +19,14 @@ BEGIN
         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
@@ -38,11 +43,20 @@ BEGIN
     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
@@ -66,15 +80,12 @@ BEGIN
     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
index 423e4fd..0a03281 100644 (file)
@@ -19,9 +19,14 @@ BEGIN
         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
@@ -38,11 +43,20 @@ BEGIN
     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
@@ -66,15 +80,12 @@ BEGIN
     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
index 8d114e5..772176b 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 7b41088..8be6f04 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 47fb525..4da2fd2 100644 (file)
@@ -27,9 +27,14 @@ BEGIN
         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
@@ -46,11 +51,20 @@ BEGIN
     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
@@ -74,15 +88,12 @@ BEGIN
     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
index 8667392..67739f5 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 6798121..ae8d2f4 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         MENUITEM "Plus ré&cent 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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index fc5cd33..aa28062 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index f0d1303..b0f87fc 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index bfbbe2e..1103bba 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index aca3e18..dec45a3 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 3c27dda..a6fad59 100644 (file)
@@ -19,9 +19,14 @@ BEGIN
         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
@@ -38,11 +43,20 @@ BEGIN
     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
@@ -66,15 +80,12 @@ BEGIN
     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
index ffea2f7..ffe7871 100644 (file)
@@ -23,9 +23,14 @@ BEGIN
         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
@@ -42,11 +47,20 @@ BEGIN
     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
@@ -70,15 +84,12 @@ BEGIN
     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
index b8be9b6..661c6f4 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 15fe0b3..31a6bd9 100644 (file)
@@ -24,9 +24,14 @@ BEGIN
         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
@@ -43,11 +48,20 @@ BEGIN
     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
@@ -71,15 +85,12 @@ BEGIN
     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
index a737ee8..dcc4375 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 992e8bd..cac2040 100644 (file)
@@ -24,9 +24,14 @@ BEGIN
         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
@@ -43,11 +48,20 @@ BEGIN
     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
@@ -71,15 +85,12 @@ BEGIN
     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
index 19a7528..0c1340b 100644 (file)
@@ -27,9 +27,14 @@ BEGIN
         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
@@ -46,11 +51,20 @@ BEGIN
     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
@@ -74,15 +88,12 @@ BEGIN
     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
index 6cafb75..588dcf1 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 0952279..765d911 100644 (file)
@@ -27,9 +27,14 @@ BEGIN
         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
@@ -46,11 +51,20 @@ BEGIN
     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
@@ -74,15 +88,12 @@ BEGIN
     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
index f16b3d8..1a396dd 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 6524297..5815bf6 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index 10ef079..6092e11 100644 (file)
@@ -21,9 +21,14 @@ BEGIN
         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
@@ -40,11 +45,20 @@ BEGIN
     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
@@ -68,15 +82,12 @@ BEGIN
     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
index a231d22..d36afe2 100644 (file)
@@ -20,8 +20,9 @@
 
 
 /* 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 */
@@ -38,6 +39,7 @@
 #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 */