2009-12-20 30 views
0

Je joue avec un JFrame en Java. Je veux que ce soit la fenêtre la plus haute, c'est-à-dire toujours en haut. Le setAlwaysOnTop() fonctionne bien, mais dès que je démarre un film ou une fenêtre de jeu en mode plein écran, il ne parvient pas à rester au top.Fenêtre TOPMOST en mode plein écran

J'ai joué avec JNI et les poignées. Mon code C pour JNI utilise SetWindowPos() et cela semble fonctionner jusqu'à ce que je démarre une application en plein écran. Voici un exemple:

JNIEXPORT void JNICALL Java_Frame1_setWindowAlwaysOnTop 
(JNIEnv *env, jclass obj, jint hwnd, jboolean flag) 
{ 
    if (flag) 
    SetWindowPos((HWND) hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); 
    else 
    SetWindowPos((HWND) hwnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE); 
    return; 
} 

J'ai été googler depuis un certain temps et tout ce que j'établi est que le mode plein écran fonctionne dans un mode exclusif et "suspendent le système de fenêtrage de sorte que le dessin peut être fait directement à l'écran ".

Quelqu'un peut-il suggérer une solution de contournement? BTW. mon C n'est pas si brillant, alors allez-y facile ..

Merci! Damo

Répondre

1

« Topmost » n'a de sens que dans un environnement fenêtré.

Les jeux en mode plein écran et les films basculent généralement le mode en mode exclusif plein écran. Cela signifie que l'application unique a un contrôle total sur la vidéo - elle peut changer la résolution, être la seule application affichée, etc.

Une application fenêtrée, même dans "le plus haut", ne va pas être affichée quand une autre l'application a un mode exclusif plein écran, car il n'y a plus de concept de fenêtrage disponible.

+0

J'ai bien peur que tu aies raison. http://java.sun.com/docs/books/tutorial/extra/fullscreen/exclusivemode.html Merci! –

1

"Comment créer une fenêtre qui n'est jamais couverte par d'autres fenêtres, pas même par d'autres fenêtres?" Imaginez si cela était possible et imaginez si deux programmes l'ont fait. Le programme A crée une fenêtre qui est "super-topmost" et le programme B. Maintenant, l'utilisateur traîne les deux fenêtres afin qu'elles se chevauchent. Ce qui se produit? Vous vous êtes créé une impossibilité logique. L'un de ces deux fenêtres doivent être au-dessus de l'autre, ce qui contredit l'imaginaire caractéristique

« super-supérieure » De: http://blogs.msdn.com/oldnewthing/archive/2005/06/07/426294.aspx :)

+0

Un très bon point! Mais ce que je suis après n'est pas une fonctionnalité "super-topmost", mais une substitution unique du plus haut. Par exemple ma fenêtre de jeu commence en plein écran. Je veux que mon code détecte l'événement et remplace le plus haut de la fenêtre en plein écran. Mais si alors la fenêtre de jeu se rafraîchit et devient la plus haute - c'est ok. Ce que je veux dire, c'est que je ne suis pas sûr qu'il existe un moyen de le faire. Je ne veux certainement pas que les 2 fenêtres soient des super fenêtres, mais juste pour pouvoir remplacer temporairement l'écran f. BTW n'est-il pas le même que lorsque vous exécutez SetWindowPos() sur 1 fenêtre, puis sur autre? –