From 1dbace5248c85f4b720a5809f4609f0d29d73991 Mon Sep 17 00:00:00 2001 From: Katayama Hirofumi MZ Date: Sat, 1 Nov 2008 23:33:07 +0900 Subject: [PATCH] [18/19] mspaint: Add [Copy To] and [Paste From] commands --- programs/mspaint/paint.c | 113 +++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 111 insertions(+), 2 deletions(-) diff --git a/programs/mspaint/paint.c b/programs/mspaint/paint.c index ce65f4a..f0ae687 100644 --- a/programs/mspaint/paint.c +++ b/programs/mspaint/paint.c @@ -553,12 +553,121 @@ VOID PAINT_ClearSelection(VOID) VOID PAINT_CopyTo(VOID) { - NotSupportedYet(); + OPENFILENAME ofn; + WCHAR szFileName[MAX_PATH]; + WCHAR szDir[MAX_PATH]; + BOOL fModified; + static const WCHAR szDefaultExt[] = { 'b','m','p',0 }; + static const WCHAR bmp_files[] = { '*','.','b','m','p',0 }; + + fModified = Globals.fModified; + Selection_TakeOff(); + + ZeroMemory(&ofn, sizeof(ofn)); + + GetCurrentDirectory(MAX_PATH, szDir); + lstrcpy(szFileName, bmp_files); + + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = Globals.hMainWnd; + ofn.hInstance = Globals.hInstance; + ofn.lpstrFilter = Globals.szFilter; + ofn.lpstrFile = szFileName; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrInitialDir = szDir; + ofn.Flags = OFN_PATHMUSTEXIST | OFN_OVERWRITEPROMPT | + OFN_HIDEREADONLY; + ofn.lpstrDefExt = szDefaultExt; + + if (!GetSaveFileName(&ofn)) + return; + + BM_Save(szFileName, Globals.hbmSelect); + Selection_Land(); + Globals.fModified = fModified; + + InvalidateRect(Globals.hCanvasWnd, NULL, TRUE); + UpdateWindow(Globals.hCanvasWnd); } VOID PAINT_PasteFrom(VOID) { - NotSupportedYet(); + OPENFILENAME ofn; + WCHAR szFileName[MAX_PATH]; + WCHAR szDir[MAX_PATH]; + BITMAP bm; + HBITMAP hbm; + SIZE siz; + static const WCHAR szDefaultExt[] = { 'b','m','p',0 }; + static const WCHAR bmp_files[] = { '*','.','b','m','p',0 }; + + Selection_Land(); + + ZeroMemory(&ofn, sizeof(ofn)); + + GetCurrentDirectory(MAX_PATH, szDir); + lstrcpy(szFileName, bmp_files); + + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = Globals.hMainWnd; + ofn.hInstance = Globals.hInstance; + ofn.lpstrFilter = Globals.szFilter; + ofn.lpstrFile = szFileName; + ofn.nMaxFile = MAX_PATH; + ofn.lpstrInitialDir = szDir; + ofn.Flags = OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | + OFN_HIDEREADONLY; + ofn.lpstrDefExt = szDefaultExt; + + if (!GetOpenFileName(&ofn)) + return; + + if (!FileExists(szFileName)) + { + AlertFileNotFound(szFileName); + return; + } + + Globals.iToolPrev = Globals.iToolSelect; + Globals.iToolSelect = TOOL_BOXSELECT; + InvalidateRect(Globals.hToolBox, NULL, TRUE); + UpdateWindow(Globals.hToolBox); + + hbm = BM_Load(szFileName); + if (hbm != NULL) + { + Globals.fSelect = TRUE; + if (Globals.hbmSelect != NULL) + DeleteObject(Globals.hbmSelect); + Globals.hbmSelect = hbm; + GetObject(hbm, sizeof(BITMAP), &bm); + + if (Globals.sizImage.cx < bm.bmWidth || + Globals.sizImage.cy < bm.bmHeight) + { + siz.cx = bm.bmWidth; + siz.cy = bm.bmHeight; + Canvas_Resize(Globals.hCanvasWnd, siz); + Globals.sizImage = siz; + Globals.pt0.x = 0; + Globals.pt0.y = 0; + Globals.pt1.x = bm.bmWidth; + Globals.pt1.y = bm.bmHeight; + } + else + { + Globals.pt0.x = Globals.xScrollPos / Globals.nZoom; + Globals.pt0.y = Globals.yScrollPos / Globals.nZoom; + Globals.pt1.x = Globals.pt0.x + bm.bmWidth; + Globals.pt1.y = Globals.pt0.y + bm.bmHeight; + } + + PostMessage(Globals.hCanvasWnd, WM_SIZE, 0, 0); + InvalidateRect(Globals.hCanvasWnd, NULL, TRUE); + UpdateWindow(Globals.hCanvasWnd); + } + else + ShowLastError(); } VOID PAINT_EditSelectAll(VOID) -- 1.6.0.2