Start a rewrite of an MDI WordPad.
authorGed Murphy <gedmurphy@reactos.org>
Thu, 6 Apr 2006 15:54:59 +0000 (15:54 +0000)
committerGed Murphy <gedmurphy@reactos.org>
Thu, 6 Apr 2006 15:54:59 +0000 (15:54 +0000)
svn path=/trunk/; revision=21477

15 files changed:
reactos/base/applications/wordpad/En.rc [new file with mode: 0644]
reactos/base/applications/wordpad/about.c [new file with mode: 0644]
reactos/base/applications/wordpad/dialogs.c [new file with mode: 0644]
reactos/base/applications/wordpad/editwnd.c [new file with mode: 0644]
reactos/base/applications/wordpad/mainwnd.c [new file with mode: 0644]
reactos/base/applications/wordpad/manifest.xml [new file with mode: 0644]
reactos/base/applications/wordpad/misc.c [new file with mode: 0644]
reactos/base/applications/wordpad/opensave.c [new file with mode: 0644]
reactos/base/applications/wordpad/precomp.h [new file with mode: 0644]
reactos/base/applications/wordpad/res/toolbar.bmp [new file with mode: 0644]
reactos/base/applications/wordpad/res/wordpad.ico [new file with mode: 0644]
reactos/base/applications/wordpad/resource.h [new file with mode: 0644]
reactos/base/applications/wordpad/wordpad.c [new file with mode: 0644]
reactos/base/applications/wordpad/wordpad.rbuild [new file with mode: 0644]
reactos/base/applications/wordpad/wordpad.rc [new file with mode: 0644]

