--- /dev/null
+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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+<?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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+#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
--- /dev/null
+<?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
--- /dev/null
+#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