the beginnings of a native image viewing and paint program
Added: trunk/reactos/base/applications/imagesoft/
Added: trunk/reactos/base/applications/imagesoft/about.c
Added: trunk/reactos/base/applications/imagesoft/en.rc
Added: trunk/reactos/base/applications/imagesoft/paint.c
Added: trunk/reactos/base/applications/imagesoft/paint.h
Added: trunk/reactos/base/applications/imagesoft/paint.rc
Added: trunk/reactos/base/applications/imagesoft/res/
Added: trunk/reactos/base/applications/imagesoft/res/imagesoft.ico
Added: trunk/reactos/base/applications/imagesoft/resource.h

Added: trunk/reactos/base/applications/imagesoft/about.c
--- trunk/reactos/base/applications/imagesoft/about.c	2006-02-12 22:21:56 UTC (rev 112)
+++ trunk/reactos/base/applications/imagesoft/about.c	2006-02-14 17:39:13 UTC (rev 113)
@@ -0,0 +1,45 @@
+
+#include "paint.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;
+}

Added: trunk/reactos/base/applications/imagesoft/en.rc
--- trunk/reactos/base/applications/imagesoft/en.rc	2006-02-12 22:21:56 UTC (rev 112)
+++ trunk/reactos/base/applications/imagesoft/en.rc	2006-02-14 17:39:13 UTC (rev 113)
@@ -0,0 +1,87 @@
+IDR_MAINMENU MENU
+BEGIN
+  POPUP "&File"
+  BEGIN
+    MENUITEM "New...",         ID_NEW
+    MENUITEM "Open...",        ID_OPEN, GRAYED
+    MENUITEM "Close...",       ID_CLOSE, 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", GRAYED
+  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", GRAYED
+  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 "Window", GRAYED
+  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

Added: trunk/reactos/base/applications/imagesoft/paint.c
--- trunk/reactos/base/applications/imagesoft/paint.c	2006-02-12 22:21:56 UTC (rev 112)
+++ trunk/reactos/base/applications/imagesoft/paint.c	2006-02-14 17:39:13 UTC (rev 113)
@@ -0,0 +1,646 @@
+/*
+ * PROJECT:     ReactOS Services
+ * LICENSE:     GPL - See COPYING in the top level directory
+ * FILE:        base/system/servman/servman.c
+ * PURPOSE:     Main window message handler
+ * COPYRIGHT:   Copyright 2005 - 2006 Ged Murphy <gedmurphy@gmail.com>
+ *
+ */
+
+#include "paint.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;
+HMENU hShortcutMenu;
+
+
+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;
+}
+
+
+
+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_ENABLED, 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_ENABLED, BTNS_BUTTON,    {0}, 0, 0 },   /* print */
+                {STD_PRINT,    ID_PRINT,    TBSTATE_ENABLED, BTNS_BUTTON,    {0}, 0, 0 },   /* print preview */
+
+                {10, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},                              /* separator */
+
+                {STD_CUT,      ID_CUT,      TBSTATE_ENABLED, BTNS_BUTTON,    {0}, 0, 0 },   /* cut */
+                {STD_COPY,     ID_COPY,     TBSTATE_ENABLED, BTNS_BUTTON,    {0}, 0, 0 },   /* copy */
+                {STD_PASTE,    ID_PASTE,    TBSTATE_ENABLED, BTNS_BUTTON,    {0}, 0, 0 },   /* paste */
+
+                {10, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},                              /* separator */
+
+                {STD_UNDO,     ID_UNDO,    TBSTATE_ENABLED, BTNS_BUTTON,     {0}, 0, 0 },   /* undo */
+                {STD_REDOW,    ID_REDO,    TBSTATE_ENABLED, BTNS_BUTTON,     {0}, 0, 0 },   /* redo */
+            };
+
+
+/* ======================== Create 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 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), 3);
+                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);
+
+
+                /* indicate program is ready in the status bar */
+                LoadString(hInstance, IDS_READY, Buf, sizeof(Buf) / sizeof(TCHAR));
+                SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)Buf);
+
+	    }
+	    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 list view */
+			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_PROP);
+                        break;
+
+                        case ID_OPEN:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_REFRESH);
+                        break;
+
+                        case ID_SAVE:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_EXPORT);
+                        break;
+
+                        case ID_PRINTPRE:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_NEW);
+                        break;
+
+                        case ID_PRINT:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_START);
+                        break;
+
+                        case ID_CUT:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_STOP);
+                        break;
+
+                        case ID_COPY:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_PAUSE);
+                        break;
+
+                        case ID_PASTE:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_RESTART);
+                        break;
+
+                        case ID_UNDO:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_HELP);
+                        break;
+
+                        case ID_REDO:
+                            lpttt->lpszText = MAKEINTRESOURCE(IDS_TOOLTIP_EXIT);
+                        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_REFRESH:
+                break;
+
+
+                case ID_HELP:
+                    MessageBox(NULL, _T("Help is not yet implemented\n"),
+                        _T("Note!"), MB_OK | MB_ICONINFORMATION);
+                break;
+
+                case ID_EXIT:
+                    PostMessage(hwnd, WM_CLOSE, 0, 0);
+                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:
+				{
+					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;
+}
+
+
+void GetLargestDisplayMode(int *pcxBitmap, int *pcyBitmap)
+{
+     DEVMODE devmode;
+     int     iModeNum = 0;
+
+     *pcxBitmap = *pcyBitmap = 0;
+
+     ZeroMemory(&devmode, sizeof(DEVMODE));
+     devmode.dmSize = sizeof(DEVMODE);
+
+     while (EnumDisplaySettings (NULL, iModeNum++, &devmode))
+     {
+          *pcxBitmap = max (*pcxBitmap, (int) devmode.dmPelsWidth);
+          *pcyBitmap = max (*pcyBitmap, (int) devmode.dmPelsHeight);
+     }
+}
+
+
+
+LRESULT CALLBACK MDIChildWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
+{
+     static BOOL    fLeftButtonDown, fRightButtonDown ;
+     static HBITMAP hBitmap;
+     static HDC     hdcMem;
+     static int     cxBitmap, cyBitmap, 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);
+            EnableMenuItem(hMenu, 2, MF_BYPOSITION | EnableFlag);
+            EnableMenuItem(hMenu, 3, MF_BYPOSITION | EnableFlag);
+
+            hFileMenu = GetSubMenu(hMenu, 0);
+//			EnableMenuItem(hFileMenu, ID_FILE_SAVEAS, MF_BYCOMMAND | EnableFlag);
+
+//			EnableMenuItem(hFileMenu, ID_FILE_CLOSE, MF_BYCOMMAND | EnableFlag);
+//			EnableMenuItem(hFileMenu, ID_FILE_CLOSEALL, MF_BYCOMMAND | EnableFlag);
+
+            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))
+			{
+/*				case ID_OPEN:
+					DoFileOpen(hwnd);
+				break;
+				case ID_SAVEAS:
+					DoFileSave(hwnd);
+				break;
+				case ID_CUT:
+					SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_CUT, 0, 0);
+				break;
+				case ID_COPY:
+					SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_COPY, 0, 0);
+				break;
+				case ID_PASTE:
+					SendDlgItemMessage(hwnd, IDC_CHILD_EDIT, WM_PASTE, 0, 0);
+*/				break;
+			}
+		break;
+
+		case WM_SIZE:
+            return DefMDIChildProc(hwnd, msg, wParam, lParam);
+
+		default:
+			return DefMDIChildProc(hwnd, msg, wParam, lParam);
+
+	}
+	return 0;
+}
+
+
+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		 = LoadIcon(NULL, IDI_APPLICATION);
+
+	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;
+
+    hInstance = hThisInstance;
+
+    InitCommonControls();
+
+    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;
+}

