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