mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 21:03:00 +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