Index: base/applications/mspaint/winproc.c =================================================================== --- base/applications/mspaint/winproc.c (revision 60865) +++ base/applications/mspaint/winproc.c (working copy) @@ -158,6 +158,27 @@ } } +void +InsertSelectionFromHBITMAP(HBITMAP bitmap, HWND window) +{ + HWND hToolbar = FindWindowEx(hToolBoxContainer, NULL, TOOLBARCLASSNAME, NULL); + SendMessage(hToolbar, TB_CHECKBUTTON, ID_RECTSEL, MAKELONG(TRUE, 0)); + SendMessage(window, WM_COMMAND, ID_RECTSEL, 0); + + DeleteObject(SelectObject(hSelDC, hSelBm = CopyImage(bitmap, + IMAGE_BITMAP, 0, 0, + LR_COPYRETURNORG))); + newReversible(); + rectSel_src[0] = rectSel_src[1] = rectSel_src[2] = rectSel_src[3] = 0; + rectSel_dest[0] = rectSel_dest[1] = 0; + rectSel_dest[2] = GetDIBWidth(hSelBm); + rectSel_dest[3] = GetDIBHeight(hSelBm); + BitBlt(hDrawingDC, rectSel_dest[0], rectSel_dest[1], rectSel_dest[2], rectSel_dest[3], + hSelDC, 0, 0, SRCCOPY); + placeSelWin(); + ShowWindow(hSelection, SW_SHOW); +} + BOOL drawing; LRESULT CALLBACK @@ -844,22 +865,7 @@ OpenClipboard(hMainWnd); if (GetClipboardData(CF_BITMAP) != NULL) { - HWND hToolbar = FindWindowEx(hToolBoxContainer, NULL, TOOLBARCLASSNAME, NULL); - SendMessage(hToolbar, TB_CHECKBUTTON, ID_RECTSEL, MAKELONG(TRUE, 0)); - SendMessage(hwnd, WM_COMMAND, ID_RECTSEL, 0); - - DeleteObject(SelectObject(hSelDC, hSelBm = CopyImage(GetClipboardData(CF_BITMAP), - IMAGE_BITMAP, 0, 0, - LR_COPYRETURNORG))); - newReversible(); - rectSel_src[0] = rectSel_src[1] = rectSel_src[2] = rectSel_src[3] = 0; - rectSel_dest[0] = rectSel_dest[1] = 0; - rectSel_dest[2] = GetDIBWidth(hSelBm); - rectSel_dest[3] = GetDIBHeight(hSelBm); - BitBlt(hDrawingDC, rectSel_dest[0], rectSel_dest[1], rectSel_dest[2], rectSel_dest[3], - hSelDC, 0, 0, SRCCOPY); - placeSelWin(); - ShowWindow(hSelection, SW_SHOW); + InsertSelectionFromHBITMAP(GetClipboardData(CF_BITMAP), hwnd); } CloseClipboard(); break; @@ -895,6 +901,18 @@ if (GetSaveFileName(&ofn) != 0) SaveDIBToFile(hSelBm, ofn.lpstrFile, hDrawingDC, NULL, NULL, fileHPPM, fileVPPM); break; + case IDM_EDITPASTEFROM: + if (GetOpenFileName(&ofn) != 0) + { + HBITMAP bmNew = NULL; + LoadDIBFromFile(&bmNew, ofn.lpstrFile, &fileTime, &fileSize, &fileHPPM, &fileVPPM); + if (bmNew != NULL) + { + InsertSelectionFromHBITMAP(bmNew, hwnd); + DeleteObject(bmNew); + } + } + break; case IDM_COLORSEDITPALETTE: if (ChooseColor(&choosecolor)) {