From 11c3ca9f0576c0ae6b845bcbe0431e8741a6ca9a Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Sun, 19 Feb 2006 17:13:10 +0000 Subject: [PATCH] add image editing software started in audited repo svn path=/trunk/; revision=21164 --- reactos/base/applications/applications.rbuild | 3 + reactos/base/applications/imagesoft/about.c | 44 ++ reactos/base/applications/imagesoft/en.rc | 107 +++ .../base/applications/imagesoft/imagesoft.c | 682 ++++++++++++++++++ .../base/applications/imagesoft/imagesoft.h | 21 + .../applications/imagesoft/imagesoft.rbuild | 27 + .../base/applications/imagesoft/imagesoft.rc | 16 + .../base/applications/imagesoft/opensave.c | 90 +++ .../applications/imagesoft/res/imagesoft.ico | Bin 0 -> 29926 bytes .../base/applications/imagesoft/resource.h | 70 ++ 10 files changed, 1060 insertions(+) create mode 100644 reactos/base/applications/imagesoft/about.c create mode 100644 reactos/base/applications/imagesoft/en.rc create mode 100644 reactos/base/applications/imagesoft/imagesoft.c create mode 100644 reactos/base/applications/imagesoft/imagesoft.h create mode 100644 reactos/base/applications/imagesoft/imagesoft.rbuild create mode 100644 reactos/base/applications/imagesoft/imagesoft.rc create mode 100644 reactos/base/applications/imagesoft/opensave.c create mode 100644 reactos/base/applications/imagesoft/res/imagesoft.ico create mode 100644 reactos/base/applications/imagesoft/resource.h diff --git a/reactos/base/applications/applications.rbuild b/reactos/base/applications/applications.rbuild index 9b0700758f0..632c8ce9bc2 100644 --- a/reactos/base/applications/applications.rbuild +++ b/reactos/base/applications/applications.rbuild @@ -19,6 +19,9 @@ + + + diff --git a/reactos/base/applications/imagesoft/about.c b/reactos/base/applications/imagesoft/about.c new file mode 100644 index 00000000000..9ebb069b236 --- /dev/null +++ b/reactos/base/applications/imagesoft/about.c @@ -0,0 +1,44 @@ +#include "imagesoft.h" + +extern HINSTANCE hInstance; + +#ifdef _MSC_VER +#pragma warning(disable : 4100) +#endif +BOOL 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; +} diff --git a/reactos/base/applications/imagesoft/en.rc b/reactos/base/applications/imagesoft/en.rc new file mode 100644 index 00000000000..cedd8ed533a --- /dev/null +++ b/reactos/base/applications/imagesoft/en.rc @@ -0,0 +1,107 @@ +IDR_MAINMENU MENU +BEGIN + POPUP "&File" + BEGIN + MENUITEM "New...", ID_NEW + MENUITEM "Open...", ID_OPEN + MENUITEM "Close", ID_CLOSE, GRAYED + MENUITEM "Close all", ID_CLOSEALL, GRAYED + MENUITEM SEPARATOR + MENUITEM "Save", ID_SAVE, GRAYED + MENUITEM "Save As", ID_SAVEAS, GRAYED + MENUITEM SEPARATOR + MENUITEM "Print Preview", ID_PRINTPRE, GRAYED + MENUITEM "Print...", ID_PRINT, GRAYED + MENUITEM SEPARATOR + MENUITEM "Properties...", ID_PROP, GRAYED + MENUITEM SEPARATOR + MENUITEM "E&xit", ID_EXIT + END + POPUP "Edit" + BEGIN + MENUITEM "Undo", ID_UNDO, GRAYED + MENUITEM "Redo", ID_REDO, GRAYED + MENUITEM SEPARATOR + MENUITEM "Cut", ID_CUT, GRAYED + MENUITEM "Copy", ID_COPY, GRAYED + MENUITEM "Paste", ID_PASTE, GRAYED + MENUITEM "Paste as new image",ID_PASTENEWIMAGE, GRAYED + MENUITEM SEPARATOR + MENUITEM "Select All", ID_SELALL, GRAYED + END + POPUP "Image" + BEGIN + MENUITEM "Crop", -1, GRAYED + MENUITEM "Resize", -1, GRAYED + MENUITEM "Rotate", -1, GRAYED + MENUITEM "Flip", -1, GRAYED + MENUITEM "Stretch", -1, GRAYED + MENUITEM "Skew", -1, GRAYED + MENUITEM "Invert Colours", -1, GRAYED + MENUITEM SEPARATOR + MENUITEM "Attributes", -1, GRAYED + END + POPUP "Colours" + BEGIN + MENUITEM "Edit Colours...", ID_EDITCOLOURS + END + POPUP "Window" + BEGIN + MENUITEM "Tile", -1 + MENUITEM "Cascade", -1 + END + POPUP "Help" + BEGIN + MENUITEM "About...", ID_ABOUT + END +END + +IDR_POPUP MENU +BEGIN + POPUP "popup" + BEGIN + + MENUITEM SEPARATOR + + END +END + + +IDD_ABOUTBOX DIALOGEX 22,16,190,182 +CAPTION "About ImageSoft" +FONT 8,"Tahoma",0,0 +STYLE WS_BORDER | WS_DLGFRAME | WS_SYSMENU | DS_MODALFRAME +BEGIN + LTEXT "ImageSoft v0.1\nCopyright (C) 2006\nby Ged Murphy (gedmurphy@gmail.com)", IDC_STATIC, 48, 7, 130, 26 + PUSHBUTTON "Close", IDOK, 75, 162, 44, 15 + ICON IDI_ICON, IDC_STATIC, 10, 10, 7, 30 + EDITTEXT IDC_LICENSE_EDIT, 8, 44, 174, 107, 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." +END + +/* status bar info */ +STRINGTABLE DISCARDABLE +BEGIN + IDS_CURPOS "Cursor : %d,%d" + IDS_READY "Ready" +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 diff --git a/reactos/base/applications/imagesoft/imagesoft.c b/reactos/base/applications/imagesoft/imagesoft.c new file mode 100644 index 00000000000..7929df02c70 --- /dev/null +++ b/reactos/base/applications/imagesoft/imagesoft.c @@ -0,0 +1,682 @@ +#include "imagesoft.h" + +#define ID_MDI_FIRSTCHILD 50000 + +const TCHAR AppClassName[] = _T("Parent"); +const TCHAR ChildClassName[] = _T("Child"); + + +HINSTANCE hInstance; +HWND hMainWnd; +HWND hMDIClient; +HWND hStatus; +HWND hTool; +HWND hwndRebar; +HMENU hShortcutMenu; + + +/* + * Initialize the structure and send a message to the MDI + * frame requesting a new new child window. + */ +HWND CreateNewMDIChild(HWND hMDIClient) +{ + MDICREATESTRUCT mcs; + HWND hChild; + TCHAR Buf[15]; + static DWORD MDINum = 1; + + _sntprintf(Buf, sizeof(Buf) / sizeof(TCHAR), _T("Untitled%d"), MDINum); + + mcs.szTitle = Buf; + mcs.szClass = ChildClassName; + mcs.hOwner = hInstance; + mcs.x = mcs.cx = CW_USEDEFAULT; + mcs.y = mcs.cy = CW_USEDEFAULT; + mcs.style = MDIS_ALLCHILDSTYLES; + + hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs); + if(!hChild) + { + MessageBox(hMDIClient, _T("MDI Child creation failed."), _T("Error!"), + MB_ICONEXCLAMATION | MB_OK); + return hChild; + } + + MDINum++; + return hChild; +} + + +/* + * Main program message handler + */ +LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch(msg) + { + case WM_CREATE: + { + CLIENTCREATESTRUCT ccs; + TBADDBITMAP tbab; + INT iImageOffset; + INT statwidths[] = {300, 450, 550, -1}; /* widths of status bar */ + TCHAR Buf[6]; + + /* Toolbar buttons */ + TBBUTTON tbb [NUM_BUTTONS] = + { /* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */ + {STD_FILENEW, ID_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, {0}, 0, 0}, /* new */ + {STD_FILEOPEN, ID_OPEN, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0}, /* open */ + {STD_FILESAVE, ID_SAVE, TBSTATE_INDETERMINATE, BTNS_BUTTON, {0}, 0, 0}, /* save */ + + /* Note: First item for a seperator is its width in pixels */ + {10, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, /* separator */ + + {STD_PRINTPRE, ID_PRINTPRE, TBSTATE_INDETERMINATE, BTNS_BUTTON, {0}, 0, 0 }, /* print */ + {STD_PRINT, ID_PRINT, TBSTATE_INDETERMINATE, BTNS_BUTTON, {0}, 0, 0 }, /* print preview */ + + {10, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, /* separator */ + + {STD_CUT, ID_CUT, TBSTATE_INDETERMINATE, BTNS_BUTTON, {0}, 0, 0 }, /* cut */ + {STD_COPY, ID_COPY, TBSTATE_INDETERMINATE, BTNS_BUTTON, {0}, 0, 0 }, /* copy */ + {STD_PASTE, ID_PASTE, TBSTATE_INDETERMINATE, BTNS_BUTTON, {0}, 0, 0 }, /* paste */ + + {10, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, /* separator */ + + {STD_UNDO, ID_UNDO, TBSTATE_INDETERMINATE, BTNS_BUTTON, {0}, 0, 0 }, /* undo */ + {STD_REDOW, ID_REDO, TBSTATE_INDETERMINATE, BTNS_BUTTON, {0}, 0, 0 }, /* redo */ + }; + + +/* ======================== Create Std Toolbar ============================== */ + + /* Create Toolbar */ + hTool = CreateWindowEx(0, + TOOLBARCLASSNAME, + NULL, + WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS, + 0, 0, 0, 0, + hwnd, + (HMENU)IDC_TOOLBAR, + hInstance, + NULL); + if(hTool == NULL) + MessageBox(hwnd, _T("Could not create tool bar."), _T("Error!"), MB_OK | MB_ICONERROR); + + /* Send the TB_BUTTONSTRUCTSIZE message, which is required for backward compatibility */ + SendMessage(hTool, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); + + /* Add custom images */ + tbab.hInst = HINST_COMMCTRL; + tbab.nID = IDB_STD_SMALL_COLOR; + iImageOffset = (INT)SendMessage(hTool, TB_ADDBITMAP, NUM_BUTTONS, (LPARAM)&tbab); + /* tbb[0].iBitmap += iImageOffset; / * properties * / + tbb[1].iBitmap += iImageOffset; / * refresh * / + tbb[2].iBitmap += iImageOffset; / * export * / + tbb[4].iBitmap += iImageOffset; / * create * / + tbb[6].iBitmap += iImageOffset; / * start * / + tbb[7].iBitmap += iImageOffset; / * stop * / + tbb[8].iBitmap += iImageOffset; / * pause * / + tbb[9].iBitmap += iImageOffset; / * restart * / + tbb[11].iBitmap += iImageOffset; / * help * / + tbb[12].iBitmap += iImageOffset; / * exit * / +*/ + /* Add buttons to toolbar */ + SendMessage(hTool, TB_ADDBUTTONS, NUM_BUTTONS, (LPARAM) &tbb); + + /* Show toolbar */ + ShowWindow(hTool, SW_SHOWNORMAL); + + + +/* ======================== Create Floating Toolbar ============================== */ + + + + +/* ======================== Create Status Bar ============================== */ + + hStatus = CreateWindowEx(0, + STATUSCLASSNAME, + NULL, + WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP, + 0, 0, 0, 0, + hwnd, + (HMENU)IDC_STATUSBAR, + hInstance, + NULL); + if(hStatus == NULL) + MessageBox(hwnd, _T("Could not create status bar."), + _T("Error!"), MB_OK | MB_ICONERROR); + + SendMessage(hStatus, SB_SETPARTS, sizeof(statwidths)/sizeof(int), (LPARAM)statwidths); + + +/* ======================== Create Popup Menu ============================== */ + + hShortcutMenu = LoadMenu(hInstance, MAKEINTRESOURCE (IDR_POPUP)); + hShortcutMenu = GetSubMenu(hShortcutMenu, 0); + + +/* ======================= Create MDI Client ============================= */ + + /* Find window menu where children will be listed */ + ccs.hWindowMenu = GetSubMenu(GetMenu(hwnd), 4); + ccs.idFirstChild = ID_MDI_FIRSTCHILD; + + hMDIClient = CreateWindowEx(WS_EX_CLIENTEDGE, + _T("mdiclient"), + NULL, + WS_CHILD | WS_CLIPCHILDREN | WS_VSCROLL | WS_HSCROLL | WS_VISIBLE, + CW_USEDEFAULT, + CW_USEDEFAULT, + CW_USEDEFAULT, + CW_USEDEFAULT, + hwnd, + (HMENU)IDC_MAIN_MDI, + GetModuleHandle(NULL), + (LPVOID)&ccs); + + + if(hMDIClient == NULL) + MessageBox(hwnd, _T("Could not create MDI client."), + _T("Error!"), MB_OK | MB_ICONERROR); + + +/* ======================= Miscelaneous ============================= */ + + /* indicate program is ready in the status bar */ + LoadString(hInstance, IDS_READY, Buf, sizeof(Buf) / sizeof(TCHAR)); + SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)Buf); + + /* inilalize file open/save structure */ + FileInitialize(hwnd); + + } + break; + + case WM_SIZE: + { + RECT rcTool; + int iToolHeight; + + RECT rcStatus; + int iStatusHeight; + + HWND hMDI; + int iMDIHeight; + RECT rcClient; + + /* Size toolbar and get height */ + hTool = GetDlgItem(hwnd, IDC_TOOLBAR); + SendMessage(hTool, TB_AUTOSIZE, 0, 0); + + GetWindowRect(hTool, &rcTool); + iToolHeight = rcTool.bottom - rcTool.top; + + /* Size status bar and get height */ + hStatus = GetDlgItem(hwnd, IDC_STATUSBAR); + SendMessage(hStatus, WM_SIZE, 0, 0); + + GetWindowRect(hStatus, &rcStatus); + iStatusHeight = rcStatus.bottom - rcStatus.top; + + /* Calculate remaining height and size for the MDI frame */ + GetClientRect(hwnd, &rcClient); + + iMDIHeight = rcClient.bottom - iToolHeight - iStatusHeight; + + hMDI = GetDlgItem(hwnd, IDC_MAIN_MDI); + SetWindowPos(hMDIClient, NULL, 0, iToolHeight, rcClient.right, iMDIHeight, SWP_NOZORDER); + } + break; + + case WM_NOTIFY: + { + NMHDR* nm = (NMHDR*) lParam; + + switch (nm->code) + { + case TTN_GETDISPINFO: + { + LPTOOLTIPTEXT lpttt; + UINT idButton; + + lpttt = (LPTOOLTIPTEXT) lParam; + + /* Specify the resource identifier of the descriptive + * text for the given button. */ + idButton = (UINT)lpttt->hdr.idFrom; + switch (idButton) + { + case ID_NEW: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_NEW); + break; + + case ID_OPEN: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_OPEN); + break; + + case ID_SAVE: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_SAVE); + break; + + case ID_PRINTPRE: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PRINTPRE); + break; + + case ID_PRINT: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PRINT); + break; + + case ID_CUT: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_CUT); + break; + + case ID_COPY: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_COPY); + break; + + case ID_PASTE: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PASTE); + break; + + case ID_UNDO: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_UNDO); + break; + + case ID_REDO: + lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_REDO); + break; + + } + } + break; + + default: + break; + } + } + break; + + case WM_CONTEXTMENU: + { + int xPos, yPos; + + xPos = GET_X_LPARAM(lParam); + yPos = GET_Y_LPARAM(lParam); + + TrackPopupMenuEx(hShortcutMenu, TPM_RIGHTBUTTON, + xPos, yPos, hwnd, NULL); + } + break; + + case WM_COMMAND: + + switch(LOWORD(wParam)) + { + case ID_NEW: + CreateNewMDIChild(hMDIClient); + break; + + case ID_OPEN: + DoOpenFile(hwnd); + break; + + case ID_SAVEAS: + DoSaveFile(hwnd); + break; + + case ID_CLOSE: + { + /* close the active child window */ + HWND hChild = (HWND)SendMessage(hMDIClient, WM_MDIGETACTIVE,0,0); + if(hChild) + { + SendMessage(hChild, WM_CLOSE, 0, 0); + } + } + break; + + case ID_CLOSEALL: + { + HWND hChild; + /* loop until all windows have been closed */ + while ((hChild = (HWND)SendMessage(hMDIClient, WM_MDIGETACTIVE,0,0)) != NULL) + { + SendMessage(hChild, WM_CLOSE, 0, 0); + } + } + break; + + case ID_EXIT: + PostMessage(hwnd, WM_CLOSE, 0, 0); + break; + + case ID_EDITCOLOURS: + { + /* open up the colour selection dialog */ + + static CHOOSECOLOR cc; + static COLORREF crCustColors[16]; + + cc.lStructSize = sizeof(CHOOSECOLOR); + cc.hwndOwner = hwnd; + cc.hInstance = NULL; + cc.rgbResult = RGB(0x80, 0x80, 0x80); + cc.lpCustColors = crCustColors; + cc.Flags = CC_RGBINIT | CC_FULLOPEN; + cc.lCustData = 0; + cc.lpfnHook = NULL; + cc.lpTemplateName = NULL; + + ChooseColor(&cc); + } + break; + + case ID_WINDOW_TILE: + SendMessage(hMDIClient, WM_MDITILE, 0, 0); + break; + + case ID_WINDOW_CASCADE: + SendMessage(hMDIClient, WM_MDICASCADE, 0, 0); + break; + + case ID_ABOUT: + DialogBox(hInstance, + MAKEINTRESOURCE(IDD_ABOUTBOX), + hMainWnd, + (DLGPROC)AboutDialogProc); + break; + + default: + /* Catch all commands that I didn't process directly and do + * a check to see if the value is greater than or equal to + * ID_MDI_FIRSTCHILD. If it is, then the user has clicked + * on one of the Window menu items and we send the message + * on to DefFrameProc() for processing. + */ + if(LOWORD(wParam) >= ID_MDI_FIRSTCHILD) + DefFrameProc(hwnd, hMDIClient, WM_COMMAND, wParam, lParam); + else + { + HWND hChild = (HWND)SendMessage(hMDIClient, WM_MDIGETACTIVE,0,0); + if(hChild) + SendMessage(hChild, WM_COMMAND, wParam, lParam); + } + } + break; + + case WM_CLOSE: + DestroyMenu(hShortcutMenu); + DestroyWindow(hwnd); + break; + + case WM_DESTROY: + PostQuitMessage(0); + break; + + default: + return DefFrameProc(hwnd, hMDIClient, msg, wParam, lParam); + } + return 0; +} + + +/* + * MDI child window message handler + */ +LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + static BOOL fLeftButtonDown, fRightButtonDown; + static HDC hdcMem; + static INT cxClient, cyClient, xMouse, yMouse; + HDC hdc; + PAINTSTRUCT ps; + + switch(msg) + { + case WM_CREATE: + break; + + case WM_MDIACTIVATE: + { + HMENU hMenu, hFileMenu; + UINT EnableFlag; + + hMenu = GetMenu(hMainWnd); + if(hwnd == (HWND)lParam) + { /* being activated, enable the menus */ + EnableFlag = MF_ENABLED; + } + else + { + TCHAR Buf[6]; + /* being de-activated, gray the menus */ + EnableFlag = MF_GRAYED; + + /* indicate program is ready in the status bar */ + LoadString(hInstance, IDS_READY, Buf, sizeof(Buf) / sizeof(TCHAR)); + SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)Buf); + } + + EnableMenuItem(hMenu, 1, MF_BYPOSITION | EnableFlag); /* edit */ + EnableMenuItem(hMenu, 2, MF_BYPOSITION | EnableFlag); /* image */ + EnableMenuItem(hMenu, 3, MF_BYPOSITION | EnableFlag); /* colours */ + EnableMenuItem(hMenu, 4, MF_BYPOSITION | EnableFlag); /* window */ + + hFileMenu = GetSubMenu(hMenu, 0); + EnableMenuItem(hFileMenu, ID_SAVEAS, MF_BYCOMMAND | EnableFlag); + + EnableMenuItem(hFileMenu, ID_CLOSE, MF_BYCOMMAND | EnableFlag); + EnableMenuItem(hFileMenu, ID_CLOSEALL, MF_BYCOMMAND | EnableFlag); + + SendMessage(hTool, TB_SETSTATE, ID_COPY, + (LPARAM)MAKELONG(TBSTATE_ENABLED, 0)); + + DrawMenuBar(hMainWnd); + } + break; + + case WM_MOUSEMOVE: + { + POINT pt; + TCHAR Buf[200]; + TCHAR Cur[15]; + + pt.x = LOWORD(lParam); + pt.y = HIWORD(lParam); + + /* set cursor location in the status bar */ + LoadString(hInstance, IDS_CURPOS, Cur, sizeof(Cur) / sizeof(TCHAR)); + _sntprintf(Buf, sizeof(Buf) / sizeof(TCHAR), Cur, pt.x, pt.y); + SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)Buf); + + if (!fLeftButtonDown && !fRightButtonDown) + return 0; + + hdc = GetDC(hwnd); + + SelectObject(hdc, + GetStockObject(fLeftButtonDown ? BLACK_PEN : WHITE_PEN) ); + + SelectObject(hdcMem, + GetStockObject(fLeftButtonDown ? BLACK_PEN : WHITE_PEN) ); + + MoveToEx (hdc, xMouse, yMouse, NULL); + MoveToEx (hdcMem, xMouse, yMouse, NULL); + + xMouse = (short) LOWORD(lParam); + yMouse = (short) HIWORD(lParam); + + LineTo(hdc, xMouse, yMouse); + LineTo(hdcMem, xMouse, yMouse); + + ReleaseDC(hwnd, hdc); + } + break; + + case WM_LBUTTONDOWN: + if (!fRightButtonDown) + SetCapture(hwnd); + + xMouse = LOWORD(lParam); + yMouse = HIWORD(lParam); + fLeftButtonDown = TRUE; + break; + + case WM_LBUTTONUP: + if (fLeftButtonDown) + SetCapture(NULL); + + fLeftButtonDown = FALSE; + break; + + case WM_RBUTTONDOWN: + if (!fLeftButtonDown) + SetCapture(hwnd); + + xMouse = LOWORD(lParam); + yMouse = HIWORD(lParam); + fRightButtonDown = TRUE; + break; + + case WM_RBUTTONUP: + if (fRightButtonDown) + SetCapture(NULL); + + fRightButtonDown = FALSE; + break; + + case WM_PAINT: + hdc = BeginPaint(hwnd, &ps); + + BitBlt(hdc, 0, 0, cxClient, cyClient, hdcMem, 0, 0, SRCCOPY); + + EndPaint(hwnd, &ps); + break; + + case WM_COMMAND: + switch(LOWORD(wParam)) + { + + } + break; + + case WM_SIZE: + return DefMDIChildProc(hwnd, msg, wParam, lParam); + + default: + { + TCHAR Buf[6]; + + /* indicate program is ready in the status bar */ + LoadString(hInstance, IDS_READY, Buf, sizeof(Buf) / sizeof(TCHAR)); + SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)Buf); + + return DefMDIChildProc(hwnd, msg, wParam, lParam); + } + + } + return 0; +} + +/* + * Register the MDI child window class + */ +BOOL SetUpMDIChildWindowClass(HINSTANCE hInstance) +{ + WNDCLASSEX wc; + + wc.cbSize = sizeof(WNDCLASSEX); + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = MDIChildWndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + wc.hInstance = hInstance; + wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); + wc.hCursor = LoadCursor(NULL, IDC_ARROW); + wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); + wc.lpszMenuName = NULL; + wc.lpszClassName = ChildClassName; + wc.hIconSm = (HICON)LoadImage(hInstance, + MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 16, 16, 0); + + if(!RegisterClassEx(&wc)) + { + MessageBox(0, _T("Could Not Register Child Window"), _T("Error!"), + MB_ICONEXCLAMATION | MB_OK); + return FALSE; + } + else + return TRUE; +} + +#ifdef _MSC_VER +#pragma warning(disable : 4100) +#endif +int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, + LPSTR lpCmdLine, int nCmdShow) +{ + WNDCLASSEX wc; + MSG Msg; + INITCOMMONCONTROLSEX icex; + + hInstance = hThisInstance; + + icex.dwSize = sizeof(INITCOMMONCONTROLSEX); + icex.dwICC = ICC_BAR_CLASSES; + InitCommonControlsEx(&icex); + + wc.cbSize = sizeof(WNDCLASSEX); + wc.style = 0; + wc.lpfnWndProc = WndProc; + wc.cbClsExtra = 0; + wc.cbWndExtra = 0; + 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 = AppClassName; + wc.hIconSm = (HICON)LoadImage(hInstance, + MAKEINTRESOURCE(IDI_ICON), IMAGE_ICON, 16, 16, 0); + + if(!RegisterClassEx(&wc)) + { + MessageBox(NULL, _T("Window Registration Failed!"), _T("Error!"), + MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + if(!SetUpMDIChildWindowClass(hInstance)) + return 0; + + hMainWnd = CreateWindowEx(0, + AppClassName, + _T("ImageSoft"), + WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN, + CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, + NULL, NULL, hInstance, NULL); + + if(hMainWnd == NULL) + { + MessageBox(NULL, _T("Window Creation Failed!"), _T("Error!"), + MB_ICONEXCLAMATION | MB_OK); + return 0; + } + + ShowWindow(hMainWnd, nCmdShow); + UpdateWindow(hMainWnd); + + while( GetMessage( &Msg, NULL, 0, 0 ) ) + { + if (!TranslateMDISysAccel(hMDIClient, &Msg)) + { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + } + return (int)Msg.wParam; +} diff --git a/reactos/base/applications/imagesoft/imagesoft.h b/reactos/base/applications/imagesoft/imagesoft.h new file mode 100644 index 00000000000..8e7210a249e --- /dev/null +++ b/reactos/base/applications/imagesoft/imagesoft.h @@ -0,0 +1,21 @@ +#ifndef __IMAGESOFT_H +#define __IMAGESOFT_H + +//#define WIN32_LEAN_AND_MEAN +#include +#include /* GET_X/Y_LPARAM */ +#include +#include +#include +#include "resource.h" + +#define MAX_KEY_LENGTH 256 +#define NUM_BUTTONS 13 + +BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); + +VOID FileInitialize (HWND hwnd); +VOID DoOpenFile(HWND hwnd); +VOID DoSaveFile(HWND hwnd); + +#endif /* __IMAGESOFT_H */ diff --git a/reactos/base/applications/imagesoft/imagesoft.rbuild b/reactos/base/applications/imagesoft/imagesoft.rbuild new file mode 100644 index 00000000000..e6ffe6fe96b --- /dev/null +++ b/reactos/base/applications/imagesoft/imagesoft.rbuild @@ -0,0 +1,27 @@ + + + + . + + + + + 0x600 + 0x501 + kernel32 + gdi32 + user32 + advapi32 + version + comctl32 + shell32 + comdlg32 + + imagesoft.c + about.c + opensave.c + + imagesoft.rc + imagesoft.h + + diff --git a/reactos/base/applications/imagesoft/imagesoft.rc b/reactos/base/applications/imagesoft/imagesoft.rc new file mode 100644 index 00000000000..bae7340d263 --- /dev/null +++ b/reactos/base/applications/imagesoft/imagesoft.rc @@ -0,0 +1,16 @@ +#include +#include +#include "resource.h" + +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS image editor\0" +#define REACTOS_STR_INTERNAL_NAME "imagesoft\0" +#define REACTOS_STR_ORIGINAL_FILENAME "imagesoft.exe\0" +#include + +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +IDI_ICON ICON "res/imagesoft.ico" + +#include "En.rc" + + diff --git a/reactos/base/applications/imagesoft/opensave.c b/reactos/base/applications/imagesoft/opensave.c new file mode 100644 index 00000000000..ee0db016209 --- /dev/null +++ b/reactos/base/applications/imagesoft/opensave.c @@ -0,0 +1,90 @@ +#include "imagesoft.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"); + +} + +/* + * Write the file to disk + */ +BOOL DoWriteFile(LPCTSTR pszFileName) +{ + return TRUE; +} + +/* + * Read the file from disk + */ +BOOL DoReadFile(LPCTSTR pszFileName) +{ + return TRUE; +} + + +/* + * Show the file open dialog + */ +VOID DoOpenFile(HWND hwnd) +{ + TCHAR szFileName[MAX_PATH] = _T(""); + 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"); + + ofn.lpstrFilter = Filter; + ofn.lpstrFile = szFileName; + ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; + + if (GetOpenFileName(&ofn)) + { + if (DoReadFile(szFileName)) + return; + } + + if (CommDlgExtendedError() != CDERR_GENERALCODES) + MessageBox(NULL, _T("Open file failed"), NULL, 0); +} + + +/* + * Show the file saveas dialog + */ +VOID 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; + } + + if (CommDlgExtendedError() != CDERR_GENERALCODES) + MessageBox(NULL, _T("Save to file failed"), NULL, 0); +} + diff --git a/reactos/base/applications/imagesoft/res/imagesoft.ico b/reactos/base/applications/imagesoft/res/imagesoft.ico new file mode 100644 index 0000000000000000000000000000000000000000..860f861bae272f15a8ef430353b1c469516f118f GIT binary patch literal 29926 zcmeHw2S8NU((oX{VguA9mgFfKTZ~CG7Q_ZvAfhN%R1`s~C{3g(NQb3JRj?x}D2f$( z1uOR68)$4Xi9|yrguC<2+}(u*G4k?E^4|aF=y2McbLO5t<=zEQgND$xt1kIUG!0DLI{Xx>~AR|EK{K7g*SJl=`ovIaoqfy!&aI&FXsjkvrbt_5)JV=ga` z7f}5^?YO)=?yLbY;B#epJy_QsAdBjfm!~-4jTo;iuLsh40KYgY%j`X`t&DJ3{q?$KWg5(GnDULIwj_#Y5CL_q&IiU0gJJKqZD0UjP6 zzSJ+G^OO2T$(_#!l+=* z2tp~fTA8kuATJP&W!Kl6Rb!QJ&o>Z-J3rxeH7;_@BWIs zrnyZgAkz5CyT2k`&A)qZ#8P@NWj8Cbx~KSx_@&j-L;9vA(A>w@!4-9g0f|BPAWl~$ zU(E1Iv*Zr4sftdWr0?Wp>g429JsoEI`TF_<%zh(XGSBZxffFtFYEILyz|X1RM730E zpg>yiME9O`D z!C)x%LmmW)exV{>tnf?U;+HG%W#aZuy_Zi_a&HzY{9<{1SgP>L4dwYVg^!fZ=ZqeK z5rOiY0XidVcENP0P!63dqDOxz_?MnD68WCZQ-?;E_bG9|Cn_Z3e3I~f$UB6Dws}U7 zpA;1Ei1OvQxP?biK;o;#weV@7*g(boQl~Pm#T$oKsg!m#E(uzUphY{4asv&L22(!m z48dYPNJ^uEwWva0MH~{MbhV_kfhyxsUfm>5r3ELrVRp3R^p?i^@PRLP-BT=S%dgz{ zBnJB2Ua&GBy6f|nR)G)o3}`D;+0Q}Wmp1YWbN~$}C&vJlxFkL*z(*yn0~=4_;kW>Z72f`bI$A#`ChO3s%d+V70;^0>eD@VuI4vdFrTBsE$zt zVFdYw5-hZlU@?Q9gqD;9%L!xz$Plc9m`6~k0>!Nn%MB4_vUwcGF`N$`NmRB>s_yEP>>)+k)b)*~z)D7rbAfMX+ zUP08KVp#z7w9?AEhOd*8jUpYiqAE`v&G^cB3mV=^6!N>Pgw^>ml+J_aK_!%`K|XDh z`Q#Ust3hdiI+XWQ2iYg;fDH-434#go2nq>`C4i*_5p5O_=YjHo*rRMYq zl;a#s;hJ4A4Jzf(;EEporQjbLX9;z+Ruru~8a9cPZgVt*TH?Z$@)p8lOk0DvkfpRG zaC2eJq)zNh^h@PqV8CYvC-^EBO zhQ`Kj(7@OW>J1Knrh`17xydZ}WT+Q>X66FDM$Lfs=AO{e!Vip%jlsmk1kB9Lz}(y% zj7Lre3kwSvKYlz+oH!Azt*v4D$id(^+7#TUj07+15#VSw24+}Uz?^9#V8|pl7-H)O zwzjrlZ*LDSPWCW;`gCxg;S6pwUBK1V6+GQ%fa@$D@bvTqA8#-4@$msK-?=bn&Kw8` zmL)PN&bTmlk$3jfPe29;ahh_1hkVt-PVm!np zCO{HFd`c1|rX)k+f@DZeT>uMHQ(@8K#jt4E5?HcgIjmT*02 zJ2Mx;ft+O!yd;<6D`7=eHe{||1({h{khOjttY5z#Hg4Pqo40O(ty{Ok)*ZQ!yJI`- z*s%k4?b!``_UwUu`}e_t0|(&3+Az419Sm1Dgu}IsQaG|D9d7SVgS-2d!Le;C;pFyJ zaB62J6ztm!*Y;<^wS(*6eMMXckUcqJ$oE3o-Kfz7f!&f%V*%?#fxzH$`!bF z?Hb&=bqns^xea&k-i7DakHYu2PQnj&&q2}6i}2mui}3uxEqMOzJ$U)(CKMGF!J|iy z;Much@WT&3Kyh&~l$4afudhp>?AO=u>#x6pOh(sA-eCT5f3OEqyLGJQx^+vZx;koW zH*BcgwwqD4dOOmvkSi43<-*J4^13k&-Nx&vYiLL$9jlb+NJFM@PfMP%dr~Cg6E;aW z8rH90ze<6QC8eb$rOF~DCC^HpJ(c5wdi{3V4Vf&}28jM{-MaN4=*CaNf4l9KBN$2A z_0emqr&k3ZU`Hv_AwB~W|IDbOx^CL-jIuhmC0UxPTVEz((<3wb;gTMenH}}A@_Mw> zORY?yPJnEw?%>!X^<^_7<7 zt;(xROf4%bxl95x(cLd9;?Yud`Fn(tysSMHNk(O*r9}t!(U!1x-~Ga(%j+w06oH(} z!qdF0isT*w7uZYgKw(kQ(;a!$@nO|dDzH9FkuKuDE-AcU_=Gz3Sw%f6#j;Auit=|T zp1Ma_X<6xO8eyIag(X!xPhKc5r?jjnPf?&-8PP*C;@PvO4~mLPs&|iAV*P&V^t|=y zJ1N%t#kHSazAS$H;OhC@&6Cfl-tsC*O3yD5iuNx37vtY`KYjiBF=rd=v7^mR&-JcE zQVnI52qjrvn|uh+=dSzpn>XF3+cLiS86#D!%5dK5{H$oNCQVv`(Y52(@7+D-EaFex zmQjgQCA2s>GCp8dlP3QCuN=R7?}fV@f7+%URj^bdt$Y&V=Xy47{OQGldoNxn>bGC1 zf>ABl!Y3h)3Vd+s^oyT=X8I>hoP1_UH6+z&i@Aw0KAs;OE&Hv!y!g?>2M-?<)i_)g zWts#e#rS-ZS0)I8IKG5m<8W0JXd09h;-BwC3Sb7TDf2EGg`(r(EE- zva;UaT@g>UQqiqa{bF%h3-6_u3ItSiauQjz}FK(uG4F&1Bb z@kN&|UvwTm)a0#r6&X?;$C*wJHdCk41#z5lMe^GNLmZDeU2vE=b*g3U@J$K-ii0aR zP^C~V&I@bgN$|TD(iSx=;PV* zLz}(}Nj1M^U{X*E)r5D2TLdL~D>%$|p~~}{1|@jb4pV{EA}sdbq6nIX|9kkbP|*_I zfy8Ujzv1UG-}H}sk|Z@j#A}iu=KaYh6?|%4mB~VVt>jZ#uS2&U(9zL>4?p}6KK}S) zkvIMF%P)bhFCtH>)z1wY8oGk+fazd3%o=o!-QgqiAkZ^)h0lk&z>pzBM1FIW$zYf; zVFLJCn}eO59XLBXgPms(%$hX|yk^V!M1OyO2n-B_1rs_Gbb&PM?yzRM0i?|s22oJRma8#roIMy;d78r-A9GmeJruV34uTzXhCrtODA*7<3UcO+gY7}1U{COH zSQ|10a)Zai{)o}AD|!m-kDd%M!G4fEe-30P1j4RVU)Y)&0Ed?P!;wULIFjNFM;1E6 zi8NO@zQ_$uEpdYri#?!`SvY8$$3Wv@A<)=75*mz5ga)G*!bcMqf!?TK_a4I7sy!2Ts+uxeQv9Vu{l+Zs5vBLglU+5q?SR>Qr+Yein|VZmm2e0~o+zIYIx zUfK_ISA^rok3&I0fykpVPj-cPvYR(=ioDq4t0&<3?KAM>oiji;`%1p+#~rrVJ(^ zCU%WVKE&q4%#v5PCMP?VMAEStYm_B8J!VyQjJ&;!O`CEu(latvt_hJBkpB(N&W`co zVEU$<9O?lgQZ<{zui2R~u5^D`uqZ1lb>X~z9Tbx53M}d7l@lAVGJA2FVXv>+eX5j- zDiNZCZHG0`hQOrdOE|y%3}uGWpEPc&S$*BPDeIPUe)l&S6Z5fChBlnDY~#B4{(bu` zPxL`J-W1Q zQ>D_Xk(rG~Hm;gdEoNsiWkj{4s?lkqMpaFy9-A=Uw0ct2xV;0%<@YnyzkjEGNlPTr zh$J@^uG&4NdGqGbwryJ=$%-g1@7J#%$;jP7Yrrg^8$ApiIuwSEnhKT{qhZu!4^f8g z;^IQ`>e;~ej(~swSZ31|7TNTm`-U;en#~~HdjurATR@8ESXkya0W#c7VYBx@$n+f! zS^gtoSKv3Wd9DTQ3nK_01v{dwAUAw6~Dz| zUf>^*2$O@?Kxk+vL_|aYZ8+i`U`e7BLSvI4IXM~9NS@1Q|BAFkNL#cBmMmEU%a<>Q zj73SXc3Bc+ELi}V8OveMh7}N!k^w6-R>Fp?Rj`)iwi`Fm8NX#SY}rC`+wCN?RXOAL z(iwm7;6XT_9Z6^Ve7LiB37k5-4;~y_56`X~f9zFu*r7v8xk%2SIUT!9A<9*Af9_fOxHrmM9j$wT{ zJ~+BMIyzceIggjejlY>F7c5wLTUkwddEP|tiL}v=p5@~?-DaeD1wP$sya#;=!>w&QefqBt2dboxx9F*5U_Nyk zr8lc`0`%_lwZzcYtJ9~g+E+bVzUupVKmPzX*Xgbb@|Cr9>8tM_;OFh_s!UM&U-UBd z_MhurrFt>1LA#bMnt$|x60g$lG^JzP)-^~^^g4HJ^U24Rc$J}sjaVIBgX{5i4T+r8 zz3W>t`cpd3p$hoZ_2=?)Ovzu1WT~8Eefso)27~-y^5n_jK5Yun+yR#vGr-T!59ZCA zN4&5;okNo#!)FAnnrjKMvut5+=txnwnHk{%`xg5V&pH!MuL%Ne`(4o1c>{Esu@O4E zZiN1xt6->0ER6Svh9TY=U_K`k+>>+JAOb?76Cs6o#!aaquw`)sEX!C8t5;X@ea!Q1 z-LMw6Z`lZ$Ia|cDf%SO1w{L?zd-sZG!j&!YaAN&JxV|?XPVQa@C-!fH`$yJ^XG7lM zd^k#H!s*ke;q=)vbRL`+&jRM@9$YOD`M7Vt{T7})eF`sLynt8FzZG?8%*XxX{^^1L z*L$E==a`0ueDk0SF4>6ak&sSJojay|moAh-fmT`?9PiRk|En$?IRyG&aong&m#^e; zFd!{Km%)Yx?2FFuQ~0ds*Nq!?Qp7udRHt>Xt~w3AP{iSr4_Xcy&|O85*!&~o!GrrL zv&nCv+qSLpxD%6`G}W%;$|gyFI|S z177C5g!r;4A>e(0fmfL_%;}uZc#O~G{tn0O@;1bDkw}RxxS~gB8g=T_dDruBK1&Dq*|~kyzT$pj;9ZJA8RxpW-xxTpApu|XxqZ@} zi?p!Mw0%OrlEO9wZ3)_`0LM9<^BIrvxg1M!xK3`TE;)6w^P`t=vA-)rdf~ zznW2;ufV)pGH~4ts&Vc|j_VOH9lYapWS{Pm8CF(SIBC+P8iDNnP!*JTT&6lqnKA`Q zo{~!SGQB)5JWg8)P7s_VI74t&Q&aO~g9Z%_5oD2#V+4(x38jBVz$X!3!`0!!&W#l926lC;Fzf!$C9y~70att642vAK;4T)YPdrTx- zOe7gI>gnlWn>KBb^j^CN$B1B%0*uM$vV949R|5lz8&G|HMvWR(_T!H~BH4urbhi~A zK75EI+Ys*GzmNCs-4n>JOt^FB4&J_fTOeCAf$qY1{rYu*Y|jLek03p}K+nz~_5qF0 zuhgGBPndq5UknxmNb?Fibm)MjpF_GEV3#gkkaTn+eE#|8{7n1|{RsvV7%9Si$k!*} z)1CWW2|Ny8j~zR<{N>A+Nct3{JGlt_JRBw)H~jwl@A3Kb=lI=s-yzw(AsH&+lP6E` z@#Dw*%t+6S{LBpWtT<-Om|w~6l-DPZ0nc+DgU0ksGaENJ%rx9dn4Jq z3N+_XUteEFx<*u2S2rSjo+~_e*yp*^nV=H^&wHN#Z4~ec+08Boo7Y&Xo1Gc~KL_tIyl-fdEpI%@9+B{nyyq#`F|TcoSKs@14{AtrNS&Txc4lTKlKr6Ahdf^t^MvOIUb=J% z73+c50ndNrxlb}U+_!I^I2I(^L>n6$?yuiO1qNSy!KsLKbHlG6T3B!jE z7x;O;`0`6H9bH{@4N|I5MasRC`+)ZZ<$hL&!rVWiqyDf>O-)6zeH7<0tz&`KFt1;M z)~-P7mT4Aq`Xx`i>nGKSbhS$8{ z=H`YYMvM?>F3G}UqR`dTW8&{tQZ1AC@NpzxrRzBgq-#XlV+7u3h?f-@6nl$6GEss1 zn?TsTd$&NefeM&6m?WSIMp#d9Hr*%{Rh=)P(}^*|NwO zDUvO3;9D!GmO*=-X?S?J*#EqinP#FDnO>%k07-W%Fc96iYu7HOUD&yEr-;jY712;w zt=e}+Y23dYWnp1u@95wgH9v;?56R$;>qlu^42DZ1*Sxb5LYO*rY9C%t?06sIy=43L z?a1_TUF>sT=jP^$>D#t#Ly}wb-j94X@YUw=pZ|r+r`Gy`R_a zx^?S>4I4Hf*?9|O8z6>xe(~C-GZ^U%V;tUlLTar1-$_pod%4GiAJB`uw2!~tSraAD*5&b-aoz>zq@xCpFg~V-#;$GqC3~|_O*+6 z?ZRoiP>_cw59H#3jVqAek-#NBH0Gp$?PyKgVwy9AmW ze3l}~XodKM7+F)J>9P+8x(rq}IAQ$g?|!^>RCac$E8f|&Sh#;M0}BtW7S68p77ot0 z#$6HPh0XIUge;$LFx`Eikml4^h@0FMujX%+jUPAeM`bL#~n3#Ih0F!JMujbtSrYBKEIlW7c+dY@NlL;?{?s$)7ymeYXXG4WP98b zJw>2*dxY${Baq$+5*E1(5Ei-^}iEQrI=-V3mf zX*5do9Z;*k2iEOn|8oZuJKeG4#$F)1CcL!9AIa7UpIq3BPcI$B^O*stpdX2TRM3xU z(+6O>-zeOlvy9HJiB;yJYWx3bI6Ow$GLqITtp{1(IXkev=T)KM;*|b zchu}?83`y1M%^>T>`xegWumO5YA`Lt+D^pocjsc5z}zv@+7pLGI_y& zO6S|khet~rO?D43R_{LTN3GF|u(9uLLD%D)(8wwi>zM=#lHLx2y1`8B^UXNCcYKR* zWnBn9yOJ;bc<(&ED7qq?TV0j@b#q4G%2}pDs$(BvYl1tjNDM~@JKNcBYyW+vHy-HG zL8FIFSwqWoZ0vUzb=^*3qY109-jG17+tUH{znO>^kL<*o+v2$2@#VKS@aLy@@of5R zJQy#oU)&Tp64&|;!5l3Txc+1rJ!N#kKG54rSs^hP+BJ7uVe>L#_Cx1YpGCpMGk1_TD8vy)TL-)r}M=FxkV78v|ro`LBX@8e2-l6gs%uh891yfZVu$-Fo{Lj^DQ zS3QKLfpe&&&rH;DJ}5NyzmN4D4ha2+PZn<7xW3^pq+ZpP6%e{XS=@rdt>N{p> z8G50%`x)V1o=1ggrurz2nNN4K(^&N2q3|Q|GNr$k;p^9>Lh(;8h1+-U;f`HfT> zVd%7>LniZ!pninBZnP7;Q%l7OX}L5yp=&MavN;g0+Q- z;523k&aoOOq&xMNg%4@@)89yTm8R8uIUbp9+!_l~9Pk3&fle>9!{c!i@fbmV)F{l0 zu)qVM!*PG`P}~zR1h@MS!Z4G6)mr9IrLjLLGIvm`7su$Xc5%H_IG$*YH;--;@?$3o zC)4NP{;*NP-p~=k?jSRycesUIzk$Mk8~tH}Tih4v&yEs~ClLL|whH+%6NOV5fkeNB zuqV`9h5kYRb@Yc0Zh8AqoHbtF5P>HWr{b*>+mYzUQ>*4N{YW+>$o;=7z!bOn8qxgu zyJuB&7O8g{wIi65J}I_ zm!1K&X%01^`<|r#EY$4l`d(yie^oz7`ne9&=s6YX9WGfj?+Y@Gp0>aKRc*hob~O9B znX&AmgUfo<=xJB>zUuue>#0A$tsluOlIUAFqU@-qw&fRa(e9IiReZ&F;$)(Bue7GZ zZ%b2hNu(7l2e4u7U^#tZi8cE&2oik^HkA9tI&!~MqVUz_ez}_5mr;2tM{jx3hmV*( z(wURCl)fdU_%2?as6D0cbXD_<74cGqPn3w|=y^n+9=5gkyulUU$1@b;isz>9_{rmM z`#zpBUHKj=22+*XpLs!Yzfj>9%j>~Xg|GUZJXY4~5f~Aui6H=bvVYv4(*vxJW&JG6 zpxJhSZ8uo|&cI<#<2=S;+;=&~VO=ldGqC=PK^f;fj&r><>ndz5SPsJa?p6eP3g9rO zaURA|uqSmlsLtar_R|kTx2v`o(n}BTv$sQKLrOCeuHL02#EjwAdCzw6P$2ihC4y zqx60RG|NR>5Voc0MZiAO+LQFrhe%f<+C?aBBFF}W<=)6LZ`MJP{RgsMk!(MZ^f;pa zlHO$+N9EbhgKd!<$-V%;`sypuwxes;uK4xWUn6}V3^g<~tSFypU|SAun{79kc81T% zc48~*LX~<_rO!H4)|s-tl-`#U+hkoN$Lakc96562Kq}AuFY5WpHYS|yNl2cBq@zZ9 zr(3jfXxXwQ+XQ_=phv*t!C|&(V4Y$Uve{@xwgY*j<7Yi5>nM7r9vPDFM!qJEEMTuNIB?i;c>K(;sFbh3fxv3{#FG&Ibk&t)R(M9HoIGuLKes5J7Z z_Z(ktyGBQHv}o3uvhJF7jjVrXy*szbI(Hru9uKzpp?UhU#!6HYX>8h0nQA?F#p(>w ztI05TdoGfW`fhYW+y^RX6+!CH0Jg=UubhZ_P9AsGopPHz-aIbc2RsjH?$=shLb?yj zeFyf7^=_j&$u{97={G;GXjl=T_T9MdSFc`)x>wfQlfIbs#v-uY2kX0eO^~g}zoqX8 ziU?bEgY2f*4k?$OB{qIOM#M->RcWC1r?G67+vjm$*(}+ih;6dZI$xfjEDI%laf)i$ z+JwWRBJXp(yso)F>Aic_g-(r0jN`Qf^d*$Br%#{7lGmm9f@~PRd;UGi&%VVwBrm&q z{RW=Dco|QfIY)BWvq)cB@v2RmsyL)q{xoSp3jRR0S-hWYqxGDel89qn{G%9eqUCtg zV>`0&UfwEva;*R#5nMXB9_d|tq<8&s%fdOhWY!4WnvsmQHa0b`J=OMV3Wr5U*|QFq z-KFzq(bX>y>BUCW)ORp38$GG#!HvuD>biMI-)6)6d8;um!3K9kOu%ga;kew@7#BG7 z!K|f;XlFZ>_xC^KLLwv9WM-~J@0dkM-{V6~0~b{9?IQca#CpQ6wTtoQW+~}^^6=YJ zxtLF~DEbZrZV0r%74CyEeYQEK#YLdKolT8vs5S)AxAuA(jB~ppu{(gevn~-YmO?Z* zWBp#!e#y;9!du(s{J?Si$%{0PwK@(9LHgv0} zq3`%mXT~wq@i>e1&Ett5w8g9yY545Y0WA695q^K?93Efpg9p;Qa7W54+??!-C-pe(UAlfF%Z4YjX`ySg= zke$WK+SXqiJeq&{T1MWe>vIbmS?A!!oDCukHU06QGxu8$cQ?K>y;rB%d-@Q~L4nv| zW-fYK7~sOi%W&hCT-`aOry8Um|^{TpZoj?7VY$6 zMtpiFYo;OY4jo7Bj=u_g#N&>eK9Hm)XdE7d9jyU0XnH%DitJ zjh@pswVr(p>wOdcr_TT1qnl(-$@Tiqh^UTJxlaa5NTN~QsTJ$d_swZnc- zLXc-9heF_ADG-0DpmyIlFKtaGY6M8%J+JBe=6YiLHf-(vzvGw(Vt$=@A|-IVHjeR> zJe88K;yRc=XFi>wDM51r=HVHbC;y0mr8#`}Rq|jQwj*#Mm`U%!Oe5QNeixw)K}Q1S z@!KiF%s+fSd-m)fm?un2OGCCFXFJRV3l@mHDf6fFjVm#(r>EyY_}rcg@xs`wSu^pS z4YFltUVRg#8xj~1Fn`Q^IYSTTL5VMy@%s!4drBF_xBZxHW4TY5KV_SC_L+BN z8*%2Rh*#nRB-!;3-_qnaacadHB>G>&1BF{C<%&ZRcV!!e#zki6|Bg>+q-blreoeZp_-P^j@cbD*D7-IRzjhVR z9M8wSIV)wWm!+cBWGju|tz3~wc6heOkDtKTB|px|KLlF_Al@sVngVn{`56vWb)QvfHsDDe}?%y^Cbe zZypy4mblBdM@|yfc$*37US=2<9w^eFEdMUw!9St_^mZ%I_99)N)mj01IAL^TnC$V< zOnmj^4jx_LDAJ$dIS4mKJ7GwG-;Q_HSv{X@%<5_mn02eM&o!(&dYLdMR7xBL3gz^* z)O&Ys$*x_yDqOg9MYvDA1+Ag9>g8(_m-Kbh(HiLgtkLXSXkZ;ewnXLB1mgE(_x_mn z1KtxJ5U*lmLm$BZgN}4XpJ_j9l}YUf3&~E#vL%x`^S<>TJD)*qJ?MM*czN@DJh^D5a3Fjn z?h7LOL))(JrTzr-)}~wLj>L0o0`c@>XW8KhbKL1?j0?wic=R6=uc#ntgkA^V!EFOa zn400p$zC|1-@wD~t8UeL$PU$_p3QdDvRaSO+qJ7|-unt`_I8@g_sIssq6*(voz?5n z>NDM1*JN%L868bq`uz|cD6Kf|<)sQ2sX?)y8kF}|1DO^T*G}O2r z14DxKuF{#fi)7sN`x4GvM{;t?*3zg819!P4l>ZCrOE=)0q%oA0IX zPHw;}n__U|+~Jt+F&G2=ydzcdYYJ-&2|HBZ`6!Ndo<~24^8)FcHF$hSCerUtpvw#w zr<%%CPtzJ6cd@18R{W(z-0$%<^~25E_sYkN8^`zGcRKYiEhQ~XeQ#$4S>yVYAY8wI z?0Ovr{_xI%DhO76It;m-;f0rTA~7#?C~kDse`D-b(BBA7?Ala)$%Ib9!PCrtaGy3A zXAk|t_6?+3B-HuZ_G3-!+>$y&!vD}Y%}r=@pW0S?WZVU1bF9mMsa&m;cq9a%h@hB& aKIfo{{{Z}^0f|B&Dn!2bcc8(5M6 literal 0 HcmV?d00001 diff --git a/reactos/base/applications/imagesoft/resource.h b/reactos/base/applications/imagesoft/resource.h new file mode 100644 index 00000000000..3026be1b2a4 --- /dev/null +++ b/reactos/base/applications/imagesoft/resource.h @@ -0,0 +1,70 @@ +#define IDC_STATIC -1 + +#define IDC_TOOLBAR 1001 +#define IDC_STATUSBAR 1002 +#define IDC_MAIN_MDI 1004 + +#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_PROP 2008 +#define ID_CUT 2009 +#define ID_COPY 2010 +#define ID_PASTE 2011 +#define ID_PASTENEWIMAGE 2012 +#define ID_UNDO 2013 +#define ID_REDO 2014 +#define ID_SELALL 2015 +#define ID_EXIT 2016 +#define ID_EDITCOLOURS 2017 + +#define ID_REFRESH 3000 +#define ID_HELP 3001 +#define ID_WINDOW_TILE 3002 +#define ID_WINDOW_CASCADE 3003 + +/* Menu */ +#define IDR_MAINMENU 102 +#define IDR_POPUP 103 +#define ID_ABOUT 4031 + + +/* 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 + +#define IDI_ICON 50 +#define IDB_BUTTONS 51 + +/* toolbar buttons */ +#define TBICON_PROP 0 +#define TBICON_REFRESH 1 +#define TBICON_EXPORT 2 +#define TBICON_CREATE 3 +#define TBICON_START 4 +#define TBICON_STOP 5 +#define TBICON_PAUSE 6 +#define TBICON_RESTART 7 +#define TBICON_HELP 8 +#define TBICON_EXIT 9 + +/* about box info */ +#define IDD_ABOUTBOX 200 +#define IDC_LICENSE_EDIT 201 +#define IDS_LICENSE 202 + +#define IDS_CURPOS 550 +#define IDS_READY 551