コード例 #1
0
ファイル: main.c プロジェクト: timpeskett/museum
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;
}
コード例 #2
0
ファイル: Tracker.cpp プロジェクト: Ithamar/cosmoe
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;
	}
}
コード例 #3
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 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;
	}
}