void LoadPuzzleImage(HWND hWnd) { char szTemp[MAX_PATH]; char szFname[MAX_PATH]; BOOL bLoad; HWND hImageCtrl = GetDlgItem(hWnd, IDC_PUZZLE_IMAGE); if (hImageCtrl) { lstrcpy(szTemp, GetString (IDS_PUZZLE, NULL)); wsprintf(szFname, szTemp, iHardness); PathCat(szPreview,Control.PouchPath,szFname); bLoad = AstralImageLoad(0, szPreview, TRUE, FALSE); if (bLoad && lpImage) { // set in the image and tool proc SetWindowLong(hImageCtrl, GWL_IMAGE, (long) ImgGetBase (lpImage)); SetWindowLong(hImageCtrl, GWL_IMAGE_TOOLPROC, (long) PuzzleProc); ShowWindow(hImageCtrl, SW_SHOW); AstralControlPaint(hWnd, IDC_PUZZLE_IMAGE); } } }
BOOL WINPROC EXPORT DlgGalleryProc( /***********************************************************************/ HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { FNAME szTitleSave; BOOL bUntitledSave; switch (msg) { case WM_INITDIALOG: SetControlFont (hDlg, IDC_GALLERY_T1); SetControlFont (hDlg, IDC_GALLERY_T2); SetControlFont (hDlg, IDC_GALLERY_T3); SetControlFont (hDlg, IDC_GALLERY_T4); RibbonInit( hDlg ); // fall thru... case WM_CONTROLENABLE: case WM_DOCACTIVATED: break; case WM_SETCURSOR: return( SetupCursor( wParam, lParam, IDD_FILL ) ); case WM_ERASEBKGND: break; // handle ERASEBKGND and do nothing; PAINT covers everything case WM_PAINT: LayoutPaint( hDlg ); break; case WM_CLOSE: AstralDlgEnd( hDlg, NO|2); break; case WM_MEASUREITEM: case WM_DRAWITEM: return( OwnerDraw( hDlg, msg, lParam, NO ) ); case WM_CTLCOLOR: return( (BOOL)SetControlColors( (HDC)wParam, hDlg, (HWND)LOWORD(lParam), HIWORD(lParam) ) ); case WM_COMMAND: switch (wParam) { case IDC_GALLERY_T1: // Save to Disk SendMessage( hWndAstral, WM_COMMAND, IDM_SAVESPECIAL, 0L ); break; case IDC_GALLERY_T2: // Print SendMessage( hWndAstral, WM_COMMAND, IDM_PRINT, 0L ); break; case IDC_GALLERY_T3: // To Floppy bSaving = TRUE; AstralDlg (NO|2, hInstAstral, hDlg, IDD_SAVEFLOPPY, (DLGPROC)DlgFloppyProc); if (szFileSpec[0] != 0) { bUntitledSave = lpImage->fUntitled; lpImage->fUntitled = FALSE; lstrcpy (szTitleSave, lpImage->CurFile); lstrcpy (lpImage->CurFile, szFileSpec); SendMessage (hWndAstral, WM_COMMAND, IDM_SAVESPECIAL, 0L); lstrcpy (lpImage->CurFile, szTitleSave); lpImage->fUntitled = bUntitledSave; } break; case IDC_GALLERY_T4: // From Floppy bSaving = FALSE; AstralDlg (NO|2, hInstAstral, hDlg, IDD_LOADFLOPPY, (DLGPROC)DlgFloppyProc); if (szFileSpec[0] != 0) { AstralImageLoad (IDN_ART, szFileSpec, MAYBE, NO); } break; default: return( FALSE ); } default: return( FALSE ); } return( TRUE ); }
BOOL WINPROC EXPORT DlgRoomDot2Dot (HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) { BOOL bHandled = TRUE; char szTemp[MAX_PATH]; HWND hImageCtrl; switch (wMsg) { case WM_COMMAND: switch (wParam) { case HS_COVER: ShowControls(hWnd, TRUE); ShowCoverAnimatedButtons(hWnd, TRUE); break; case HS_SHOW_ME: iActiveDot = 0; bPlaying = FALSE; UpdateDot2DotImage(hWnd, NULL); break; case HS_COLORME_ME: RemoveCodedBackground(); GoPaintApp (hWnd,szPreview); break; case HS_TAB1: case HS_TAB2: case HS_TAB3: case HS_TAB4: case HS_TAB5: case HS_TAB6: case HS_TAB7: case HS_TAB8: { BOOL bLoad; ShowCoverAnimatedButtons(hWnd, FALSE); ShowControls(hWnd, FALSE); hImageCtrl = GetDlgItem(hWnd, IDC_HIDDEN_IMAGE); if (hImageCtrl) { wsprintf (szTemp,GetString (IDS_CIRCUS, NULL),wParam - HS_TAB1 + 1); PathCat (szPreview,Control.PouchPath,szTemp); bLoad = AstralImageLoad( 0, szPreview, TRUE, FALSE); if (bLoad && lpImage) { bPlaying = TRUE; SetWindowLong(hImageCtrl, GWL_IMAGE, (long) ImgGetBase (lpImage)); SetWindowLong(hImageCtrl, GWL_IMAGE_TOOLPROC, (long) Dot2DotProc); InitPoints(); ImgSetPixelProc(Dot2DotPixelProc); ShowWindow(hImageCtrl, SW_SHOW); UpdateDot2DotImage(hWnd, NULL); } } } // HS_TABS SoundStartID(HS_XTRA_CIRCUS, FALSE, 0); break; default: bHandled = FALSE; } // switch (wParam) break; case WM_INITDIALOG: hDot2DotWnd = hWnd; ShowControls(hWnd, TRUE); bHandled = FALSE; // allow DefRoomProc to be called. break; case WM_DESTROY: ImgSetPixelProc(NULL); // make sure our proc is no longer used bHandled = FALSE; // allow DefRoomProc to be called break; case WM_PAINT: hImageCtrl = GetDlgItem(hWnd, IDC_HIDDEN_IMAGE); DefRoomProc (hWnd,wMsg,wParam,lParam); UpdateWindow(hImageCtrl); PaintDot2Dots(hImageCtrl); break; default: bHandled = FALSE; } // switch (wMsg) if (!bHandled) bHandled = DefRoomProc (hWnd,wMsg,wParam,lParam); return bHandled; }
BOOL HandleCommandLine( HWND hWindow, LPTSTR lpszCmdLine, LPINT lpPrint ) /***********************************************************************/ { FNAME szFileName; LPTSTR lp; BOOL bPassedByClient; LPIMAGE lpImageDoc; HWND hWnd; WORD wChar; *lpPrint = NO; if( !lpszCmdLine ) return( TRUE ); // Check if we have "[/ | -]embedding" and a possible filename. // usage: PP ["[-/]embedding"] file1 file2 ... //dbg("full command line = '%ls'", lpszCmdLine ); // See if the command line is being passed by a client bPassedByClient = NO; if(( lp = lstrfind( lpszCmdLine, _T("embedding") )) && ( lp == lpszCmdLine || lp == ( MyCharNext( lpszCmdLine )))) { // Command line passed by a client // dbg(_T("command line passed by client")); bPassedByClient = YES; lpszCmdLine = SkipSpaces( MyCharNextN( lp, 9 )); // skip over _T("embedding") } while( *lpszCmdLine ) // Process any files and switches on the command line { // Skip white space and see if we're done... lpszCmdLine = SkipSpaces( lpszCmdLine ); if( !( *lpszCmdLine )) // If NULL get out break; // dbg( _T("file='%ls' print=%d"), lpszCmdLine, *lpPrint );dbg(0); // Check for any switches preceeding the file name: only /p for now while( TRUE ) { if( IsDBCSLeadByte(( BYTE )*lpszCmdLine )) wChar = *(( LPWORD )lpszCmdLine ); else wChar = *lpszCmdLine; if( wChar != _T('/')) // if not a switch... break; lpszCmdLine = MyCharNext( lpszCmdLine ); // Skip over the slash if( !*lpszCmdLine ) // If NULL get out break; if( IsDBCSLeadByte(( BYTE )*lpszCmdLine )) wChar = *(( LPWORD )lpszCmdLine ); else wChar = *lpszCmdLine; if( wChar == _T('p') || wChar == _T('P') ) *lpPrint = YES; lpszCmdLine = SkipSpaces( MyCharNext( lpszCmdLine )); } // Skip white space and see if we're done... lpszCmdLine = SkipSpaces( lpszCmdLine ); if( !( *lpszCmdLine )) // If NULL get out break; // Try to zap the space after a single file name if(( lp = lstrfind( lpszCmdLine, _T(" ") ))) *lp = _T('\0'); // If we found a space, zap it // Copy the full path name into szFileName if( lStrChr( lpszCmdLine, _T('\\') )) lstrcpy( szFileName, lpszCmdLine ); else // If not a full path name... { GetCurrentDir( szFileName, sizeof(FNAME) ); FixPath( szFileName ); lstrcat( szFileName, lpszCmdLine ); } // Now we're done with lpszCmdLine, so set it up for the next loop // If we had found a space, there might be more file names if( lp ) lpszCmdLine = MyCharNext( lp ); else lpszCmdLine += lstrlen( lpszCmdLine ); // Point to nothing // Process szFileName // Special handling of documents passed by a client if ( bPassedByClient ) { CServerDoc *pDoc = PictPubApp.GetDocument(szFileName); if (pDoc) { // It's already open.... POSITION ViewPos = pDoc->GetFirstViewPosition(); ASSERT(ViewPos!=NULL); CView* pView = pDoc->GetNextView( ViewPos ); ASSERT(pView); // NOTE send Message to View's Parent MDIFrame SendMessage( PictPubApp.Get_hClientAstral(), WM_MDIACTIVATE, (WORD)pView->GetParentFrame()->GetSafeHwnd(), 0L ); lpImageDoc->fOwnedByClient = YES; *szFileName = _T('\0'); // Zap it } } // If we have a file name, open it... if ( *szFileName ) hWnd = AstralImageLoad( 0, szFileName, MAYBE, YES ); else hWnd = NULL; // If the printing option was passed, print it and close it if ( hWnd && *lpPrint ) { FORWARD_WM_COMMAND(PictPubApp.Get_hWndAstral(), IDM_PRINT, NULL, 0, SendMessage); CloseImage( NO, NULL, NULL ); } } return( TRUE ); }
BOOL WINPROC EXPORT DlgRoomMazes (HWND hWnd,UINT wMsg,WPARAM wParam,LPARAM lParam) { BOOL bHandled = TRUE; char szTemp[MAX_PATH]; HWND hCtl; switch (wMsg) { case WM_COMMAND: switch (wParam) { case HS_COVER: StopAnimation(); ShowCoverAnimatedButtons(hWnd, TRUE); hCtl = GetDlgItem (hWnd,IDC_HIDDEN_IMAGE); ShowWindow (hCtl,SW_HIDE); if (idCurrentRoom == RM_MAILMAZE) { hCtl = GetDlgItem (hWnd,HS_LOGO_MAILMAZE); ShowWindow (hCtl,SW_SHOW); hCtl = GetDlgItem (hWnd,HS_XTRA_MAILMAZE); ShowWindow (hCtl,SW_HIDE); hCtl = GetDlgItem (hWnd,HS_RESTART); ShowWindow (hCtl,SW_HIDE); } else if (idCurrentRoom == RM_MAZES) { hCtl = GetDlgItem (hWnd,HS_LOGO_MAZES); ShowWindow (hCtl,SW_SHOW); hCtl = GetDlgItem (hWnd,HS_XTRA_MAZES); ShowWindow (hCtl,SW_HIDE); hCtl = GetDlgItem (hWnd,HS_RESTART); ShowWindow (hCtl,SW_HIDE); } bHandled = FALSE; break; case HS_TAB1: case HS_TAB2: case HS_TAB3: case HS_TAB4: case HS_TAB5: case HS_TAB6: case HS_TAB7: case HS_TAB8: StopAnimation(); ShowCoverAnimatedButtons(hWnd, FALSE); bTrack = FALSE; if (idCurrentRoom == RM_MAILMAZE) wsprintf (szTemp,GetString (IDS_MAILMAZE,NULL),wParam - HS_TAB1 + 1); else if (idCurrentRoom == RM_MAZES) wsprintf (szTemp,GetString (IDS_MAZES,NULL),wParam - HS_TAB1 + 1); PathCat (szPreview,Control.PouchPath,szTemp); AstralImageLoad (IDN_ART,szPreview,MAYBE,NO); if (lpImage) { bShowSolution = bSolved = FALSE; ImgSetPixelProc (MazePixelProc); hCtl = GetDlgItem (hWnd,IDC_HIDDEN_IMAGE); SetWindowLong (hCtl,GWL_IMAGE,(long) ImgGetBase (lpImage)); SetWindowLong (hCtl,GWL_IMAGE_TOOLPROC,(long)MazeToolProc); ShowWindow (hCtl,SW_SHOW); InvalidateRect (hCtl,NULL,FALSE); if (idCurrentRoom == RM_MAILMAZE) { hCtl = GetDlgItem (hWnd,HS_LOGO_MAILMAZE); ShowWindow (hCtl,SW_HIDE); hCtl = GetDlgItem (hWnd,HS_XTRA_MAILMAZE); ShowWindow (hCtl,SW_SHOW); hCtl = GetDlgItem (hWnd,HS_RESTART); ShowWindow (hCtl,SW_SHOW); } else if (idCurrentRoom == RM_MAZES) { hCtl = GetDlgItem (hWnd,HS_LOGO_MAZES); ShowWindow (hCtl,SW_HIDE); hCtl = GetDlgItem (hWnd,HS_XTRA_MAZES); ShowWindow (hCtl,SW_SHOW); hCtl = GetDlgItem (hWnd,HS_RESTART); ShowWindow (hCtl,SW_SHOW); } bHandled = FALSE; } #ifdef STUDIO SoundStartID(HS_XTRA_MAILMAZE, FALSE, 0); #else SoundStartID(HS_XTRA_MAZES, FALSE, 0); #endif break; case HS_COLORME: StopAnimation(); GoPaintApp (hWnd,szPreview); break; case HS_SHOWME: case HS_RESTART: bTrack = FALSE; bShowSolution = (wParam == HS_SHOWME); hCtl = GetDlgItem (hWnd,IDC_HIDDEN_IMAGE); StopAnimation(); InvalidateRect (hCtl,NULL,FALSE); UpdateWindow (hCtl); if (wParam == HS_SHOWME) StartAnimation(hCtl); break; default: bHandled = FALSE; } break; case WM_INITDIALOG: hMazePen = CreatePen (PS_SOLID,3,RGB (0,0,255)); bHandled = FALSE; break; case WM_DESTROY: StopAnimation(); ImgSetPixelProc (NULL); if (hMazePen) { DeleteObject (hMazePen); hMazePen = 0; } bHandled = FALSE; break; default: bHandled = FALSE; } if (!bHandled) bHandled = DefRoomProc (hWnd,wMsg,wParam,lParam); return bHandled; }
BOOL HandleCommandLine( /***********************************************************************/ HWND hWindow, LPSTR lpszCmdLine, LPINT lpPrint) { FNAME szFileName; LPSTR lp; BOOL bPassedByClient, bGotImage; LPIMAGE lpImageDoc; HWND hWnd; int i; bPaintAppActive = TRUE; *lpPrint = NO; if ( !lpszCmdLine ) { // If no command line, bring up an empty image SendMessage( hWindow, WM_COMMAND, IDM_NEW, 0L ); if ( (hWnd = AstralDlgGet(IDD_MAIN)) && !IsWindowVisible( hWnd ) ) ShowWindow( hWnd, SW_SHOW ); return( TRUE ); } // Check if we have "[/ | -]embedding" and a possible filename. // usage: PP ["[-/]embedding"] file1 file2 ... // See if the command line is being passed by a client bPassedByClient = NO; if ( (lp = lstrfind( lpszCmdLine, "embedding" )) && (lp == lpszCmdLine || lp == (lpszCmdLine+1)) ) { // Command line passed by a client bPassedByClient = YES; lpszCmdLine = SkipSpaces( lp + 9 ); // skip over "embedding" } bGotImage = NO; while ( *lpszCmdLine ) { // Process any files and switches on the command line // Skip white space and see if we're done... lpszCmdLine = SkipSpaces( lpszCmdLine ); if ( !(*lpszCmdLine ) ) break; // If NULL get out // Check for any switches preceeding the file name: only /p for now while ( *lpszCmdLine == '/' ) { // a switch... lpszCmdLine++; // Skip over the slash if ( !*lpszCmdLine ) break; // If NULL get out if ( *lpszCmdLine == 'p' || *lpszCmdLine == 'P' ) *lpPrint = YES; lpszCmdLine++; // Skip the option character lpszCmdLine = SkipSpaces( lpszCmdLine ); } // Skip white space and see if we're done... lpszCmdLine = SkipSpaces( lpszCmdLine ); if ( !(*lpszCmdLine ) ) break; // If NULL get out // Try to zap the space after a single file name if ( (lp = lstrfind( lpszCmdLine, " " )) ) *lp = '\0'; // If we found a space, zap it // Copy the full path name into szFileName #ifdef _MAC lstrcpy( szFileName, lpszCmdLine ); #else if ( lstrchr( lpszCmdLine, '\\' ) ) lstrcpy( szFileName, lpszCmdLine ); else { // If not a full path name... GetCurrentDir( szFileName, sizeof(FNAME) ); FixPath( szFileName ); lstrcat( szFileName, lpszCmdLine ); } #endif // Now we're done with lpszCmdLine, so set it up for the next loop if ( lp ) // If we had found a space, there might be more file names lpszCmdLine = lp + 1; else lpszCmdLine += lstrlen(lpszCmdLine); // Point to nothing // Special handling of documents passed by a client ////if ( bPassedByClient ) //// { // Loop through documents to see if it's already open for ( i=0; i<NumDocs(); i++ ) { hWnd = GetDoc(i); if ( !(lpImageDoc = (LPIMAGE)GetWindowLong( hWnd, GWL_IMAGEPTR ))) continue; if ( !StringsEqual( lpImageDoc->CurFile, szFileName ) ) continue; // It's already open.... SendMessage( hClientAstral, WM_MDIACTIVATE, (WPARAM)hWnd, 0L ); if ( bPassedByClient ) lpImageDoc->fOwnedByClient = YES; szFileName[0] = '\0'; // Zap it bGotImage = YES; break; } //// } // If we have a file name, open it... if ( *szFileName ) { if ( AstralImageLoad( NULL, szFileName, MAYBE, YES ) ) bGotImage = YES; } // If the printing option was passed, print it and close it if ( *lpPrint && lpImage ) { SendMessage(hWndAstral, WM_COMMAND, IDM_PRINT, 0L ); CloseImage( NO, NULL ); } } if ( !bGotImage ) { if ( !idCurrentRoom ) { GoRoom (hInstAstral, -1, FALSE); return( FALSE ); } // If no image was opened via the command line, go to the opening screen SendMessage( hWindow, WM_COMMAND, IDM_NEW, 0L ); } if ( (hWnd = AstralDlgGet(IDD_MAIN)) && !IsWindowVisible( hWnd ) ) ShowWindow( hWnd, SW_SHOW ); return( TRUE ); }
long DoCommand( HWND hWindow, WPARAM wParam, LPARAM lParam ) /***********************************************************************/ { FNAME szFileName; LPFRAME lpFrame; LPOBJECT lpObject, lpBase; RECT rect, rMask, rTemp, rAll; HWND hWnd; STRING szString; int i, idFileType, x, y, dx, dy; BOOL fDoZoom, bPrint, fHasZoom; LPSTR lpszCmdLine; HGLOBAL hMem; ITEMID idDataType; DWORD dwReturn; int NewShape; UINT wID; SoundStartID( wParam, NO/*bLoop*/, NULL/*hInstance*/ ); /* WIN16: ID = wParam ctrl handle = LOWORD(lParam) notify code = HIWORD(lParam) WIN32: ID = LOWORD(wParam) ctrl handle = lParam notify code = HIWORD(wParam) */ #ifdef WIN32 wID = LOWORD(wParam); #else wID = wParam; #endif switch (wID) { case IDM_EXIT: DeactivateTool(); PostMessage( hWndAstral, WM_CLOSE, 0, 0L); Delay (750); break; case IDM_CLOSE: DeactivateTool(); /* Check to see if the image needs to be saved */ if ( !ConfirmClose(NO,NO) ) break; CloseImage( NO, lpImage ); // Close the active image break; case IDM_ABOUT: /* Bring up the modal 'About' dialog box */ AstralDlg( NO|2, hInstAstral, hWindow, IDD_ABOUT, DlgAboutProc); break; case IDM_NEXTPAGE: if ( !lpImage ) break; DeactivateTool(); SendMessage( lpImage->hWnd, WM_SYSCOMMAND, SC_NEXTWINDOW, 0L ); break; case IDM_NEW: DeactivateTool(); SoundStartResource( "magic01", NO, NULL ); AstralCursor( IDC_WAIT ); New( Control.NewWidth, Control.NewHeight, Control.NewResolution, Control.NewDepth ); AstralCursor( NULL ); break; case IDM_OPEN: DeactivateTool(); /* Bring up the modal 'File Open' box */ if ( !(dwReturn = DoOpenDlg( hWindow, IDD_OPEN, Save.FileType, szFileName, NO )) ) break; idFileType = LOWORD( dwReturn ); Save.FileType = idFileType; PutDefaultInt( "FileType", idFileType - IDN_TIFF ); AstralImageLoad( idFileType, szFileName, MAYBE, YES ); break; case IDM_ALTOPEN: DeactivateTool(); // Command line sent from a second instance prior to it closing /* If the caller passed in a file name, try to load it or print it */ if ( !(lpszCmdLine = (LPSTR)lParam) ) break; HandleCommandLine( hWindow, lpszCmdLine, &bPrint ); break; case IDM_SAVE: DeactivateTool(); HandleSaveCommand(hWindow, wID, YES); break; case IDM_SAVEAS: DeactivateTool(); HandleSaveCommand(hWindow, wID, YES); break; case IDM_SAVESPECIAL: DeactivateTool(); HandleSaveCommand(hWindow, wID, YES); break; case IDM_SAVEWALLPAPER: DeactivateTool(); SaveWallpaper( "CRAYOLA", NO/*fTiled*/ ); break; case IDM_REVERT: if ( !lpImage ) break; DeactivateTool(); if ( lpImage->fUntitled ) // If the picture doesn't have a name, get out break; if ( ImgChanged(lpImage) ) { /* Check to see if its OK to trash changes */ if ( AstralOKCancel(IDS_OKTOREVERT, (LPSTR)lpImage->CurFile) == IDCANCEL ) break; } lstrcpy( szFileName, lpImage->CurFile ); idFileType = lpImage->FileType; fDoZoom = IsZoomed(lpImage->hWnd); fHasZoom = Window.fHasZoom; CloseImage( NO, lpImage ); // Close the active image if ( !AstralImageLoad( idFileType, szFileName, fDoZoom, YES ) ) break; break; case IDM_RECALLIMAGE0: case IDM_RECALLIMAGE1: case IDM_RECALLIMAGE2: case IDM_RECALLIMAGE3: case IDM_RECALLIMAGE4: case IDM_RECALLIMAGE5: case IDM_RECALLIMAGE6: case IDM_RECALLIMAGE7: case IDM_RECALLIMAGE8: case IDM_RECALLIMAGE9: DeactivateTool(); GetMenuString( GetMenu(hWindow), wID, szFileName, sizeof(szFileName), MF_BYCOMMAND ); i = 0; while ( szFileName[i] && szFileName[i] != ' ' ) i++; // Skip over the numeric id in the string (3. junk.tif) lstrcpy(szString, &szFileName[i+1]); GetRecallFileName(szString); AstralImageLoad( NULL, szString, MAYBE, YES ); break; case IDM_PRINT: if ( !lpImage ) break; DeactivateTool(); AstralCursor( IDC_WAIT ); DoPrintSizeInits(); SoundStartResource( "print", YES, NULL ); PrintFile( hWindow, filename(lpImage->CurFile), YES, lpImage, NULL ); SoundStop(); AstralCursor( NULL ); break; case IDM_PRINTSETUP: /* Bring up the setup dialog box for the active printer */ AstralDlg( NO|2, hInstAstral, hWindow, IDD_PRINTSETUP, DlgPrintSetupProc); break; case IDC_SOUND: SoundToggle(); break; case IDM_UNDO: if ( !lpImage ) break; DeactivateTool(); ImgEditUndo(lpImage, YES, NO); break; case IDM_CUT: case IDM_COPY: if ( !lpImage ) break; DeactivateTool(); // Create the clipboard files from the image ProgressBegin(1, IDS_PROGCOPY); if ( !ImgWriteClipOut( lpImage, NULL, NULL, &rMask, lpImage->DataType ) ) { ProgressEnd(); Message(IDS_EMEMALLOC); break; } ProgressEnd(); OpenClipboard(hWindow); EmptyClipboard(); // Passing a NULL data handle in SetClipboardData() means that // the data will be requested in a WM_RENDERFORMAT message hMem = ConstructObject( lpImage, IsRectEmpty(&rMask)? (LPRECT)NULL : (LPRECT)&rMask ); if ( pOLE ) { // Any data put on before Native will become staticly copied SetClipboardData( pOLE->cfNative, NULL ); SetClipboardData( pOLE->cfOwnerLink, hMem ); } SetClipboardData( CF_DIB, NULL ); if ( Control.DoPicture ) SetClipboardData( CF_METAFILEPICT, NULL ); if ( Control.DoBitmap ) SetClipboardData( CF_BITMAP, NULL ); SetClipboardData( CF_PALETTE, NULL ); SetClipboardData( Control.cfImage, NULL ); if ( pOLE && wID == IDM_COPY && !lpImage->fUntitled ) { // ObjectLink is retrieved during a Paste Link... SetClipboardData( pOLE->cfObjectLink, hMem ); } CloseClipboard(); if ( wID == IDM_COPY ) break; // else fall through to IDM_DELETE case IDM_DELETE: if ( !lpImage ) break; { COLORINFO ColorInfo; DeactivateTool(); ColorInfo.gray = 255; SetColorInfo( &ColorInfo, &ColorInfo, CS_GRAY ); TintFill( lpImage, &ColorInfo, 255, MM_NORMAL, wID == IDM_CUT ? IDS_UNDOCUT : IDS_UNDODELETE ); } break; case IDM_PASTE: if ( !lpImage ) break; case IDM_PASTEASNEW: if ( !OpenClipboard(hWndAstral) ) { Message( IDS_ECLIPOPEN ); break; } if ( !IsClipboardFormatAvailable(CF_DIB) && !IsClipboardFormatAvailable(CF_BITMAP) && !IsClipboardFormatAvailable(Control.cfImage) ) { Message( IDS_ECLIPOPEN ); CloseClipboard(); break; } CloseClipboard(); DeactivateTool(); // First put clipboard contents into a file(s) AstralCursor(IDC_WAIT); if ( !PasteFromClipboard( hWindow, (wID == IDM_PASTE) /*fNeedMask*/ ) ) { AstralCursor(NULL); Message(IDS_EMEMALLOC); break; } if ( wID == IDM_PASTE ) { ProgressBegin(1, IDS_PROGPASTECLIP); TransformObjectsStart( YES/*fNewObject*/ ); if ( ImgCreateClipInObject( lpImage, NO ) ) ; ProgressEnd(); } else if ( wID == IDM_PASTEASNEW ) { if ( lpFrame = AstralFrameLoad( Names.PasteImageFile, -1, &idDataType, &idFileType) ) { if ( NewImageWindow( NULL, // lpOldFrame NULL, // Name lpFrame, // lpNewFrame idFileType, // lpImage->FileType idDataType, // lpImage->DataType FALSE, // New view? IMG_DOCUMENT, // lpImage->DocumentType NULL, // lpImage->ImageName MAYBE ) ) lpImage->fChanged = YES; } } break; case IDM_ESCAPE: if (!lpImage) break; if (lpImage->hWnd == hZoomWindow) break; if ( Tool.bActive && Tool.lpToolProc ) DestroyProc( lpImage->hWnd, 1L ); break; case IDM_SIZEUP: case IDM_SIZEDOWN: if (!Retouch.hBrush) break; SetFocus( hWindow ); // Take focus away from any controls if ( Retouch.BrushShape == IDC_BRUSHCUSTOM ) break; if ( wID == IDM_SIZEUP ) { if( bHexBrush && ( Retouch.BrushSize % 2 == 0 ) && ( Retouch.BrushSize > 6 )) Retouch.BrushSize += 2; else Retouch.BrushSize++; } else { if( bHexBrush && ( Retouch.BrushSize % 2 == 0 ) && ( Retouch.BrushSize > 6 )) Retouch.BrushSize -= 2; else Retouch.BrushSize--; } if ( Retouch.BrushSize < 1 || Retouch.BrushSize > MAX_BRUSH_SIZE ) { Retouch.BrushSize = bound( Retouch.BrushSize, 1,MAX_BRUSH_SIZE); MessageBeep(0); break; } if (lpImage) DisplayBrush(0, 0, 0, OFF); SetMgxBrushSize(Retouch.hBrush, Retouch.BrushSize); if (lpImage && Window.hCursor == Window.hNullCursor) DisplayBrush(lpImage->hWnd, 32767, 32767, ON); if ( Tool.hRibbon ) SetSlide( Tool.hRibbon, IDC_BRUSHSIZE, Retouch.BrushSize ); break; case IDM_SHAPEUP: case IDM_SHAPEDOWN: if (!Retouch.hBrush) break; SetFocus( hWindow ); // Take focus away from any controls NewShape = Retouch.BrushShape; if ( wID == IDM_SHAPEUP ) NewShape++; else NewShape--; if ( NewShape > IDC_BRUSHCUSTOM ) NewShape = IDC_BRUSHCIRCLE; if ( NewShape < IDC_BRUSHCIRCLE ) NewShape = IDC_BRUSHCUSTOM; if (lpImage) DisplayBrush(0, 0, 0, OFF); if (!SetMgxBrushShape(Retouch.hBrush, NewShape, Names.CustomBrush)) { NewShape = IDC_BRUSHCIRCLE; SetMgxBrushShape(Retouch.hBrush, NewShape, Names.CustomBrush); } Retouch.BrushShape = NewShape; if (lpImage && Window.hCursor == Window.hNullCursor) DisplayBrush(lpImage->hWnd, 32767, 32767, ON); if ( Tool.hRibbon ) { CheckComboItem( Tool.hRibbon, IDC_BRUSHSHAPE, IDC_BRUSHCIRCLE, IDC_BRUSHCUSTOMNEW, Retouch.BrushShape ); SendMessage( Tool.hRibbon, WM_CONTROLENABLE, 0, 0L ); } break; case IDM_MOVEUP: case IDM_MOVEDOWN: case IDM_MOVELEFT: case IDM_MOVERIGHT: if (!lpImage) break; lpBase = ImgGetBase(lpImage); if (ImgGetSelObject(lpImage, NULL) == lpBase) break; dx = dy = 0; if (wID == IDM_MOVEUP) --dy; if (wID == IDM_MOVEDOWN) ++dy; if (wID == IDM_MOVELEFT) --dx; if (wID == IDM_MOVERIGHT) ++dx; lpObject = NULL; while (lpObject = ImgGetSelObject(lpImage, lpObject)) { rect = lpObject->rObject; OffsetRect(&rect, dx, dy); if (!AstralIntersectRect(&rTemp, &lpBase->rObject, &rect)) break; } if (lpObject) break; AstralSetRectEmpty(&rAll); lpObject = NULL; while (lpObject = ImgGetSelObject(lpImage, lpObject)) { rect = lpObject->rObject; OffsetRect(&lpObject->rObject, dx, dy); AstralUnionRect(&rAll, &rAll, &lpObject->rObject); if (!lpObject->Pixmap.fNewFrame && EqualRect(&rect, &lpObject->rUndoObject)) lpObject->rUndoObject = lpObject->rObject; UpdateImage(&rect, TRUE); UpdateImage(&lpObject->rObject, TRUE); } if (wID == IDM_MOVEUP) { x = (rAll.left + rAll.right)/2; y = rAll.top; } else if (wID == IDM_MOVEDOWN) { x = (rAll.left + rAll.right)/2; y = rAll.bottom; } else if (wID == IDM_MOVELEFT) { x = rAll.left; y = (rAll.top + rAll.bottom)/2; } else if (wID == IDM_MOVERIGHT) { x = rAll.right; y = (rAll.top + rAll.bottom)/2; } File2Display(&x, &y); AutoScroll(lpImage->hWnd, x, y); AstralUpdateWindow(lpImage->hWnd); DisplayInfo(-1, &rAll); break; case IDM_LASTTOOL: DeactivateTool(); if ( Tool.idLast && (hWnd = AstralDlgGet(IDD_MAIN)) ) SendMessage( hWnd, WM_COMMAND, Tool.idLast, 2L); break; case IDM_PREF: // prevent problems if running animations and they change // the wave mix dll setting in preferences StopAnimation(); AstralDlg( NO|2, hInstAstral, hWindow, IDD_PREF, DlgPrefProc ); break; case IDC_VIEWLAST: // duplicate of function in the view ribbon if ( !lpImage ) break; RevertLastView(); break; // case IDC_VIEWFULL: // duplicate of function in the view ribbon // if ( !lpImage ) // break; // AstralDlg( NO, hInstAstral, hWindow, IDD_VIEWFULL, DlgFullScreenViewProc ); // break; case IDC_VIEWALL: // duplicate of function in the view ribbon if ( !lpImage ) break; ViewAll(); break; case IDC_ZOOMIN: // duplicate of function in the view ribbon if ( !lpImage ) break; if (!lpImage->lpDisplay) break; if (!lpImage->lpDisplay->ViewPercentage) break; x = ( lpImage->lpDisplay->FileRect.left + lpImage->lpDisplay->FileRect.right ) / 2; y = ( lpImage->lpDisplay->FileRect.top + lpImage->lpDisplay->FileRect.bottom ) / 2; SaveLastView(); Zoom(x,y, +100, YES, ( View.ZoomWindow ^ CONTROL ) ); break; case IDC_ZOOMOUT: // duplicate of function in the view ribbon if ( !lpImage ) break; if (!lpImage->lpDisplay) break; if (!lpImage->lpDisplay->ViewPercentage) break; x = ( lpImage->lpDisplay->FileRect.left + lpImage->lpDisplay->FileRect.right ) / 2; y = ( lpImage->lpDisplay->FileRect.top + lpImage->lpDisplay->FileRect.bottom ) / 2; SaveLastView(); Zoom(x,y, -100, YES,( View.ZoomWindow ^ CONTROL ) ); break; case IDM_HELP: Control.Hints = !Control.Hints; PutDefInt (Control.Hints,Control.Hints); break; default: return( FALSE ); } return( TRUE ); }