mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 16:32:59 +00:00
add image editing software started in audited repo
svn path=/trunk/; revision=21164
This commit is contained in:
parent
db000e5299
commit
11c3ca9f05
10 changed files with 1060 additions and 0 deletions
|
@ -19,6 +19,9 @@
|
||||||
<directory name="ibrowser">
|
<directory name="ibrowser">
|
||||||
<xi:include href="ibrowser/ibrowser.rbuild" />
|
<xi:include href="ibrowser/ibrowser.rbuild" />
|
||||||
</directory>
|
</directory>
|
||||||
|
<directory name="imagesoft">
|
||||||
|
<xi:include href="imagesoft/imagesoft.rbuild" />
|
||||||
|
</directory>
|
||||||
<directory name="msconfig">
|
<directory name="msconfig">
|
||||||
<xi:include href="msconfig/msconfig.rbuild" />
|
<xi:include href="msconfig/msconfig.rbuild" />
|
||||||
</directory>
|
</directory>
|
||||||
|
|
44
reactos/base/applications/imagesoft/about.c
Normal file
44
reactos/base/applications/imagesoft/about.c
Normal 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;
|
||||||
|
}
|
107
reactos/base/applications/imagesoft/en.rc
Normal file
107
reactos/base/applications/imagesoft/en.rc
Normal 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
|
682
reactos/base/applications/imagesoft/imagesoft.c
Normal file
682
reactos/base/applications/imagesoft/imagesoft.c
Normal 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;
|
||||||
|
}
|
21
reactos/base/applications/imagesoft/imagesoft.h
Normal file
21
reactos/base/applications/imagesoft/imagesoft.h
Normal 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 */
|
27
reactos/base/applications/imagesoft/imagesoft.rbuild
Normal file
27
reactos/base/applications/imagesoft/imagesoft.rbuild
Normal 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>
|
16
reactos/base/applications/imagesoft/imagesoft.rc
Normal file
16
reactos/base/applications/imagesoft/imagesoft.rc
Normal 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"
|
||||||
|
|
||||||
|
|
90
reactos/base/applications/imagesoft/opensave.c
Normal file
90
reactos/base/applications/imagesoft/opensave.c
Normal 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);
|
||||||
|
}
|
||||||
|
|
BIN
reactos/base/applications/imagesoft/res/imagesoft.ico
Normal file
BIN
reactos/base/applications/imagesoft/res/imagesoft.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
70
reactos/base/applications/imagesoft/resource.h
Normal file
70
reactos/base/applications/imagesoft/resource.h
Normal 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
|
Loading…
Add table
Add a link
Reference in a new issue