int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR CmdArgs, int nCmdShow ) { HBITMAP runbm, bu, turnbm; HDC compat, draw, backup; HWND wnd; RECT POPc, wndrect; int vx = VX; int spritenum = 0, numsprites = RUNNUMSPRITES; int mode = RUN; int turnrow = 0; wnd = GetDeskWindow(); if( wnd == 0 ) { Error("Could not get handle to desktop window"); return 0; } draw = GetWindowDC( wnd ); if( draw == NULL ) { Error("Could not get Device Context"); return 0; } compat = CreateCompatibleDC( draw ); backup = CreateCompatibleDC( draw ); runbm = LoadBitmap( hInstance, "RunBMP" ); turnbm = LoadBitmap( hInstance, "TurnBMP" ); SelectObject( compat, runbm ); GetWindowRect( wnd, &wndrect ); POPc.left = (wndrect.right - wndrect.left) / 2; POPc.right = POPc.left + WIDTH; POPc.top = wndrect.bottom - HEIGHT; POPc.bottom = wndrect.bottom; bu = CreateCompatibleBitmap( draw, WIDTH, HEIGHT ); SelectObject( backup, bu ); BackupNew( draw, backup, POPc ); ReleaseDC( wnd, draw ); for(;;) { InvalidateRect( wnd, &POPc, 1 ); draw = GetWindowDC( wnd ); MoveToNew( &POPc, vx ); BackupNew( draw, backup, POPc ); DrawTransBitmap( draw, POPc.left, POPc.top, WIDTH, HEIGHT, compat, spritenum * WIDTH, (mode == RUN) ? ((vx < 0) ? 0 * HEIGHT : 1 * HEIGHT) : (turnrow * HEIGHT) ); ReleaseDC( wnd, draw ); if( mode == RUN ) { spritenum += (vx < 8) ? 1 : -1; } else { spritenum += (turnrow) ? -1 : 1; } if( spritenum > numsprites ) { spritenum = 0; } else if( spritenum < 0 ) { spritenum = numsprites; } if( (POPc.left < wndrect.left + 20 && vx < 8) || (POPc.right > wndrect.right - 20 && vx > -8) ) { if( mode == RUN ) { mode = TURN; SelectObject( compat, turnbm ); numsprites = TURNNUMSPRITES; spritenum = (POPc.left < wndrect.left + 50) ? 0 : TURNNUMSPRITES; //same as below applies } if( POPc.left < wndrect.left + 50 ) //doesn't matter what it is, just has to be somewhere near the above value { vx += 2; turnrow = 0; } else { vx -= 2; turnrow = 1; } } else if( mode == TURN ) { mode = RUN; SelectObject( compat, runbm ); numsprites = RUNNUMSPRITES; spritenum = 0; } Sleep(80); if( GetAsyncKeyState( VK_MBUTTON ) & 1 ) { InvalidateRect( wnd, &POPc, 1 ); break; } } ReleaseDC( wnd, draw ); DeleteObject( runbm ); DeleteDC( compat ); return 0; }
void TTracker::MessageReceived(BMessage *message) { if (HandleScriptingMessage(message)) return; switch (message->what) { case kGetInfo: OpenInfoWindows(message); break; case kMoveToTrash: MoveRefsToTrash(message); break; case kCloseWindowAndChildren: { const node_ref *itemNode; int32 bytes; message->FindData("node_ref", B_RAW_TYPE, (const void **)&itemNode, &bytes); CloseWindowAndChildren(itemNode); break; } case kCloseAllWindows: CloseAllWindows(); break; case kFindButton: (new FindWindow())->Show(); break; case kEditQuery: EditQueries(message); break; case kUnmountVolume: // When the user attempts to unmount a volume from the mount // context menu, this is where the message gets received. Save // pose locations and forward this to the automounter SaveAllPoseLocations(); fAutoMounter->PostMessage(message); break; case kRunAutomounterSettings: AutomountSettingsDialog::RunAutomountSettings(fAutoMounter); break; case kShowSplash: { // The AboutWindow was moved out of the Tracker in preparation // for when we open source it. The AboutBox contains important // credit and license issues that shouldn't be modified, and // therefore shouldn't be open sourced. However, there is a public // API for 3rd party apps to tell the Tracker to open the AboutBox. run_be_about(); break; } case kAddPrinter: // show the addprinter window run_add_printer_panel(); break; case kMakeActivePrinter: // get the current selection SetDefaultPrinter(message); break; #ifdef MOUNT_MENU_IN_DESKBAR case 'gmtv': { // Someone (probably the deskbar) has requested a list of // mountable volumes. BMessage reply; AutoMounterLoop()->EachMountableItemAndFloppy(&AddMountableItemToMessage, &reply); message->SendReply(&reply); break; } #endif case kMountVolume: case kMountAllNow: AutoMounterLoop()->PostMessage(message); break; case kRestoreBackgroundImage: { BDeskWindow *desktop = GetDeskWindow(); AutoLock<BWindow> lock(desktop); desktop->UpdateDesktopBackgroundImages(); } break; case kShowSettingsWindow: ShowSettingsWindow(); break; case kFavoriteCountChangedExternally: SendNotices(kFavoriteCountChangedExternally, message); break; case kStartWatchClipboardRefs: { BMessenger messenger; message->FindMessenger("target", &messenger); if (messenger.IsValid()) fClipboardRefsWatcher->AddToNotifyList(messenger); break; } case kStopWatchClipboardRefs: { BMessenger messenger; message->FindMessenger("target", &messenger); if (messenger.IsValid()) fClipboardRefsWatcher->RemoveFromNotifyList(messenger); break; } default: _inherited::MessageReceived(message); break; } }
void TTracker::MessageReceived(BMessage *message) { if (HandleScriptingMessage(message)) return; switch (message->what) { case kGetInfo: OpenInfoWindows(message); break; case kMoveToTrash: MoveRefsToTrash(message); break; case kCloseWindowAndChildren: { const node_ref *itemNode; int32 bytes; message->FindData("node_ref", B_RAW_TYPE, (const void **)&itemNode, &bytes); CloseWindowAndChildren(itemNode); break; } case kCloseAllWindows: CloseAllWindows(); break; case kCloseAllInWorkspace: CloseAllInWorkspace(); break; case kFindButton: (new FindWindow())->Show(); break; case kEditQuery: EditQueries(message); break; case kShowSplash: run_be_about(); break; case kAddPrinter: // show the addprinter window run_add_printer_panel(); break; case kMakeActivePrinter: // get the current selection SetDefaultPrinter(message); break; #ifdef MOUNT_MENU_IN_DESKBAR case 'gmtv': { // Someone (probably the deskbar) has requested a list of // mountable volumes. BMessage reply; AutoMounterLoop()->EachMountableItemAndFloppy(&AddMountableItemToMessage, &reply); message->SendReply(&reply); break; } #endif case kUnmountVolume: // When the user attempts to unmount a volume from the mount // context menu, this is where the message gets received. // Save pose locations and forward this to the automounter SaveAllPoseLocations(); // Fall through... case kMountVolume: case kMountAllNow: MountServer().SendMessage(message); break; case kRunAutomounterSettings: AutomountSettingsDialog::RunAutomountSettings(MountServer()); break; case kRestoreBackgroundImage: { BDeskWindow *desktop = GetDeskWindow(); AutoLock<BWindow> lock(desktop); desktop->UpdateDesktopBackgroundImages(); break; } case kShowSettingsWindow: ShowSettingsWindow(); break; case kFavoriteCountChangedExternally: SendNotices(kFavoriteCountChangedExternally, message); break; case kStartWatchClipboardRefs: { BMessenger messenger; message->FindMessenger("target", &messenger); if (messenger.IsValid()) fClipboardRefsWatcher->AddToNotifyList(messenger); break; } case kStopWatchClipboardRefs: { BMessenger messenger; message->FindMessenger("target", &messenger); if (messenger.IsValid()) fClipboardRefsWatcher->RemoveFromNotifyList(messenger); break; } case kFSClipboardChanges: fClipboardRefsWatcher->UpdatePoseViews(message); break; case kShowVolumeSpaceBar: case kSpaceBarColorChanged: gPeriodicUpdatePoses.DoPeriodicUpdate(true); break; case B_LOCALE_CHANGED: { BLocaleRoster::Default()->Refresh(); bool localize; if (message->FindBool("filesys", &localize) == B_OK) gLocalizedNamePreferred = localize; break; } default: _inherited::MessageReceived(message); break; } }