ALT - Tabbing in DirectX

Started by
10 comments, last by Sleepwalker 24 years, 2 months ago
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
- Sleepwalker
Advertisement
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.
D:
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.
D:
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
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
- Sleepwalker
If you use createwindowex, with WS_EX_TOPMOST flag enabled this will prevent you from alt-tabbing. Only answer I can think of.
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.
I think my problem is that I do not resore the surfaces...
humm...have to try that one...

- Sleepwalker
- Sleepwalker
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 necessaryif(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
Alexbigshot@austin.rr.comFoolish man give wife grand piano. Wise man give wife upright organ.
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

This topic is closed to new replies.

Advertisement