Jump to content

  • Log In with Google      Sign In   
  • Create Account


ALT - Tabbing in DirectX


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
11 replies to this topic

#1 Sleepwalker   Members   -  Reputation: 122

Like
Likes
Like

Posted 13 February 2000 - 06:00 AM

I have a lil'' question: I am running a program in Fullscreen-exclusive mode... But I can''t alt-tab out of it...is there a possibility to fix this? - Sleepwalker

Sponsor:

#2 PsYcHoPrOg   Members   -  Reputation: 115

Like
Likes
Like

Posted 13 February 2000 - 06:15 AM

I''m not completely sure, but I don''t think that you can. And if you can, you probably have to set it up some way while creating your window.

#3 PsYcHoPrOg   Members   -  Reputation: 115

Like
Likes
Like

Posted 13 February 2000 - 06:17 AM

Sorry, just adding on to what I had sayd before, if there is a way to CTR-ALT-DEL out of DirectX files (which there is, just set the flag), then there must be a way to ALT-TAB out. Try looking up under help or try contacting microsoft.

#4 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

Likes

Posted 13 February 2000 - 06:59 AM

I''m not sure but try that set cooperative level stuff in your program i think that''s the thingy that lets you alt tab.

Kings Revenge

#5 Sleepwalker   Members   -  Reputation: 122

Like
Likes
Like

Posted 13 February 2000 - 07:25 AM

I messed around with it a little...

Setting other cooperative settings doesn''t work,
but I actually found a way to get out by using
GetMessage(),TranslateMessage(),DispatchMessage() -
Trouble is I can''t get back in...sorta locked myself out...that is, I do get back in but the screens all black (Er...did someone blow the fuse ?)

Well anyway, if you have any idea concerning that tell me...

- Sleepwalker

#6 Anonymous Poster_Anonymous Poster_*   Guests   -  Reputation:

Likes

Posted 13 February 2000 - 07:59 AM

If you use createwindowex, with WS_EX_TOPMOST flag enabled this will prevent you from alt-tabbing. Only answer I can think of.

#7 PRISMA   Members   -  Reputation: 110

Like
Likes
Like

Posted 13 February 2000 - 09:25 AM

basically to handle Alt+Tab controls should be quite simple. When you detect that key combination (you must do it if for instance you are using direct Input in ex mode) minimize the app window and set a paused flag in your loop, so you don''t waste system resources rendering to nothing. Then when you receive the WM_ACTIVATE message, you need to RESTORE your surfaces...ie back buffers/z buffers etc...
All surfaces created in vid memory WILL need to be restored, so if you have textyures in video memory you will need to first restore them then reload the texture. If the surface is in system memory, then no reload/restore is needed.

Hope that helps, and as far as I know it''s correct.

#8 Sleepwalker   Members   -  Reputation: 122

Like
Likes
Like

Posted 14 February 2000 - 08:08 AM

I think my problem is that I do not resore the surfaces...
humm...have to try that one...

- Sleepwalker

#9 Bigshot   Members   -  Reputation: 122

Like
Likes
Like

Posted 15 February 2000 - 11:06 AM

Here's another method to prevent someone from using the dreaded ALT_TAB or CTRL_ALT_DEL, put this line of code right before your main event loop:

SystemParametersInfo(SPI_SCREENSAVERRUNNING, TRUE, NULL, 0);  


Then after the loop to restore the old config:
SystemParametersInfo(SPI_SCREENSAVERRUNNING, FALSE, NULL, 0);  


But I wouldn't recommend using that because some users want to ALT-TAB to look stuff up while playing your game, which makes everything a pain in the ass. First you have to force the game to pause by checking with the WM_ACTIVEAPP message, then when the user tries to go back to the game you'll have to restore all the surfaces. I do it like this:
// restore surfaces if necessary
if(lpdd)
{
if(lpddsprimary->IsLost()) // check if primary surface is lost
lpdd->RestoreAllSurfaces(); // restore all surfaces
}

lpdd is the DirectDraw object and lpddsprimary is my primary surface.

And if you have any little offscreen surfaces (like sprites) in video memory, you'll probably to have to reload them all, so you should have a function that loads all your graphics. Look up the message on this board called something like 'Restoring surfaces' for more info on that.

Good luck,
Al

Edited by - Bigshot on 2/15/00 5:11:21 PM

#10 paulcoz   Members   -  Reputation: 230

Like
Likes
Like

Posted 15 February 2000 - 08:28 PM

Don't you specify what type of window you want / how it interacts with others when you create it with the CreateWindow or CreateWindowEx command.

You might find what you are after if you read the DirectInput Mouse tutorials (part of the DirectX SDK) which details both Exclusive and Non-Exclusive mode.

CooperativeLevel comes into it too, because you can specify this for the mouse and keyboard. You also have to make sure your window is handling messages either with Translate/Dispatch or in a WindowProc message handler.

Paulcoz.

Edited by - paulcoz on 2/16/00 2:30:34 AM

#11 null_pointer   Members   -  Reputation: 289

Like
Likes
Like

Posted 16 February 2000 - 01:38 AM

Just handle WM_ACTIVATE messages in your WndProc. Set a flag for your rendering function to check before it renders each frame, telling it whether to draw or not. If your window''s minimized, you don''t draw. Finally, restore the surfaces in your WM_ACTIVATE handler when your window becomes active again. The Windows SDK docs have more information on WM_ACTIVATE.

Conceptually, you''re linking DirectDraw to your main window with that code.

And you''ll probably have to take extra steps for DirectInput, DirectSound, etc.

Good Luck!


- null_pointer


#12 Sleepwalker   Members   -  Reputation: 122

Like
Likes
Like

Posted 16 February 2000 - 07:31 AM

Phew...I fixed it (finally) Runs nicely now...
tab-out, tab-in - I could to this for hours, seriously

So thanks to everyone here foir helping me out.

- Sleepwalker




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS