Win32: plein écran et le masquage de la barre des tâches
J'ai une fenêtre qui je SetWindowPos(window, HWND_TOP, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), SWP_FRAMECHANGED);
Il couvre la totalité de l'écran, ok, mais il faut du temps (0.5 sec) pour couvrir la barre des tâches en tant que bien.
Est-il un moyen de venir sur la barre des tâches immédiatement? J'ai trouvé que la mise HWND_TOPMOST
t-il immédiatement, mais il reste au-dessus de toutes les autres fenêtres, même si je passe de l'app, c'est quelque chose que je ne veux pas. Aussi, si j'ai d'abord masquer la fenêtre puis de le montrer, c'est en quelque sorte les forces de la fenêtre pour redessiner et couvre la barre des tâches, mais il vacille (en raison de la cacher). Est-il une autre voie?
Vous devez vous connecter pour publier un commentaire.
Edit 2. Il y a même une meilleure façon de faire le plein écran, le chrome manière, source de prises à partir d'ici:
http://src.chromium.org/viewvc/chrome/trunk/src/ui/views/win/fullscreen_handler.cc?revision=HEAD&view=markup
Modifier.
Il est probablement préférable de créer une fenêtre plein écran comme BrendanMcK l'a fait remarquer dans un commentaire à cette réponse, voir ce lien: http://blogs.msdn.com/b/oldnewthing/archive/2005/05/05/414910.aspx ("Comment puis-je couvrir la barre des tâches avec une fenêtre plein écran?")
Le nouveau code à l'aide du lien ci-dessus serait:
Vieille réponse ci-dessous - ne l'utilisez pas, reste que pour l'enregistrement sur la façon de ne PAS le faire.
Vous avez à cacher la barre des tâches et la barre de menu pour voir en plein écran immédiatement.
Voici le code (utilise WTL), appel SetFullScreen(true) pour passer en mode plein écran:
Vous devez également ajouter un peu de code de message WM_CLOSE:
Il y a un problème avec cette solution, si votre application se bloque ou est tué par le gestionnaire de tâches, puis l'utilisateur pertes de la barre des tâches sur son système de façon permanente! (à moins qu'il exécute votre application à nouveau, passe en plein écran et sort, puis il va voir la barre des tâches de nouveau).
Plus haut dans ma réponse je l'ai fait à "atlwince.h", mais cette fonction a travaillé uniquement sur Windows CE, celui que j'ai collé ci-dessus fonctionne très bien avec windows XP, Vista et 7.
Yup,
HWND_TOPMOST
fait pour moi.Voici une section de code qui fait le plein écran fonctionne bien (et rapide) pour moi:
Remarque que cela va changer la résolution si vous dites du mal de paramètres. C'est ce que j'ai l'habitude de le voulez, mais si vous n'aimez pas cela, vous pouvez trouver votre résolution en utilisant (où
mainWindow
est retourné à partir de quelque chose commeCreateWindow()
ouCreateWindowEx()
):Lorsque vous voulez sortir du plein écran, vous faites quelque chose comme cela:
J'ai mis mon code pour changer entre le mode plein écran et le mode fenêtré l'aide d'un raccourci, et je garde le mode fenêtré variables globales, de sorte que lorsque vous changez de mode fenêtré, il reste en place.
Ce code a l'avantage de fonctionner dans l'équivalent de "mode exclusif" (je suis sous XP, et je n'ai pas essayé sur les versions plus récentes de windows), ce qui signifie qu'il sera beaucoup plus rapide. Permettez-moi de savoir si j'ai commis des erreurs à partir de la condensation de la code (de mon beaucoup plus de code).
Raymond Chen décrit la "bonne" façon de faire cela à son blog:
http://blogs.msdn.com/b/oldnewthing/archive/2005/05/05/414910.aspx
De se tripoter la barre des tâches de la fenêtre est expressément pas recommandé de comportement.
Je crois que la barre des tâches pour sortir de sa coquille crochet dit-il sur un "impoli" application, cela peut prendre un peu de temps.
Que si vous commencez avec la fenêtre HWND_TOPMOST et ne le rendent pas plus haut après 1 seconde?
La barre des tâches appartient à la utilisateur, C'est à eux de se préoccuper d'avoir un il prendre 1/2 seconde pour masquer automatiquement lorsque vous application passe en mode plein écran. Si ils veulent changer ce comportement alors qu'ils peuvent changer.
Si vous travaillez dans un système embarqué, alors vous pourriez avoir un motif légitime pour masquer la barre des tâches. Mais dans ce cas, il n'y a aucune raison de ne pas simplement configurer la barre des tâches de ne pas toujours être au top. Vous pourriez aussi avoir un coup d'oeil à
SystemParametersInfo
si vous souhaitez modifier certains de ces paramètres dans votre code.