Added: trunk/reactos/base/applications/imagesoft/paint.h
--- trunk/reactos/base/applications/imagesoft/paint.h	2006-02-12 22:21:56 UTC (rev 112)
+++ trunk/reactos/base/applications/imagesoft/paint.h	2006-02-14 17:39:13 UTC (rev 113)
@@ -0,0 +1,17 @@
+#ifndef __PAINT_H
+#define __PAINT_H
+
+//#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <windowsx.h> /* GET_X/Y_LPARAM */
+#include <stdio.h>
+#include <tchar.h>
+#include <commctrl.h>
+#include "resource.h"
+
+#define MAX_KEY_LENGTH 256
+#define NUM_BUTTONS 13
+
+BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
+
+#endif /* __SERVMAN_H */

Added: trunk/reactos/base/applications/imagesoft/paint.rc
--- trunk/reactos/base/applications/imagesoft/paint.rc	2006-02-12 22:21:56 UTC (rev 112)
+++ trunk/reactos/base/applications/imagesoft/paint.rc	2006-02-14 17:39:13 UTC (rev 113)
@@ -0,0 +1,17 @@
+#include <windows.h>
+#include <commctrl.h>
+#include "resource.h"
+
+
+//#define REACTOS_STR_FILE_DESCRIPTION	"ReactOS Service Manager\0"
+//#define REACTOS_STR_INTERNAL_NAME	"services\0"
+//#define REACTOS_STR_ORIGINAL_FILENAME	"services.exe\0"
+//#include <reactos/version.rc>
+
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+
+IDI_ICON ICON "res/ImageSoft.ico"
+
+#include "En.rc"
+
+

Added: trunk/reactos/base/applications/imagesoft/res/imagesoft.ico
(Binary files differ)
Property changes on: trunk/reactos/base/applications/imagesoft/res/imagesoft.ico
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/reactos/base/applications/imagesoft/resource.h
--- trunk/reactos/base/applications/imagesoft/resource.h	2006-02-12 22:21:56 UTC (rev 112)
+++ trunk/reactos/base/applications/imagesoft/resource.h	2006-02-14 17:39:13 UTC (rev 113)
@@ -0,0 +1,68 @@
+#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_SAVE             2003
+#define ID_SAVEAS           2004
+#define ID_PRINTPRE         2005
+#define ID_PRINT            2006
+#define ID_PROP             2007
+#define ID_CUT              2008
+#define ID_COPY             2009
+#define ID_PASTE            2010
+#define ID_PASTENEWIMAGE    2011
+#define ID_UNDO             2012
+#define ID_REDO             2013
+#define ID_SELALL           2014
+#define ID_EXIT             2015
+
+#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_PROP    6000
+#define IDS_TOOLTIP_REFRESH 6001
+#define IDS_TOOLTIP_EXPORT  6002
+#define IDS_TOOLTIP_START   6003
+#define IDS_TOOLTIP_STOP    6004
+#define IDS_TOOLTIP_PAUSE   6005
+#define IDS_TOOLTIP_RESTART 6006
+#define IDS_TOOLTIP_NEW     6007
+#define IDS_TOOLTIP_HELP    6008
+#define IDS_TOOLTIP_EXIT    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