3

I don't understand why when I press 'f' it enters into fullscreen but does not exit out of full screen. In the beginning of this method I have set bool fullscreen = false;

Here is the code for my toggle:

case 'f': //toggle screenmode
    if(!fullscreen){
        glutFullScreen();
        fullscreen = true;
    } else if(fullscreen){
        glutReshapeWindow(1200, 900);
        glutPositionWindow(0,0);
        fullscreen = false;
    }
    break;
4

7 に答える 7

4

このメソッドの先頭で、bool fullscreen = false; を設定しました。

キーを押すたびに、GLUT はキーボード ハンドラを呼び出します。そして、キーボード ハンドラーの上部で、boolという名前の変数を作成し、fullscreenその値を に設定しますfalse。これは、フルスクリーン モードであるかどうかに関係なく発生します。キーを押すたびに、これが起こります。

現在フルスクリーンかどうかを実際に追跡するブール変数を保持したい場合は、 globalを使用する必要があります。また、関数の開始時に設定する必要はありません。ウィンドウを作成するときに一度設定し、ウィンドウのフルスクリーン状態を変更するときにのみ再度設定します。

于 2012-10-26T09:43:23.437 に答える
3

元のウィンドウ サイズに戻すには

... ReshapeWindow と PositionWindow の呼び出し順序を

glutPositionWindow(0,0);
glutReshapeWindow(1200, 900);

そうしないと、ウィンドウ モードに戻りますが、指定したウィンドウ サイズには適応しません。

于 2013-08-05T14:51:30.047 に答える
0

これを試して:

case 'f': //toggle screenmode
    fullScreen = !fullScreen;
    if (fullScreen) {
        glutFullScreen();
    } else {
        glutReshapeWindow(1200, 900);
        glutPositionWindow(0,0);
    }
    break;
于 2017-01-02T15:50:16.847 に答える
0

メソッドの先頭で bool を定義する代わりに、グローバル変数を定義する必要があります。そうしないと、そのメソッドが呼び出されるたびにフルスクリーン bool が 0 に設定され、フルスクリーン モードではないと見なされます。また、euphrat の回答を無視することもできます。彼はメソッドの構成について有効な点を指摘しています。

于 2014-04-08T00:28:39.520 に答える