diff --git a/reactos/base/applications/wordpad/En.rc b/reactos/base/applications/wordpad/En.rc
new file mode 100644 (file)
index 0000000..48c1c53
--- /dev/null
@@ -0,0 +1,167 @@
+IDR_MAINMENU MENU\r
+BEGIN\r
+  POPUP "&File"\r
+  BEGIN\r
+    MENUITEM "&New...",         ID_NEW\r
+    MENUITEM "&Open...",        ID_OPEN\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "&Close\tCtrl+F4", ID_CLOSE, GRAYED\r
+    MENUITEM "C&lose all",      ID_CLOSEALL, GRAYED\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "&Save",           ID_SAVE, GRAYED\r
+    MENUITEM "Save &As...",     ID_SAVEAS, GRAYED\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "Print Pre&view",  ID_PRINTPRE, GRAYED\r
+    MENUITEM "&Print...",       ID_PRINT, GRAYED\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "Page Set&up...",  ID_PAGESETUP, GRAYED\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "E&xit\tAlt+F4",   ID_EXIT\r
+  END\r
+  POPUP "&Edit"\r
+  BEGIN\r
+    MENUITEM "&Undo",           ID_UNDO, GRAYED\r
+    MENUITEM "&Redo",           ID_REDO, GRAYED\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "Cu&t",            ID_CUT, GRAYED\r
+    MENUITEM "&Copy",           ID_COPY, GRAYED\r
+    MENUITEM "&Paste",          ID_PASTE, GRAYED\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "Clear",           -1, GRAYED\r
+    MENUITEM "Select &All",     ID_SELALL, GRAYED\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "&Find...\tCtrl+F",-1, GRAYED\r
+    MENUITEM "Find Next",       -1, GRAYED\r
+    MENUITEM "Replace\tCtrl+H", -1, GRAYED\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "Object Properties",-1, GRAYED\r
+    MENUITEM "Object",          -1, GRAYED\r
+  END\r
+  POPUP "&View"\r
+  BEGIN\r
+    MENUITEM "&Toolbar",        -1, CHECKED\r
+    MENUITEM "&Format Bar",     -1, CHECKED\r
+    MENUITEM "&Ruler",          -1, CHECKED\r
+    MENUITEM "&Status Bar",     ID_STATUSBAR, CHECKED\r
+  END\r
+  POPUP "&Insert"\r
+  BEGIN\r
+    MENUITEM "&Date and Time...",-1, GRAYED\r
+    MENUITEM "&Object...",       -1, GRAYED\r
+  END\r
+  POPUP "&Format"\r
+  BEGIN\r
+    MENUITEM "&Font...",        -1 GRAYED\r
+    MENUITEM "Bulletstyle",     -1, GRAYED\r
+    MENUITEM "Paragraph...",    -1, GRAYED\r
+    MENUITEM "tabs...",         -1, GRAYED\r
+  END\r
+  POPUP "&Window"\r
+  BEGIN\r
+    MENUITEM "&Cascade",           ID_WINDOW_CASCADE\r
+    MENUITEM "Tile &Horizontally", ID_WINDOW_TILE_HORZ\r
+    MENUITEM "Tile &Vertiacally",  ID_WINDOW_TILE_VERT\r
+    MENUITEM "&Arrange Icons",     ID_WINDOW_ARRANGE\r
+    MENUITEM SEPARATOR\r
+    MENUITEM "Nex&t\tCtrl+F6",     ID_WINDOW_NEXT\r
+  END\r
+  POPUP "&Help"\r
+  BEGIN\r
+    MENUITEM "&About...",       ID_ABOUT\r
+  END\r
+END\r
+\r
+IDR_POPUP MENU\r
+BEGIN\r
+  POPUP "popup"\r
+  BEGIN\r
+\r
+    MENUITEM SEPARATOR\r
+\r
+  END\r
+END\r
+\r
+\r
+IDD_NEWDOCSEL DIALOGEX 6,6,159,67\r
+CAPTION "New"\r
+FONT 8,"Tahoma",0,0\r
+STYLE WS_BORDER | WS_DLGFRAME | DS_MODALFRAME\r
+BEGIN\r
+  LTEXT "New document Type:", IDC_STATIC, 4, 3, 72, 9\r
+  LISTBOX IDC_LIST, 4, 16, 104, 46, WS_TABSTOP\r
+  PUSHBUTTON "&OK", IDOK, 112, 16, 44, 13\r
+  PUSHBUTTON "&Cancel", IDCANCEL, 112, 33, 44, 13\r
+END\r
+\r
+\r
+IDD_ABOUTBOX DIALOGEX 22,16,190,182\r
+CAPTION "About WordPad"\r
+FONT 8,"Tahoma",0,0\r
+STYLE WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME\r
+BEGIN\r
+  LTEXT "WordPad II v0.1\nCopyright (C) 2006\nGed Murphy (gedmurphy@gmail.com)", IDC_STATIC, 48, 7, 150, 36\r
+  PUSHBUTTON "Close", IDOK, 65, 162, 44, 15\r
+  ICON IDI_ICON, IDC_STATIC, 10, 10, 7, 30\r
+  EDITTEXT IDC_LICENSE_EDIT, 8, 40, 174, 110, WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | ES_READONLY | ES_MULTILINE\r
+END\r
+\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+  IDS_LICENSE           "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA."\r
+  IDS_DEFAULT_NAME      "Document %1!u!"\r
+  IDS_READY             " Ready."\r
+END\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+  IDS_DOC_TYPE_RICH_TEXT    "Rich Text Document"\r
+  IDS_DOC_TYPE_UNICODE_TEXT "Text Document"\r
+  IDS_DOC_TYPE_TEXT         "Unicode Text Document"\r
+END\r
+\r
+\r
+\r
+/* Tooltips */\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+  IDS_TOOLTIP_NEW       "New"\r
+  IDS_TOOLTIP_OPEN      "Open"\r
+  IDS_TOOLTIP_SAVE      "Save"\r
+  IDS_TOOLTIP_PRINTPRE  "Print preview"\r
+  IDS_TOOLTIP_PRINT     "Print"\r
+  IDS_TOOLTIP_CUT       "Cut"\r
+  IDS_TOOLTIP_COPY      "Copy"\r
+  IDS_TOOLTIP_PASTE     "Paste"\r
+  IDS_TOOLTIP_UNDO      "Undo"\r
+  IDS_TOOLTIP_REDO      "Redo"\r
+END\r
+\r
+/* Hints */\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+  IDS_HINT_BLANK        " "\r
+  IDS_HINT_NEW          " Creates a new document."\r
+  IDS_HINT_OPEN         " Opens an existing document."\r
+  IDS_HINT_CLOSE        " Closes this window."\r
+  IDS_HINT_CLOSEALL     " Closes all windows."\r
+  IDS_HINT_SAVE         " Saves the active document."\r
+  IDS_HINT_SAVEAS       " Saves the active document with a new name."\r
+  IDS_HINT_PRINT        " Prints the active document."\r
+  IDS_HINT_PRINTPRE     " Previews the printed document."\r
+  IDS_HINT_PAGESETUP    " Changes page layout settings."\r
+  IDS_HINT_EXIT         " Exits this application."\r
+\r
+  IDS_HINT_CASCADE      " Arrange windows so they overlap."\r
+  IDS_HINT_TILE_HORZ    " Arrange windows as non-overlapping tiles."\r
+  IDS_HINT_TILE_VERT    " Arrange windows as non-overlapping tiles."\r
+  IDS_HINT_ARRANGE      " Arrange icons at the bottom of the window."\r
+  IDS_HINT_NEXT         " Activates the next window."\r
+\r
+  IDS_HINT_SYS_RESTORE  " Restores this window to normal size."\r
+  IDS_HINT_SYS_MOVE     " Moves this window."\r
+  IDS_HINT_SYS_SIZE     " Resizes this window."\r
+  IDS_HINT_SYS_MINIMIZE " Collapses this window to an icon."\r
+  IDS_HINT_SYS_MAXIMIZE " Expands this window to fill this screen."\r
+END\r
+\r
diff --git a/reactos/base/applications/wordpad/about.c b/reactos/base/applications/wordpad/about.c
new file mode 100644 (file)
index 0000000..a52ed3f
--- /dev/null
@@ -0,0 +1,54 @@
+#include "precomp.h"\r
+\r
+INT_PTR CALLBACK\r
+AboutDialogProc(HWND hDlg,\r
+                UINT message,\r
+                WPARAM wParam,\r
+                LPARAM lParam)\r
+{\r
+    HWND  hLicenseEditWnd;\r
+    HICON hIcon = NULL;\r
+    TCHAR strLicense[700];\r
+\r
+    switch (message)\r
+    {\r
+    case WM_INITDIALOG:\r
+\r
+        hIcon = LoadImage(hInstance,\r
+                          MAKEINTRESOURCE(IDI_ICON),\r
+                          IMAGE_ICON,\r
+                          16,\r
+                          16,\r
+                          0);\r
+\r
+        SendMessage(hDlg,\r
+                    WM_SETICON,\r
+                    ICON_SMALL,\r
+                    (LPARAM)hIcon);\r
+\r
+        hLicenseEditWnd = GetDlgItem(hDlg,\r
+                                     IDC_LICENSE_EDIT);\r
+\r
+        LoadString(hInstance,\r
+                   IDS_LICENSE,\r
+                   strLicense,\r
+                   sizeof(strLicense) / sizeof(TCHAR));\r
+\r
+        SetWindowText(hLicenseEditWnd,\r
+                      strLicense);\r
+        return TRUE;\r
+\r
+    case WM_COMMAND:\r
+        if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))\r
+        {\r
+            DestroyIcon(hIcon);\r
+            EndDialog(hDlg,\r
+                      LOWORD(wParam));\r
+            return TRUE;\r
+        }\r
+\r
+        break;\r
+    }\r
+\r
+    return FALSE;\r
+}\r
diff --git a/reactos/base/applications/wordpad/dialogs.c b/reactos/base/applications/wordpad/dialogs.c
new file mode 100644 (file)
index 0000000..ff61502
--- /dev/null
@@ -0,0 +1,131 @@
+#include "precomp.h"\r
+\r
+INT_PTR CALLBACK\r
+NewDocSelDlgProc(HWND hDlg,\r
+                 UINT message,\r
+                 WPARAM wParam,\r
+                 LPARAM lParam)\r
+{\r
+    switch (message)\r
+    {\r
+        static HWND hList;\r
+\r
+        case WM_INITDIALOG:\r
+        {\r
+            LPTSTR lpDocType;\r
+            INT i;\r
+\r
+            hList = GetDlgItem(hDlg,\r
+                               IDC_LIST);\r
+\r
+            for (i = IDS_DOC_TYPE_RICH_TEXT; i <= IDS_DOC_TYPE_TEXT; i++)\r
+            {\r
+                if (AllocAndLoadString(&lpDocType,\r
+                                       hInstance,\r
+                                       i))\r
+                {\r
+                    ListBox_AddString(hList,\r
+                                      lpDocType);\r
+                    LocalFree((HLOCAL)lpDocType);\r
+                }\r
+            }\r
+\r
+            SendMessage(hList,\r
+                        LB_SETCURSEL,\r
+                        0,\r
+                        0);\r
+\r
+            return TRUE;\r
+        }\r
+\r
+        case WM_COMMAND:\r
+        {\r
+            INT LbSel;\r
+\r
+            if (HIWORD(wParam) == LBN_DBLCLK)\r
+            {\r
+                LbSel = (INT)SendMessage(hList,\r
+                                         LB_GETCURSEL,\r
+                                         0,\r
+                                         0);\r
+                EndDialog(hDlg,\r
+                          LbSel);\r
+                return TRUE;\r
+            }\r
+\r
+            switch (LOWORD(wParam))\r
+            {\r
+                case IDOK:\r
+                    LbSel = (INT)SendMessage(hList,\r
+                                             LB_GETCURSEL,\r
+                                             0,\r
+                                             0);\r
+                    EndDialog(hDlg,\r
+                              LbSel);\r
+                    return TRUE;\r
+\r
+                case IDCANCEL:\r
+                    EndDialog(hDlg, -1);\r
+                    return TRUE;\r
+            }\r
+        }\r
+    }\r
+\r
+    return FALSE;\r
+}\r
+\r
+\r
+\r
+INT_PTR CALLBACK\r
+AboutDialogProc(HWND hDlg,\r
+                UINT message,\r
+                WPARAM wParam,\r
+                LPARAM lParam)\r
+{\r
+    HWND  hLicenseEditWnd;\r
+    HICON hIcon = NULL;\r
+    TCHAR strLicense[700];\r
+\r
+    switch (message)\r
+    {\r
+    case WM_INITDIALOG:\r
+\r
+        hIcon = LoadImage(hInstance,\r
+                          MAKEINTRESOURCE(IDI_ICON),\r
+                          IMAGE_ICON,\r
+                          16,\r
+                          16,\r
+                          0);\r
+\r
+        SendMessage(hDlg,\r
+                    WM_SETICON,\r
+                    ICON_SMALL,\r
+                    (LPARAM)hIcon);\r
+\r
+        hLicenseEditWnd = GetDlgItem(hDlg,\r
+                                     IDC_LICENSE_EDIT);\r
+\r
+        LoadString(hInstance,\r
+                   IDS_LICENSE,\r
+                   strLicense,\r
+                   sizeof(strLicense) / sizeof(TCHAR));\r
+\r
+        SetWindowText(hLicenseEditWnd,\r
+                      strLicense);\r
+        return TRUE;\r
+\r
+    case WM_COMMAND:\r
+        if ((LOWORD(wParam) == IDOK) || (LOWORD(wParam) == IDCANCEL))\r
+        {\r
+            DestroyIcon(hIcon);\r
+            EndDialog(hDlg,\r
+                      LOWORD(wParam));\r
+            return TRUE;\r
+        }\r
+\r
+        break;\r
+    }\r
+\r
+    return FALSE;\r
+}\r
+\r
diff --git a/reactos/base/applications/wordpad/editwnd.c b/reactos/base/applications/wordpad/editwnd.c
new file mode 100644 (file)
index 0000000..ffc93ea
--- /dev/null
@@ -0,0 +1,202 @@
+#include "precomp.h"\r
+\r
+static const TCHAR szEditWndClass[] = TEXT("WordPadEditWndClass");\r
+\r
+\r
+static BOOL\r
+InitEditWnd(PEDIT_WND_INFO Info)\r
+{\r
+    HANDLE hDLL;\r
+    HFONT hfDefault;\r
+\r
+    hDLL = LoadLibrary(_T("RICHED20.DLL"));\r
+    if (hDLL == NULL)\r
+    {\r
+        GetError(0);\r
+        return FALSE;\r
+    }\r
+\r
+    Info->hEdit = CreateWindowEx(0, //WS_EX_CLIENTEDGE,\r
+                                 RICHEDIT_CLASS,\r
+                                 NULL,\r
+                                 WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL |\r
+                                   ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL,\r
+                                 0,\r
+                                 0,\r
+                                 100,\r
+                                 100,\r
+                                 Info->hSelf,\r
+                                 NULL,\r
+                                 hInstance,\r
+                                 NULL);\r
+    if(Info->hEdit == NULL)\r
+    {\r
+        GetError(0);\r
+\r
+        return FALSE;\r
+    }\r
+\r
+    hfDefault = GetStockObject(DEFAULT_GUI_FONT);\r
+    SendMessage(Info->hEdit,\r
+                WM_SETFONT,\r
+                (WPARAM)hfDefault,\r
+                MAKELPARAM(FALSE, 0));\r
+\r
+    return TRUE;\r
+}\r
+\r
+\r
+static LRESULT CALLBACK\r
+EditWndProc(HWND hwnd,\r
+            UINT uMsg,\r
+            WPARAM wParam,\r
+            LPARAM lParam)\r
+{\r
+    PEDIT_WND_INFO Info;\r
+    LRESULT Ret = 0;\r
+\r
+    /* Get the window context */\r
+    Info = (PEDIT_WND_INFO)GetWindowLongPtr(hwnd,\r
+                                            GWLP_USERDATA);\r
+    if (Info == NULL && uMsg != WM_CREATE)\r
+    {\r
+        goto HandleDefaultMessage;\r
+    }\r
+\r
+    switch (uMsg)\r
+    {\r
+        case WM_CREATE:\r
+        {\r
+            Info = (PEDIT_WND_INFO)(((LPMDICREATESTRUCT)((LPCREATESTRUCT)lParam)->lpCreateParams)->lParam);\r
+            Info->hSelf = hwnd;\r
+\r
+            SetWindowLongPtr(hwnd,\r
+                             GWLP_USERDATA,\r
+                             (LONG_PTR)Info);\r
+\r
+            if (!InitEditWnd(Info))\r
+            {\r
+                Ret = (LRESULT)-1;\r
+                break;\r
+            }\r
+            break;\r
+        }\r
+\r
+        case WM_SIZE:\r
+        {\r
+            RECT rcClient;\r
+\r
+            if (GetClientRect(Info->hSelf,\r
+                              &rcClient))\r
+            {\r
+                SetWindowPos(Info->hEdit,\r
+                             NULL,\r
+                             0,\r
+                             0,\r
+                             rcClient.right,\r
+                             rcClient.bottom,\r
+                             SWP_NOZORDER);\r
+            }\r
+        }\r
+\r
+        default:\r
+HandleDefaultMessage:\r
+            Ret = DefMDIChildProc(hwnd,\r
+                                  uMsg,\r
+                                  wParam,\r
+                                  lParam);\r
+            break;\r
+    }\r
+\r
+    return Ret;\r
+\r
+}\r
+\r
+\r
+VOID\r
+SetEditorEnvironment(PEDIT_WND_INFO Info,\r
+                          BOOL Setup)\r
+{\r
+    if (Setup)\r
+    {\r
+        /* FIXME - setup editor environment (e.g. show toolbars, enable menus etc) */\r
+    }\r
+    else\r
+    {\r
+        /* FIXME - cleanup editor environment (e.g. hide toolbars, disable menus etc) */\r
+    }\r
+}\r
+\r
+\r
+BOOL\r
+CreateEditWindow(struct _MAIN_WND_INFO *MainWnd,\r
+                 POPEN_EDIT_INFO OpenInfo)\r
+{\r
+    PEDIT_WND_INFO Info;\r
+    HWND hWndEditor;\r
+\r
+    Info = HeapAlloc(ProcessHeap,\r
+                     0,\r
+                     sizeof(EDIT_WND_INFO));\r
+    if (Info != NULL)\r
+    {\r
+        ZeroMemory(Info,\r
+                   sizeof(EDIT_WND_INFO));\r
+        Info->MainWnd = MainWnd;\r
+        Info->MdiEditorType = metImageEditor;\r
+        Info->OpenInfo = OpenInfo;\r
+\r
+        hWndEditor = CreateMDIWindow(szEditWndClass,\r
+                                     OpenInfo->lpImageName,\r
+                                     WS_MAXIMIZE,\r
+                                     CW_USEDEFAULT,\r
+                                     CW_USEDEFAULT,\r
+                                     CW_USEDEFAULT,\r
+                                     CW_USEDEFAULT,\r
+                                     MainWnd->hMdiClient,\r
+                                     hInstance,\r
+                                     (LPARAM)Info);\r
+\r
+        if (hWndEditor != NULL)\r
+            return TRUE;\r
+\r
+\r
+        HeapFree(ProcessHeap,\r
+                 0,\r
+                 Info);\r
+    }\r
+\r
+    return FALSE;\r
+}\r
+\r
+BOOL\r
+InitEditWindowImpl(VOID)\r
+{\r
+    WNDCLASSEX wc = {0};\r
+\r
+    wc.cbSize = sizeof(WNDCLASSEX);\r
+    wc.lpfnWndProc = EditWndProc;\r
+    wc.hInstance = hInstance;\r
+    wc.hIcon = LoadIcon(hInstance,\r
+                        MAKEINTRESOURCE(IDI_ICON));\r
+    wc.hCursor = LoadCursor(NULL,\r
+                            IDC_ARROW);\r
+    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);\r
+    wc.lpszMenuName = NULL;\r
+    wc.lpszClassName = szEditWndClass;\r
+    wc.hIconSm = (HICON)LoadImage(hInstance,\r
+                                  MAKEINTRESOURCE(IDI_ICON),\r
+                                  IMAGE_ICON,\r
+                                  16,\r
+                                  16,\r
+                                  LR_SHARED);\r
+\r
+    return RegisterClassEx(&wc) != (ATOM)0;\r
+}\r
+\r
+VOID\r
+UninitEditWindowImpl(VOID)\r
+{\r
+    UnregisterClass(szEditWndClass,\r
+                    hInstance);\r
+}\r
diff --git a/reactos/base/applications/wordpad/mainwnd.c b/reactos/base/applications/wordpad/mainwnd.c
new file mode 100644 (file)
index 0000000..4f18f03
--- /dev/null
@@ -0,0 +1,663 @@
+#include "precomp.h"\r
+\r
+static const TCHAR szMainWndClass[] = TEXT("WordPadMainWndClass");\r
+\r
+#define ID_MDI_FIRSTCHILD   50000\r
+#define ID_MDI_WINDOWMENU   5\r
+\r
+/* menu hints */\r
+static const MENU_HINT MainMenuHintTable[] = {\r
+    /* File Menu */\r
+    {ID_BLANK,     IDS_HINT_BLANK},\r
+    {ID_NEW,       IDS_HINT_NEW},\r
+    {ID_OPEN,      IDS_HINT_OPEN},\r
+    {ID_CLOSE,     IDS_HINT_CLOSE},\r
+    {ID_CLOSEALL,  IDS_HINT_CLOSEALL},\r
+    {ID_SAVE,      IDS_HINT_SAVE},\r
+    {ID_SAVEAS,    IDS_HINT_SAVEAS},\r
+    {ID_PRINT,     IDS_HINT_PRINT},\r
+    {ID_PRINTPRE,  IDS_HINT_PRINTPRE},\r
+    {ID_PAGESETUP, IDS_HINT_PAGESETUP},\r
+    {ID_EXIT,      IDS_HINT_EXIT},\r
+\r
+    /* Window Menu */\r
+    {ID_WINDOW_NEXT,      IDS_HINT_NEXT},\r
+    {ID_WINDOW_CASCADE,   IDS_HINT_CASCADE},\r
+    {ID_WINDOW_TILE_HORZ, IDS_HINT_TILE_HORZ},\r
+    {ID_WINDOW_TILE_VERT, IDS_HINT_TILE_VERT},\r
+    {ID_WINDOW_ARRANGE,   IDS_HINT_ARRANGE}\r
+};\r
+\r
+static const MENU_HINT SystemMenuHintTable[] = {\r
+    {SC_RESTORE,    IDS_HINT_SYS_RESTORE},\r
+    {SC_MOVE,       IDS_HINT_SYS_MOVE},\r
+    {SC_SIZE,       IDS_HINT_SYS_SIZE},\r
+    {SC_MINIMIZE,   IDS_HINT_SYS_MINIMIZE},\r
+    {SC_MAXIMIZE,   IDS_HINT_SYS_MAXIMIZE},\r
+    {SC_CLOSE,      IDS_HINT_CLOSE},\r
+    {SC_NEXTWINDOW, IDS_HINT_NEXT},\r
+};\r
+\r
+\r
+static VOID\r
+CreateToolbars(PMAIN_WND_INFO Info)\r
+{\r
+\r
+}\r
+\r
+static VOID CALLBACK\r
+MainWndResize(PVOID Context,\r
+              WORD cx,\r
+              WORD cy)\r
+{\r
+    RECT rcClient = {0};\r
+    RECT rcStatus = {0};\r
+    HDWP dwp;\r
+    PMAIN_WND_INFO Info = (PMAIN_WND_INFO)Context;\r
+\r
+    /* Calculate the MDI client rectangle */\r
+    rcClient.right = cx;\r
+    rcClient.bottom = cy;\r
+\r
+    if (Info->hStatus != NULL)\r
+    {\r
+        GetWindowRect(Info->hStatus,\r
+                      &rcStatus);\r
+        rcClient.bottom -= (rcStatus.bottom - rcStatus.top);\r
+    }\r
+\r
+\r
+    dwp = BeginDeferWindowPos(2);\r
+    if (dwp != NULL)\r
+    {\r
+        /* Update the MDI client */\r
+        if (Info->hMdiClient != NULL)\r
+        {\r
+            dwp = DeferWindowPos(dwp,\r
+                                 Info->hMdiClient,\r
+                                 NULL,\r
+                                 rcClient.left,\r
+                                 rcClient.top,\r
+                                 rcClient.right - rcClient.left,\r
+                                 rcClient.bottom - rcClient.top,\r
+                                 SWP_NOZORDER);\r
+            if (dwp == NULL)\r
+                return;\r
+        }\r
+\r
+        /* Update the status bar */\r
+        if (Info->hStatus != NULL)\r
+        {\r
+            dwp = DeferWindowPos(dwp,\r
+                                 Info->hStatus,\r
+                                 NULL,\r
+                                 0,\r
+                                 cy - (rcStatus.bottom - rcStatus.top),\r
+                                 cx,\r
+                                 rcStatus.bottom - rcStatus.top,\r
+                                 SWP_NOZORDER);\r
+            if (dwp == NULL)\r
+                return;\r
+        }\r
+\r
+        EndDeferWindowPos(dwp);\r
+    }\r
+}\r
+\r
+static VOID\r
+InitMainWnd(PMAIN_WND_INFO Info)\r
+{\r
+    CLIENTCREATESTRUCT ccs;\r
+    INT statwidths[] = {110, -1};\r
+\r
+    /* FIXME - create controls and initialize the application */\r
+\r
+    /* create the status bar */\r
+    Info->hStatus = CreateWindowEx(0,\r
+                                   STATUSCLASSNAME,\r
+                                   NULL,\r
+                                   WS_VISIBLE | WS_CHILD | WS_CLIPSIBLINGS | CCS_NOPARENTALIGN | SBARS_SIZEGRIP,\r
+                                   0,\r
+                                   0,\r
+                                   0,\r
+                                   0,\r
+                                   Info->hSelf,\r
+                                   (HMENU)IDC_STATUSBAR,\r
+                                   hInstance,\r
+                                   NULL);\r
+\r
+    if (Info->hStatus != NULL)\r
+        SendMessage(Info->hStatus,\r
+                    SB_SETPARTS,\r
+                    sizeof(statwidths)/sizeof(int),\r
+                    (LPARAM)statwidths);\r
+\r
+    /* create the MDI client window */\r
+    ccs.hWindowMenu = GetSubMenu(GetMenu(Info->hSelf),\r
+                                 ID_MDI_WINDOWMENU);\r
+    ccs.idFirstChild = ID_MDI_FIRSTCHILD;\r
+    Info->hMdiClient = CreateWindowEx(WS_EX_ACCEPTFILES | WS_EX_CLIENTEDGE,\r
+                                      TEXT("MDICLIENT"),\r
+                                      NULL,\r
+                                      WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VSCROLL | WS_HSCROLL,\r
+                                      0,\r
+                                      0,\r
+                                      0,\r
+                                      0,\r
+                                      Info->hSelf,\r
+                                      NULL,\r
+                                      hInstance,\r
+                                      &ccs);\r
+\r
+    CreateToolbars(Info);\r
+\r
+    /* initialize file open/save structure */\r
+    FileInitialize(Info->hSelf);\r
+}\r
+\r
+static VOID\r
+MainWndCommand(PMAIN_WND_INFO Info,\r
+               WORD CmdId,\r
+               HWND hControl)\r
+{\r
+    //static TCHAR szFileName[MAX_PATH];\r
+    //static TCHAR szImageName[MAX_PATH];\r
+\r
+    UNREFERENCED_PARAMETER(hControl);\r
+\r
+    switch (CmdId)\r
+    {\r
+        case ID_NEW:\r
+        {\r
+            OPEN_EDIT_INFO OpenInfo;\r
+            INT Ret;\r
+\r
+            OpenInfo.CreateNew = TRUE;\r
+\r
+            LoadAndFormatString(hInstance,\r
+                                IDS_DEFAULT_NAME,\r
+                                &OpenInfo.lpImageName,\r
+                                ++Info->ImagesCreated);\r
+\r
+            Ret = DialogBox(hInstance,\r
+                            MAKEINTRESOURCE(IDD_NEWDOCSEL),\r
+                            Info->hSelf,\r
+                            NewDocSelDlgProc);\r
+            if (Ret != -1)\r
+            {\r
+                OpenInfo.DocType = Ret;\r
+\r
+                CreateEditWindow(Info,\r
+                                 &OpenInfo);\r
+            }\r
+\r
+        }\r
+        break;\r
+\r
+        case ID_BOLD:\r
+            MessageBox(NULL, _T("Bingo"), NULL, 0);\r
+        break;\r
+\r
+        case ID_OPEN:\r
+        {\r
+/*            OPEN_EDIT_INFO OpenInfo;\r
+\r
+            if (DoOpenFile(Info->hSelf,\r
+                           szFileName,   / * full file path * /\r
+                           szImageName)) / * file name * /\r
+            {\r
+                OpenInfo.CreateNew = FALSE;\r
+\r
+                OpenInfo.Open.lpImagePath = szFileName;\r
+                OpenInfo.lpImageName = szImageName;\r
+\r
+                CreateEditWindow(Info,\r
+                                 &OpenInfo);\r
+            }\r
+*/\r
+        }\r
+        break;\r
+\r
+        case ID_EXIT:\r
+            SendMessage(Info->hSelf,\r
+                        WM_CLOSE,\r
+                        0,\r
+                        0);\r
+            break;\r
+\r
+        /* Window Menu */\r
+        case ID_WINDOW_TILE_HORZ:\r
+            SendMessage(Info->hMdiClient,\r
+                        WM_MDITILE,\r
+                        MDITILE_HORIZONTAL,\r
+                        0);\r
+            break;\r
+\r
+        case ID_WINDOW_TILE_VERT:\r
+            SendMessage(Info->hMdiClient,\r
+                        WM_MDITILE,\r
+                        MDITILE_VERTICAL,\r
+                        0);\r
+            break;\r
+\r
+        case ID_WINDOW_CASCADE:\r
+            SendMessage(Info->hMdiClient,\r
+                        WM_MDICASCADE,\r
+                        0,\r
+                        0);\r
+            break;\r
+\r
+        case ID_WINDOW_ARRANGE:\r
+            SendMessage(Info->hMdiClient,\r
+                        WM_MDIICONARRANGE,\r
+                        0,\r
+                        0);\r
+            break;\r
+\r
+        case ID_WINDOW_NEXT:\r
+            SendMessage(Info->hMdiClient,\r
+                        WM_MDINEXT,\r
+                        0,\r
+                        0);\r
+            break;\r
+\r
+        /* Help Menu */\r
+        case ID_ABOUT:\r
+            DialogBox(hInstance,\r
+                      MAKEINTRESOURCE(IDD_ABOUTBOX),\r
+                      Info->hSelf,\r
+                      AboutDialogProc);\r
+            break;\r
+    }\r
+}\r
+\r
+static VOID\r
+DestroyMainWnd(PMAIN_WND_INFO Info)\r
+{\r
+    /* FIXME - cleanup allocated resources */\r
+}\r
+\r
+\r
+static VOID\r
+UpdateMainStatusBar(PMAIN_WND_INFO Info)\r
+{\r
+    if (Info->hStatus != NULL)\r
+    {\r
+        SendMessage(Info->hStatus,\r
+                    SB_SIMPLE,\r
+                    (WPARAM)Info->InMenuLoop,\r
+                    0);\r
+    }\r
+}\r
+\r
+static BOOL\r
+MainWndMenuHint(PMAIN_WND_INFO Info,\r
+                WORD CmdId,\r
+                const MENU_HINT *HintArray,\r
+                DWORD HintsCount,\r
+                UINT DefHintId)\r
+{\r
+    BOOL Found = FALSE;\r
+    const MENU_HINT *LastHint;\r
+    UINT HintId = DefHintId;\r
+\r
+    LastHint = HintArray + HintsCount;\r
+    while (HintArray != LastHint)\r
+    {\r
+        if (HintArray->CmdId == CmdId)\r
+        {\r
+            HintId = HintArray->HintId;\r
+            Found = TRUE;\r
+            break;\r
+        }\r
+        HintArray++;\r
+    }\r
+\r
+    StatusBarLoadString(Info->hStatus,\r
+                        SB_SIMPLEID,\r
+                        hInstance,\r
+                        HintId);\r
+\r
+    return Found;\r
+}\r
+\r
+static LRESULT CALLBACK\r
+MainWndProc(HWND hwnd,\r
+            UINT uMsg,\r
+            WPARAM wParam,\r
+            LPARAM lParam)\r
+{\r
+    PMAIN_WND_INFO Info;\r
+    LRESULT Ret = 0;\r
+    static RECT wndOldPos;\r
+\r
+    /* Get the window context */\r
+    Info = (PMAIN_WND_INFO)GetWindowLongPtr(hwnd,\r
+                                            GWLP_USERDATA);\r
+    if (Info == NULL && uMsg != WM_CREATE)\r
+    {\r
+        goto HandleDefaultMessage;\r
+    }\r
+\r
+    switch (uMsg)\r
+    {\r
+        case WM_CREATE:\r
+        {\r
+            Info = (PMAIN_WND_INFO)(((LPCREATESTRUCT)lParam)->lpCreateParams);\r
+\r
+            /* Initialize the main window context */\r
+            Info->hSelf = hwnd;\r
+\r
+            SetWindowLongPtr(hwnd,\r
+                             GWLP_USERDATA,\r
+                             (LONG_PTR)Info);\r
+\r
+            InitMainWnd(Info);\r
+\r
+            /* Show the window */\r
+            ShowWindow(hwnd,\r
+                       Info->nCmdShow);\r
+            /* get the windows position */\r
+            GetWindowRect(hwnd,\r
+                          &wndOldPos);\r
+\r
+            break;\r
+        }\r
+\r
+        case WM_SIZE:\r
+        {\r
+            MainWndResize(Info,\r
+                          LOWORD(lParam),\r
+                          HIWORD(lParam));\r
+            /* NOTE - do *not* forward this message to DefFrameProc! Otherwise the MDI client\r
+                      will attempt to resize itself */\r
+\r
+            break;\r
+        }\r
+\r
+        case WM_MOVE:\r
+        {\r
+\r
+        }\r
+        break;\r
+\r
+        case WM_NOTIFY:\r
+        {\r
+\r
+                /* FIXME - handle other notifications */\r
+            break;\r
+        }\r
+\r
+        case WM_COMMAND:\r
+        {\r
+            MainWndCommand(Info,\r
+                           LOWORD(wParam),\r
+                           (HWND)lParam);\r
+            goto HandleDefaultMessage;\r
+        }\r
+\r
+        case WM_MENUSELECT:\r
+        {\r
+            if (Info->hStatus != NULL)\r
+            {\r
+                if (!MainWndMenuHint(Info,\r
+                                     LOWORD(wParam),\r
+                                     MainMenuHintTable,\r
+                                     sizeof(MainMenuHintTable) / sizeof(MainMenuHintTable[0]),\r
+                                     IDS_HINT_BLANK))\r
+                {\r
+                    MainWndMenuHint(Info,\r
+                                    LOWORD(wParam),\r
+                                    SystemMenuHintTable,\r
+                                    sizeof(SystemMenuHintTable) / sizeof(SystemMenuHintTable[0]),\r
+                                    IDS_HINT_BLANK);\r
+                }\r
+            }\r
+            break;\r
+        }\r
+\r
+        case WM_ENTERMENULOOP:\r
+        {\r
+            Info->InMenuLoop = TRUE;\r
+            UpdateMainStatusBar(Info);\r
+            break;\r
+        }\r
+\r
+        case WM_EXITMENULOOP:\r
+        {\r
+            Info->InMenuLoop = FALSE;\r
+            UpdateMainStatusBar(Info);\r
+            break;\r
+        }\r
+\r
+        case WM_CLOSE:\r
+        {\r
+            DestroyWindow(hwnd);\r
+            break;\r
+        }\r
+\r
+        case WM_ENABLE:\r
+        {\r
+\r
+            goto HandleDefaultMessage;\r
+        }\r
+\r
+        case WM_NCACTIVATE:\r
+        {\r
+\r
+            goto HandleDefaultMessage;\r
+        }\r
+\r
+        case WM_ACTIVATEAPP:\r
+        {\r
+\r
+            goto HandleDefaultMessage;\r
+        }\r
+\r
+        case WM_DESTROY:\r
+        {\r
+            DestroyMainWnd(Info);\r
+\r
+            /* FIXME: set the windows position in registry*/\r
+            //wndOldPos\r
+\r
+            HeapFree(ProcessHeap,\r
+                     0,\r
+                     Info);\r
+            SetWindowLongPtr(hwnd,\r
+                             GWLP_USERDATA,\r
+                             0);\r
+\r
+            /* Break the message queue loop */\r
+            PostQuitMessage(0);\r
+            break;\r
+        }\r
+\r
+        default:\r
+        {\r
+HandleDefaultMessage:\r
+            if (Info != NULL && Info->hMdiClient != NULL)\r
+            {\r
+                Ret = DefFrameProc(hwnd,\r
+                                   Info->hMdiClient,\r
+                                   uMsg,\r
+                                   wParam,\r
+                                   lParam);\r
+            }\r
+            else\r
+            {\r
+                Ret = DefWindowProc(hwnd,\r
+                                    uMsg,\r
+                                    wParam,\r
+                                    lParam);\r
+            }\r
+            break;\r
+        }\r
+    }\r
+\r
+    return Ret;\r
+}\r
+\r
+MDI_EDITOR_TYPE\r
+MainWndGetCurrentEditor(PMAIN_WND_INFO MainWnd,\r
+                        PVOID *Info)\r
+{\r
+    MDI_EDITOR_TYPE EditorType;\r
+\r
+    if (MainWnd->ActiveEditor != NULL)\r
+    {\r
+        EditorType = *((PMDI_EDITOR_TYPE)MainWnd->ActiveEditor);\r
+        *Info = MainWnd->ActiveEditor;\r
+    }\r
+    else\r
+    {\r
+        EditorType = metUnknown;\r
+        *Info = NULL;\r
+    }\r
+\r
+    return EditorType;\r
+}\r
+\r
+VOID\r
+MainWndSwitchEditorContext(PMAIN_WND_INFO Info,\r
+                           HWND hDeactivate,\r
+                           HWND hActivate)\r
+{\r
+    PMDI_EDITOR_TYPE EditorType;\r
+\r
+    /* FIXME - optimize light weight switching\r
+               when switching from and to an editor of same type */\r
+\r
+    if (hDeactivate != NULL)\r
+    {\r
+        EditorType = (PMDI_EDITOR_TYPE)GetWindowLongPtr(hDeactivate,\r
+                                                        GWLP_USERDATA);\r
+        if (EditorType != NULL)\r
+        {\r
+            switch (*EditorType)\r
+            {\r
+                case metImageEditor:\r
+                    SetEditorEnvironment((PEDIT_WND_INFO)EditorType,\r
+                                              FALSE);\r
+                    break;\r
+\r
+                default:\r
+                    break;\r
+            }\r
+\r
+            Info->ActiveEditor = NULL;\r
+        }\r
+    }\r
+\r
+    if (hActivate != NULL)\r
+    {\r
+        EditorType = (PMDI_EDITOR_TYPE)GetWindowLongPtr(hActivate,\r
+                                                        GWLP_USERDATA);\r
+        if (EditorType != NULL)\r
+        {\r
+            Info->ActiveEditor = EditorType;\r
+\r
+            switch (*EditorType)\r
+            {\r
+                case metImageEditor:\r
+                    SetEditorEnvironment((PEDIT_WND_INFO)EditorType,\r
+                                              TRUE);\r
+                    break;\r
+\r
+                default:\r
+                    break;\r
+            }\r
+        }\r
+    }\r
+}\r
+\r
+HWND\r
+CreateMainWindow(LPCTSTR lpCaption,\r
+                 int nCmdShow)\r
+{\r
+    PMAIN_WND_INFO Info;\r
+    HWND hMainWnd = NULL;\r
+\r
+    Info = HeapAlloc(ProcessHeap,\r
+                     0,\r
+                     sizeof(MAIN_WND_INFO));\r
+    if (Info != NULL)\r
+    {\r
+        ZeroMemory(Info,\r
+                   sizeof(MAIN_WND_INFO));\r
+        Info->nCmdShow = nCmdShow;\r
+\r
+        /* FIXME - load the window position from the registry */\r
+\r
+        hMainWnd = CreateWindowEx(WS_EX_WINDOWEDGE,\r
+                                  szMainWndClass,\r
+                                  lpCaption,\r
+                                  WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,\r
+                                  CW_USEDEFAULT,\r
+                                  CW_USEDEFAULT,\r
+                                  CW_USEDEFAULT,\r
+                                  CW_USEDEFAULT,\r
+                                  NULL,\r
+                                  NULL,\r
+                                  hInstance,\r
+                                  Info);\r
+        if (hMainWnd == NULL)\r
+        {\r
+            HeapFree(ProcessHeap,\r
+                     0,\r
+                     Info);\r
+        }\r
+    }\r
+\r
+    return hMainWnd;\r
+}\r
+\r
+BOOL\r
+MainWndTranslateMDISysAccel(HWND hwnd,\r
+                            LPMSG lpMsg)\r
+{\r
+    PMAIN_WND_INFO Info;\r
+\r
+    /* Get the window context */\r
+    Info = (PMAIN_WND_INFO)GetWindowLongPtr(hwnd,\r
+                                            GWLP_USERDATA);\r
+    if (Info != NULL && Info->hMdiClient != NULL)\r
+    {\r
+        return TranslateMDISysAccel(Info->hMdiClient,\r
+                                    lpMsg);\r
+    }\r
+\r
+    return FALSE;\r
+}\r
+\r
+BOOL\r
+InitMainWindowImpl(VOID)\r
+{\r
+    WNDCLASSEX wc = {0};\r
+\r
+    wc.cbSize = sizeof(WNDCLASSEX);\r
+    wc.lpfnWndProc = MainWndProc;\r
+    wc.hInstance = hInstance;\r
+    wc.hIcon = LoadIcon(hInstance,\r
+                        MAKEINTRESOURCE(IDI_ICON));\r
+    wc.hCursor = LoadCursor(NULL,\r
+                            IDC_ARROW);\r
+    wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);\r
+    wc.lpszMenuName = MAKEINTRESOURCE(IDR_MAINMENU);\r
+    wc.lpszClassName = szMainWndClass;\r
+    wc.hIconSm = (HICON)LoadImage(hInstance,\r
+                                  MAKEINTRESOURCE(IDI_ICON),\r
+                                  IMAGE_ICON,\r
+                                  16,\r
+                                  16,\r
+                                  LR_SHARED);\r
+\r
+    return RegisterClassEx(&wc) != (ATOM)0;\r
+}\r
+\r
+VOID\r
+UninitMainWindowImpl(VOID)\r
+{\r
+    UnregisterClass(szMainWndClass,\r
+                    hInstance);\r
+}\r
diff --git a/reactos/base/applications/wordpad/manifest.xml b/reactos/base/applications/wordpad/manifest.xml
new file mode 100644 (file)
index 0000000..8807ca4
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\r
+<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">\r
+ <assemblyIdentity\r
+  version="1.0.0.0"\r
+  processorArchitecture="X86"\r
+  name="ReactOS.VMware.SVGA.Installer"\r
+  type="win32"\r
+ />\r
+ <description>ReactOS VMware(r) SVGA driver Installer</description>\r
+ <dependency>\r
+  <dependentAssembly>\r
+   <assemblyIdentity\r
+    type="win32"\r
+    name="Microsoft.Windows.Common-Controls"\r
+    version="6.0.0.0"\r
+    processorArchitecture="X86"\r
+    publicKeyToken="6595b64144ccf1df"\r
+    language="*"\r
+   />\r
+  </dependentAssembly>\r
+ </dependency>\r
+</assembly>\r
+\r
+<!-- EOF -->\r
diff --git a/reactos/base/applications/wordpad/misc.c b/reactos/base/applications/wordpad/misc.c
new file mode 100644 (file)
index 0000000..314ebf3
--- /dev/null
@@ -0,0 +1,204 @@
+#include "precomp.h"\r
+\r
+static INT\r
+LengthOfStrResource(IN HINSTANCE hInst,\r
+                    IN UINT uID)\r
+{\r
+    HRSRC hrSrc;\r
+    HGLOBAL hRes;\r
+    LPWSTR lpName, lpStr;\r
+\r
+    if (hInst == NULL)\r
+    {\r
+        return -1;\r
+    }\r
+\r
+    /* There are always blocks of 16 strings */\r
+    lpName = (LPWSTR)MAKEINTRESOURCE((uID >> 4) + 1);\r
+\r
+    /* Find the string table block */\r
+    if ((hrSrc = FindResourceW(hInst, lpName, (LPWSTR)RT_STRING)) &&\r
+        (hRes = LoadResource(hInst, hrSrc)) &&\r
+        (lpStr = LockResource(hRes)))\r
+    {\r
+        UINT x;\r
+\r
+        /* Find the string we're looking for */\r
+        uID &= 0xF; /* position in the block, same as % 16 */\r
+        for (x = 0; x < uID; x++)\r
+        {\r
+            lpStr += (*lpStr) + 1;\r
+        }\r
+\r
+        /* Found the string */\r
+        return (int)(*lpStr);\r
+    }\r
+    return -1;\r
+}\r
+\r
+INT\r
+AllocAndLoadString(OUT LPTSTR *lpTarget,\r
+                   IN HINSTANCE hInst,\r
+                   IN UINT uID)\r
+{\r
+    INT ln;\r
+\r
+    ln = LengthOfStrResource(hInst,\r
+                             uID);\r
+    if (ln++ > 0)\r
+    {\r
+        (*lpTarget) = (LPWSTR)LocalAlloc(LMEM_FIXED,\r
+                                         ln * sizeof(TCHAR));\r
+        if ((*lpTarget) != NULL)\r
+        {\r
+            INT Ret;\r
+            if (!(Ret = LoadString(hInst, uID, *lpTarget, ln)))\r
+            {\r
+                LocalFree((HLOCAL)(*lpTarget));\r
+            }\r
+            return Ret;\r
+        }\r
+    }\r
+    return 0;\r
+}\r
+\r
+DWORD\r
+LoadAndFormatString(IN HINSTANCE hInstance,\r
+                    IN UINT uID,\r
+                    OUT LPTSTR *lpTarget,\r
+                    ...)\r
+{\r
+    DWORD Ret = 0;\r
+    LPTSTR lpFormat;\r
+    va_list lArgs;\r
+\r
+    if (AllocAndLoadString(&lpFormat,\r
+                           hInstance,\r
+                           uID) > 0)\r
+    {\r
+        va_start(lArgs, lpTarget);\r
+        /* let's use FormatMessage to format it because it has the ability to allocate\r
+           memory automatically */\r
+        Ret = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,\r
+                            lpFormat,\r
+                            0,\r
+                            0,\r
+                            (LPTSTR)lpTarget,\r
+                            0,\r
+                            &lArgs);\r
+        va_end(lArgs);\r
+\r
+        LocalFree((HLOCAL)lpFormat);\r
+    }\r
+\r
+    return Ret;\r
+}\r
+\r
+BOOL\r
+StatusBarLoadAndFormatString(IN HWND hStatusBar,\r
+                             IN INT PartId,\r
+                             IN HINSTANCE hInstance,\r
+                             IN UINT uID,\r
+                             ...)\r
+{\r
+    BOOL Ret = FALSE;\r
+    LPTSTR lpFormat, lpStr;\r
+    va_list lArgs;\r
+\r
+    if (AllocAndLoadString(&lpFormat,\r
+                           hInstance,\r
+                           uID) > 0)\r
+    {\r
+        va_start(lArgs, uID);\r
+        /* let's use FormatMessage to format it because it has the ability to allocate\r
+           memory automatically */\r
+        Ret = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING,\r
+                            lpFormat,\r
+                            0,\r
+                            0,\r
+                            (LPTSTR)&lpStr,\r
+                            0,\r
+                            &lArgs);\r
+        va_end(lArgs);\r
+\r
+        if (lpStr != NULL)\r
+        {\r
+            Ret = (BOOL)SendMessage(hStatusBar,\r
+                                    SB_SETTEXT,\r
+                                    (WPARAM)PartId,\r
+                                    (LPARAM)lpStr);\r
+            LocalFree((HLOCAL)lpStr);\r
+        }\r
+\r
+        LocalFree((HLOCAL)lpFormat);\r
+    }\r
+\r
+    return Ret;\r
+}\r
+\r
+BOOL\r
+StatusBarLoadString(IN HWND hStatusBar,\r
+                    IN INT PartId,\r
+                    IN HINSTANCE hInstance,\r
+                    IN UINT uID)\r
+{\r
+    BOOL Ret = FALSE;\r
+    LPTSTR lpStr;\r
+\r
+    if (AllocAndLoadString(&lpStr,\r
+                           hInstance,\r
+                           uID) > 0)\r
+    {\r
+        Ret = (BOOL)SendMessage(hStatusBar,\r
+                                SB_SETTEXT,\r
+                                (WPARAM)PartId,\r
+                                (LPARAM)lpStr);\r
+        LocalFree((HLOCAL)lpStr);\r
+    }\r
+\r
+    return Ret;\r
+}\r
+\r
+\r
+INT\r
+GetTextFromEdit(OUT LPTSTR lpString,\r
+                IN HWND hDlg,\r
+                IN UINT Res)\r
+{\r
+    INT len = GetWindowTextLength(GetDlgItem(hDlg, Res));\r
+    if(len > 0)\r
+    {\r
+        GetDlgItemText(hDlg,\r
+                       Res,\r
+                       lpString,\r
+                       len + 1);\r
+    }\r
+    else\r
+        lpString = NULL;\r
+\r
+    return len;\r
+}\r
+\r
+\r
+VOID GetError(DWORD err)\r
+{\r
+    LPVOID lpMsgBuf;\r
+\r
+    if (err == 0)\r
+        err = GetLastError();\r
+\r
+    FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |\r
+                  FORMAT_MESSAGE_FROM_SYSTEM |\r
+                  FORMAT_MESSAGE_IGNORE_INSERTS,\r
+                  NULL,\r
+                  err,\r
+                  MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),\r
+                  (LPTSTR) &lpMsgBuf,\r
+                  0,\r
+                  NULL );\r
+\r
+    MessageBox(NULL, lpMsgBuf, _T("Error!"), MB_OK | MB_ICONERROR);\r
+\r
+    LocalFree(lpMsgBuf);\r
+}\r
+\r
diff --git a/reactos/base/applications/wordpad/opensave.c b/reactos/base/applications/wordpad/opensave.c
new file mode 100644 (file)
index 0000000..9578f01
--- /dev/null
@@ -0,0 +1,87 @@
+#include "precomp.h"\r
+\r
+static OPENFILENAME ofn;\r
+\r
+/*\r
+ * Initialize file open / save structure\r
+ */\r
+VOID FileInitialize(HWND hwnd)\r
+{\r
+    ZeroMemory(&ofn, sizeof(ofn));\r
+    ofn.lStructSize   = sizeof(OPENFILENAME);\r
+    ofn.hwndOwner     = hwnd;\r
+    ofn.nMaxFile      = MAX_PATH;\r
+    ofn.nMaxFileTitle = MAX_PATH;\r
+    ofn.lpstrDefExt   = _T("bmp");\r
+}\r
+\r
+\r
+static BOOL\r
+DoWriteFile(LPCTSTR pszFileName)\r
+{\r
+    return TRUE;\r
+}\r
+\r
+\r
+BOOL\r
+DoOpenFile(HWND hwnd,\r
+           LPTSTR szFileName,\r
+           LPTSTR szTitleName)\r
+{\r
+    DWORD err;\r
+       /*static TCHAR Filter[] = _T("All image files (*.gif,*.bmp,*.jpg,*.jpeg,*.tif,*.png)\0*.gif,*.bmp,*.jpg,*.jpeg,*.tif,*.png\0") \\r
+                            _T("All files (*.*)\0*.*\0") \\r
+                            _T("Graphics Interchange format (*gif)\0*.gif\0") \\r
+                            _T("Windows Bitmap (*bmp)\0*.bmp\0") \\r
+                            _T("JPEG File Interchange Format (*jpg,*.jpeg)\0*.jpg,*.jpeg\0") \\r
+                            _T("TAG Image File Format (*tif)\0*.tif\0") \\r
+                            _T("Portable Network Graphics (*png)\0*.png\0\0");*/\r
+\r
+    static TCHAR Filter[] = _T("Windows Bitmap (*.bmp)\0*.bmp\0");\r
+\r
+       ofn.lpstrFilter = Filter;\r
+       ofn.lpstrFile = szFileName;\r
+       ofn.lpstrFileTitle = szTitleName;\r
+       ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;\r
+\r
+       if (GetOpenFileName(&ofn))\r
+       {\r
+           return TRUE;\r
+       }\r
+\r
+       err = CommDlgExtendedError();\r
+\r
+       if (err != CDERR_GENERALCODES)\r
+        MessageBox(NULL, _T("Open file failed"), NULL, 0);\r
+\r
+    return FALSE;\r
+}\r
+\r
+\r
+\r
+BOOL\r
+DoSaveFile(HWND hwnd)\r
+{\r
+       TCHAR szFileName[MAX_PATH] = _T("");\r
+       static TCHAR Filter[] = _T("Graphics Interchange format (*gif)\0*.gif\0") \\r
+                            _T("Windows Bitmap (*bmp)\0*.bmp\0") \\r
+                            _T("JPEG File Interchange Format (*jpg,*.jpeg)\0*.jpg,*.jpeg\0") \\r
+                            _T("TAG Image File Format (*tif)\0*.tif\0") \\r
+                            _T("Portable Network Graphics (*png)\0*.png\0\0");\r
+\r
+       ofn.lpstrFilter = Filter;\r
+       ofn.lpstrFile = szFileName;\r
+       ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;\r
+\r
+       if (GetSaveFileName(&ofn))\r
+       {\r
+        if (DoWriteFile(szFileName))\r
+            return TRUE;\r
+       }\r
+\r
+       if (CommDlgExtendedError() != CDERR_GENERALCODES)\r
+        MessageBox(NULL, _T("Save to file failed"), NULL, 0);\r
+\r
+    return FALSE;\r
+}\r
+\r
diff --git a/reactos/base/applications/wordpad/precomp.h b/reactos/base/applications/wordpad/precomp.h
new file mode 100644 (file)
index 0000000..140e3d7
--- /dev/null
@@ -0,0 +1,160 @@
+#ifndef __WORDPAD_PRECOMP_H\r
+#define __WORDPAD_PRECOMP_H\r
+\r
+//#define WIN32_LEAN_AND_MEAN\r
+#include <windows.h>\r
+#include <windowsx.h> /* GET_X/Y_LPARAM */\r
+#include <stdio.h>\r
+#include <tchar.h>\r
+#include <richedit.h>\r
+#include <commctrl.h>\r
+#include "resource.h"\r
+\r
+/* FIXME - add to headers !!! */\r
+#ifndef SB_SIMPLEID\r
+#define SB_SIMPLEID 0xFF\r
+#endif\r
+\r
+#define MAX_KEY_LENGTH 256\r
+\r
+#define DOC_TYPE_RICH_TEXT      0\r
+#define DOC_TYPE_UNICODE_TEXT   1\r
+#define DOC_TYPE_TEXT           2\r
+\r
+#ifdef _MSC_VER\r
+#pragma warning(disable : 4100)\r
+#endif\r
+\r
+/* generic definitions and forward declarations */\r
+struct _MAIN_WND_INFO;\r
+struct _EDIT_WND_INFO;\r
+\r
+typedef enum _MDI_EDITOR_TYPE {\r
+    metUnknown = 0,\r
+    metImageEditor,\r
+} MDI_EDITOR_TYPE, *PMDI_EDITOR_TYPE;\r
+\r
+\r
+/* wordpad.c */\r
+extern HINSTANCE hInstance;\r
+extern HANDLE ProcessHeap;\r
+\r
+\r
+/* editwnd.c */\r
+typedef struct _OPEN_EDIT_INFO\r
+{\r
+    BOOL CreateNew;\r
+    union\r
+    {\r
+        UINT DocType;       /* new */\r
+        LPTSTR lpImagePath; /* open */\r
+    };\r
+    LPTSTR lpImageName;\r
+\r
+} OPEN_EDIT_INFO, *POPEN_EDIT_INFO;\r
+\r
+typedef struct _EDIT_WND_INFO\r
+{\r
+    MDI_EDITOR_TYPE MdiEditorType; /* Must be first member! */\r
+\r
+    HWND hSelf;\r
+    HWND hEdit;\r
+    struct _MAIN_WND_INFO *MainWnd;\r
+    struct _EDIT_WND_INFO *Next;\r
+    POINT ScrollPos;\r
+    USHORT Zoom;\r
+\r
+    POPEN_EDIT_INFO OpenInfo; /* Only valid during initialization */\r
+\r
+    LONG Width;\r
+    LONG Height;\r
+\r
+} EDIT_WND_INFO, *PEDIT_WND_INFO;\r
+\r
+BOOL InitEditWindowImpl(VOID);\r
+VOID UninitEditWindowImpl(VOID);\r
+BOOL CreateEditWindow(struct _MAIN_WND_INFO *MainWnd,\r
+                      POPEN_EDIT_INFO OpenInfo);\r
+VOID SetEditorEnvironment(PEDIT_WND_INFO Info,\r
+                          BOOL Setup);\r
+\r
+\r
+/* mainwnd.c */\r
+typedef struct _MENU_HINT\r
+{\r
+    WORD CmdId;\r
+    UINT HintId;\r
+} MENU_HINT, *PMENU_HINT;\r
+\r
+typedef struct _MAIN_WND_INFO\r
+{\r
+    HWND hSelf;\r
+    HWND hMdiClient;\r
+    HWND hStatus;\r
+    int nCmdShow;\r
+\r
+    /* Editors */\r
+    PEDIT_WND_INFO ImageEditors;\r
+    UINT ImagesCreated;\r
+    PVOID ActiveEditor;\r
+\r
+    /* status flags */\r
+    BOOL InMenuLoop : 1;\r
+} MAIN_WND_INFO, *PMAIN_WND_INFO;\r
+\r
+BOOL InitMainWindowImpl(VOID);\r
+VOID UninitMainWindowImpl(VOID);\r
+HWND CreateMainWindow(LPCTSTR lpCaption,\r
+                      int nCmdShow);\r
+BOOL MainWndTranslateMDISysAccel(HWND hwnd,\r
+                                 LPMSG lpMsg);\r
+VOID MainWndSwitchEditorContext(PMAIN_WND_INFO Info,\r
+                                HWND hDeactivate,\r
+                                HWND hActivate);\r
+MDI_EDITOR_TYPE MainWndGetCurrentEditor(PMAIN_WND_INFO MainWnd,\r
+                                        PVOID *Info);\r
+\r
+\r
+\r
+/* misc.c */\r
+INT AllocAndLoadString(OUT LPTSTR *lpTarget,\r
+                       IN HINSTANCE hInst,\r
+                       IN UINT uID);\r
+\r
+DWORD LoadAndFormatString(IN HINSTANCE hInstance,\r
+                          IN UINT uID,\r
+                          OUT LPTSTR *lpTarget,\r
+                          ...);\r
+\r
+BOOL StatusBarLoadAndFormatString(IN HWND hStatusBar,\r
+                                  IN INT PartId,\r
+                                  IN HINSTANCE hInstance,\r
+                                  IN UINT uID,\r
+                                  ...);\r
+\r
+BOOL StatusBarLoadString(IN HWND hStatusBar,\r
+                         IN INT PartId,\r
+                         IN HINSTANCE hInstance,\r
+                         IN UINT uID);\r
+\r
+INT GetTextFromEdit(OUT LPTSTR lpString,\r
+                    IN HWND hDlg,\r
+                    IN UINT Res);\r
+\r
+VOID GetError(DWORD err);\r
+\r
+\r
+/* opensave.c */\r
+VOID FileInitialize(HWND hwnd);\r
+BOOL DoOpenFile(HWND hwnd, LPTSTR lpFileName, LPTSTR lpName);\r
+BOOL DoSaveFile(HWND hwnd);\r
+\r
+/* about.c */\r
+INT_PTR CALLBACK\r
+AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
+\r
+INT_PTR CALLBACK\r
+NewDocSelDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
+\r
+\r
+#endif /* __WORDPAD_PRECOMP_H */\r
diff --git a/reactos/base/applications/wordpad/res/toolbar.bmp b/reactos/base/applications/wordpad/res/toolbar.bmp
new file mode 100644 (file)
index 0000000..2ae6462
Binary files /dev/null and b/reactos/base/applications/wordpad/res/toolbar.bmp differ
diff --git a/reactos/base/applications/wordpad/res/wordpad.ico b/reactos/base/applications/wordpad/res/wordpad.ico
new file mode 100644 (file)
index 0000000..dda4d93
Binary files /dev/null and b/reactos/base/applications/wordpad/res/wordpad.ico differ
diff --git a/reactos/base/applications/wordpad/resource.h b/reactos/base/applications/wordpad/resource.h
new file mode 100644 (file)
index 0000000..fae0b3a
--- /dev/null
@@ -0,0 +1,102 @@
+#define IDC_STATIC -1\r
+\r
+#define IDI_ICON            50\r
+\r
+#define IDS_APPNAME         101\r
+#define IDS_VERSION         102\r
+#define IDS_LICENSE         103\r
+#define IDS_DEFAULT_NAME    104\r
+#define IDS_READY           105\r
+\r
+#define IDC_STATUSBAR       500\r
+\r
+#define ID_NEW              2000\r
+#define ID_OPEN             2001\r
+#define ID_CLOSE            2002\r
+#define ID_CLOSEALL         2003\r
+#define ID_SAVE             2004\r
+#define ID_SAVEAS           2005\r
+#define ID_PRINTPRE         2006\r
+#define ID_PRINT            2007\r
+#define ID_PAGESETUP        2008\r
+#define ID_CUT              2009\r
+#define ID_COPY             2010\r
+#define ID_PASTE            2011\r
+#define ID_UNDO             2013\r
+#define ID_REDO             2014\r
+#define ID_SELALL           2015\r
+#define ID_EXIT             2016\r
+#define ID_STATUSBAR        2019\r
+#define ID_BOLD             2030\r
+#define ID_ITALIC           2031\r
+#define ID_ULINE            2032\r
+#define ID_TXTLEFT          2033\r
+#define ID_TXTCENTER        2034\r
+#define ID_TXTRIGHT         2035\r
+#define ID_BLANK            2036\r
+\r
+#define ID_REFRESH          3000\r
+#define ID_HELP             3001\r
+#define ID_WINDOW_TILE_HORZ 3002\r
+#define ID_WINDOW_TILE_VERT 3003\r
+#define ID_WINDOW_CASCADE   3004\r
+#define ID_WINDOW_NEXT      3005\r
+#define ID_WINDOW_ARRANGE   3006\r
+\r
+\r
+/* menu hints */\r
+#define IDS_HINT_BLANK          20000\r
+#define IDS_HINT_NEW            20001\r
+#define IDS_HINT_OPEN           20002\r
+#define IDS_HINT_CLOSE          21006\r
+#define IDS_HINT_CLOSEALL       21007\r
+#define IDS_HINT_SAVE           20003\r
+#define IDS_HINT_SAVEAS         20004\r
+#define IDS_HINT_PRINT          20005\r
+#define IDS_HINT_PRINTPRE       20006\r
+#define IDS_HINT_PAGESETUP      20007\r
+#define IDS_HINT_EXIT           20008\r
+\r
+#define IDS_HINT_CASCADE        21009\r
+#define IDS_HINT_TILE_HORZ      21010\r
+#define IDS_HINT_TILE_VERT      21011\r
+#define IDS_HINT_ARRANGE        21012\r
+#define IDS_HINT_NEXT           21013\r
+\r
+/* system menu hints */\r
+#define IDS_HINT_SYS_RESTORE    21001\r
+#define IDS_HINT_SYS_MOVE       21002\r
+#define IDS_HINT_SYS_SIZE       21003\r
+#define IDS_HINT_SYS_MINIMIZE   21004\r
+#define IDS_HINT_SYS_MAXIMIZE   21005\r
+#define IDS_HINT_SYS_CLOSE      21006\r
+\r
+/* tooltips */\r
+#define IDS_TOOLTIP_NEW         6000\r
+#define IDS_TOOLTIP_OPEN        6001\r
+#define IDS_TOOLTIP_SAVE        6002\r
+#define IDS_TOOLTIP_PRINTPRE    6003\r
+#define IDS_TOOLTIP_PRINT       6004\r
+#define IDS_TOOLTIP_CUT         6005\r
+#define IDS_TOOLTIP_COPY        6006\r
+#define IDS_TOOLTIP_PASTE       6007\r
+#define IDS_TOOLTIP_UNDO        6008\r
+#define IDS_TOOLTIP_REDO        6009\r
+\r
+\r
+/* about box info */\r
+#define IDD_ABOUTBOX            200\r
+#define IDC_LICENSE_EDIT        201\r
+\r
+/* new doc type */\r
+#define IDD_NEWDOCSEL           220\r
+#define IDC_LIST                221\r
+#define IDS_DOC_TYPE_RICH_TEXT  230\r
+#define IDS_DOC_TYPE_UNICODE_TEXT 231\r
+#define IDS_DOC_TYPE_TEXT       232\r
+\r
+\r
+/* Menu */\r
+#define IDR_MAINMENU        102\r
+#define IDR_POPUP           103\r
+#define ID_ABOUT            4031\r
diff --git a/reactos/base/applications/wordpad/wordpad.c b/reactos/base/applications/wordpad/wordpad.c
new file mode 100644 (file)
index 0000000..f00e425
--- /dev/null
@@ -0,0 +1,84 @@
+#include "precomp.h"\r
+\r
+HINSTANCE hInstance;\r
+HANDLE ProcessHeap;\r
+\r
+int WINAPI\r
+WinMain(HINSTANCE hThisInstance,\r
+        HINSTANCE hPrevInstance,\r
+        LPSTR lpCmdLine,\r
+        int nCmdShow)\r
+{\r
+    LPTSTR lpAppName, lpVersion, lpTitle;\r
+    HWND hMainWnd;\r
+    MSG Msg;\r
+    BOOL bRet;\r
+    int Ret = 1;\r
+    size_t len;\r
+    INITCOMMONCONTROLSEX icex;\r
+\r
+    hInstance = hThisInstance;\r
+    ProcessHeap = GetProcessHeap();\r
+\r
+    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);\r
+    icex.dwICC = ICC_BAR_CLASSES | ICC_COOL_CLASSES;\r
+    InitCommonControlsEx(&icex);\r
+\r
+    if (!AllocAndLoadString(&lpAppName, hInstance, IDS_APPNAME) ||\r
+        !AllocAndLoadString(&lpVersion, hInstance, IDS_VERSION) )\r
+    {\r
+        MessageBox(NULL,\r
+                   _T("Error loading resource "),\r
+                   NULL,\r
+                   0);\r
+        return 1;\r
+    }\r
+\r
+    len = _tcslen(lpAppName) + _tcslen(lpVersion);\r
+    lpTitle = HeapAlloc(ProcessHeap,\r
+                        0,\r
+                        (len + 2) * sizeof(TCHAR));\r
+\r
+    wsprintf(lpTitle,\r
+             _T("%s %s"),\r
+             lpAppName,\r
+             lpVersion);\r
+\r
+    if (InitMainWindowImpl())\r
+    {\r
+        if (InitEditWindowImpl())\r
+        {\r
+            hMainWnd = CreateMainWindow(lpTitle,\r
+                                        nCmdShow);\r
+            if (hMainWnd != NULL)\r
+            {\r
+                /* pump the message queue */\r
+                while((bRet = GetMessage(&Msg,\r
+                                         NULL,\r
+                                         0,\r
+                                         0) != 0))\r
+                {\r
+                    if (bRet != (BOOL)-1)\r
+                    {\r
+                        if (!MainWndTranslateMDISysAccel(hMainWnd,\r
+                                                         &Msg))\r
+                        {\r
+                            TranslateMessage(&Msg);\r
+                            DispatchMessage(&Msg);\r
+                        }\r
+                    }\r
+                }\r
+\r
+                Ret = 0;\r
+            }\r
+\r
+            UninitEditWindowImpl();\r
+        }\r
+\r
+        UninitMainWindowImpl();\r
+    }\r
+\r
+    LocalFree((HLOCAL)lpAppName);\r
+\r
+    return Ret;\r
+}\r
diff --git a/reactos/base/applications/wordpad/wordpad.rbuild b/reactos/base/applications/wordpad/wordpad.rbuild
new file mode 100644 (file)
index 0000000..64d8d1b
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>\r
+<rbuild xmlns:xi="http://www.w3.org/2001/XInclude">\r
+       <module name="wordpad" type="win32gui" installbase="system32" installname="wordpad.exe">\r
+               <include base="wordpad">.</include>\r
+               <define name="UNICODE" />\r
+               <define name="_UNICODE" />              \r
+               <define name="__USE_W32API" />\r
+               <define name="_WIN32_IE">0x0600</define>\r
+               <define name="_WIN32_WINNT">0x0501</define>\r
+               <library>kernel32</library>\r
+               <library>user32</library>\r
+               <library>gdi32</library>\r
+               <library>comdlg32</library>\r
+               <library>advapi32</library>\r
+               <library>shell32</library>\r
+               <library>comctl32</library>\r
+               <compilationunit name="unit.c">\r
+                       <file>dialogs.c</file>\r
+                       <file>editwnd.c</file>\r
+                       <file>mainwnd.c</file>\r
+                       <file>misc.c</file>\r
+                       <file>opensave.c</file>\r
+                       <file>wordpad.c</file>\r
+               </compilationunit>\r
+         <file>wordpad.rc</file>\r
+               <pch>precomp.h</pch>\r
+       </module>\r
+</rbuild>
\ No newline at end of file
diff --git a/reactos/base/applications/wordpad/wordpad.rc b/reactos/base/applications/wordpad/wordpad.rc
new file mode 100644 (file)
index 0000000..c8ff16a
--- /dev/null
@@ -0,0 +1,26 @@
+#include <windows.h>\r
+#include <commctrl.h>\r
+#include "resource.h"\r
+\r
+#define REACTOS_STR_FILE_DESCRIPTION  "ReactOS Document Editor\0"\r
+#define REACTOS_STR_INTERNAL_NAME        "wordpad\0"\r
+#define REACTOS_STR_ORIGINAL_FILENAME "wordpad.exe\0"\r
+//#include <reactos/version.rc>\r
+\r
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US\r
+\r
+1 24 DISCARDABLE "manifest.xml"\r
+\r
+STRINGTABLE DISCARDABLE\r
+BEGIN\r
+  IDS_APPNAME   "WordPad"\r
+  IDS_VERSION   "v0.1"\r
+END\r
+\r
+IDI_ICON ICON "res/wordpad.ico"\r
+\r
+/* main toolbar icons */\r
+IDB_TEXTTOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp"\r
+\r
+#include "En.rc"\r
+/* please do not add any other languages whilst this is being developed */\r