Linuxアプリケーション(この場合はスクリーンセーバー)を作成しようとしていますが、ウィンドウを全画面表示にするという単純なタスクに関する情報を見つけるのは非常に困難です。既存のスクリーンセーバーのコードでさえ、それらがどのようにそれを管理するかについては言及しておらず、私はまだのような明白な機能を見ていませんXRemoveDecoration()
。
何度もいじくり回した後、私はデスクトップと同じサイズのウィンドウを作成することができました。
Window win = DefaultRootWindow(disp);
XWindowAttributes getWinAttr;
XGetWindowAttributes(disp, win, &getWinAttr);
win = XCreateWindow(disp, win, 0, 0, getWinAttr.width, getWinAttr.height, 0, vInfo->depth, InputOutput, vInfo->visual, CWBorderPixel|CWColormap|CWEventMask|CWOverrideRedirect, &winAttr );
しかし、それはタイトルバーと境界線を取り除くために何もしません。明らかに方法があることは知っていますが、他の大規模なライブラリが上に投げられることに依存しない、その方向を指しているものはまだ見つかりません(既存のスクリーンセーバーは間違いなく使用していません)。
編集:私の投稿から情報を削除しないでください。既存のスクリーンセーバーがオプションのライブラリを使用していないことを明示的に指摘したのには非常に理由があります。これは、過去1日のほとんどの期間ソースコードを分析してきたためです。
私は、質問に最も直接的に答え、一般的なアプリケーションに適用される答えを選択しました。
xscreensaversを調査しているこの質問を見つけた場合は、同じことが当てはまります。はい、xscreensaverには独自のAPIがあります。これは複雑で、実際にはより多くのコード行を記述する必要があります(はい、真剣に)。スクリーンセーバーにOpenGLが必要な場合は、別のAPI(xlockmore、競合システム)と、それをxscreensaverに変換する互換性レイヤーを使用する必要があります。
ただし、xscreensaverは、仮想ルートウィンドウ(vroot.hを調べる)をスクリーンセーバーとして使用できるすべてのプログラムを実行できます。ですから、私のアドバイスはそれを行うことです-より多くの制御、制限のないAPI、そしてより優れた移植性が得られます。(私が見た1つの例は、同じファイルでLinuxまたはWindows用にコンパイルすることもできます!)