add image editing software started in audited repo

svn path=/trunk/; revision=21164
This commit is contained in:
Ged Murphy 2006-02-19 17:13:10 +00:00
parent db000e5299
commit 11c3ca9f05
10 changed files with 1060 additions and 0 deletions

View file

@ -19,6 +19,9 @@
<directory name="ibrowser">
<xi:include href="ibrowser/ibrowser.rbuild" />
</directory>
<directory name="imagesoft">
<xi:include href="imagesoft/imagesoft.rbuild" />
</directory>
<directory name="msconfig">
<xi:include href="msconfig/msconfig.rbuild" />
</directory>

View file

@ -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;
}

View file

@ -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

View file

@ -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;
}

View file

@ -0,0 +1,21 @@
#ifndef __IMAGESOFT_H
#define __IMAGESOFT_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);
VOID FileInitialize (HWND hwnd);
VOID DoOpenFile(HWND hwnd);
VOID DoSaveFile(HWND hwnd);
#endif /* __IMAGESOFT_H */

View file

@ -0,0 +1,27 @@
<?xml version="1.0"?>
<rbuild xmlns:xi="http://www.w3.org/2001/XInclude">
<module name="imagesoft" type="win32gui" installbase="system32" installname="imagesoft.exe">
<include base="imagesoft">.</include>
<define name="UNICODE" />
<define name="_UNICODE" />
<define name="__REACTOS__" />
<define name="__USE_W32API" />
<define name="_WIN32_IE">0x600</define>
<define name="_WIN32_WINNT">0x501</define>
<library>kernel32</library>
<library>gdi32</library>
<library>user32</library>
<library>advapi32</library>
<library>version</library>
<library>comctl32</library>
<library>shell32</library>
<library>comdlg32</library>
<compilationunit name="unit.c">
<file>imagesoft.c</file>
<file>about.c</file>
<file>opensave.c</file>
</compilationunit>
<file>imagesoft.rc</file>
<pch>imagesoft.h</pch>
</module>
</rbuild>

View file

@ -0,0 +1,16 @@
#include <windows.h>
#include <commctrl.h>
#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 <reactos/version.rc>
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDI_ICON ICON "res/imagesoft.ico"
#include "En.rc"

View file

@ -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);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View file

@ -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