Cを使用してXlib経由で現在の画面サイズを取得する

Cを使用してXlib経由で現在の画面サイズを取得する

Cを使用してXlib経由でディスプレイの画面サイズを取得する方法はありますか?X.orgのドキュメント(https://tronche.com/gui/x/xlib/display/screen-information.html)、整数を受け入れないマクロしか表示されないので、困惑しています。

具体的には、これらの関数を次のように使用しました。

int sx;
int sy;
XWidthOfScreen(sx);
XWidthOfScreen(sy);

...

move_window(sx / 4)
move_window(sy / 4)

私は C プログラミングの初心者で、初めてのプロジェクトに取り組んでいます。

答え1

これは簡単な例で、ディスプレイ サイズを出力し、実行されるターミナル エミュレーターのウィンドウを (WINDOWID環境変数で正しく設定されている場合) 幅 / 4、高さ / 4 に移動します。

#include <X11/Xlib.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>

int main(int ac, char **av){
        char *wid; Display *dpy; Window w;
        int width, height, snum;
        if(!(dpy = XOpenDisplay(0)))
                errx(1, "cannot open display '%s'", XDisplayName(0));
        snum = DefaultScreen(dpy);
        width = DisplayWidth(dpy, snum);
        height = DisplayHeight(dpy, snum);
        printf("display size is %d x %d\n", width, height);
        if((wid = getenv("WINDOWID")) && (w = strtoul(wid, 0, 0))){
                XMoveWindow(dpy, w, width / 4, height / 4);
                XSync(dpy, False);
        }
        return 0;
}

私のアドバイスは、X11 プログラミング マニュアルこれは、検索可能な単一ページの HTML であり、X11 プログラミングに関するすべての情報が含まれています。

gtk、qt、sdl など、より使いやすく移植性の高いライブラリが存在する可能性があることに注意してください。libX11 を直接使用するのではなく、それらのライブラリのいずれかを使用することをお勧めします。

関連情報