10
votes

Comment programmer une résolution d'une fenêtre et celle du système de Linux?

J'essaie d'obtenir la résolution de l'écran ainsi que la résolution d'une fenêtre spécifique (dans laquelle un programme est en cours d'exécution) sur le système Linux. Je n'ai pas besoin de modifier la résolution, je n'ai besoin que des valeurs actuelles. Autant que je sache, nous pouvons appeler certaines fonctions système à le faire sous Windows, comment pouvons-nous faire cela sur Linux, de préférence en utilisant la langue C / C ++? Merci d'avance.

Mise à jour: En réalité, je n'ai pas besoin de faire une interface graphique, bien que je connaisse Qt et GTK + puisse le faire, je suis réticent à inclure une bibliothèque externe pour simplement obtenir la résolution.


2 commentaires

S'il n'y a pas d'interface graphique, alors est-ce une application de console? Avez-vous besoin de ces valeurs même lorsque vous ne courez pas sous x?


Il y a une interface graphique, mais la partie que je travaille n'en a pas besoin. Il n'a besoin que de ces valeurs pour une mesure ultérieure.


4 Réponses :


6
votes

En X11, vous auriez besoin d'appeler le XLIB's xgetwindowattributes Pour obtenir les différentes informations de la fenêtre, y compris la taille et la position relatives au parent. Pour un exemple de la manière dont il est utilisé, vous pouvez google pour 'xwininfo.c'.

Cela dit, vous allez probablement utiliser un framework plus de Highlevel pour effectuer votre programmation de fenêtre - et les chances sont élevées qu'il possède déjà d'autres primitives pour cela, voir un exemple pour QT - Vous pouvez donc donner un peu plus de fond sur la question.


0 commentaires

0
votes

L'outil de ligne de commande XDPYINFO fournit ces informations pour vous; Pour le faire de manière programmatique, vous devez utiliser XLIB, comme Andrew Y explique.


0 commentaires

6
votes

dépend:


2 commentaires

QT ou GTK + peut-il obtenir une résolution d'une fenêtre spécifique?


Je peux obtenir une liste de fenêtres avec GTK, mais aucun nom, ID ou quoi que ce soit. Aucune idée de l'identification d'une fenêtre spécifique. Finalement, est allé pour Xlib et a résolu mon problème (bien que le code ait un peu dégoûtant ...).



9
votes

Pour obtenir la résolution de l'écran, vous pouvez utiliser XRandR Extension, comme dans XRANDR Sources:

Display *dpy;
// dpy = ...
int scr = /* ... */
printf ("  dimensions:    %dx%d pixels (%dx%d millimeters)\n",
        DisplayWidth (dpy, scr), DisplayHeight (dpy, scr),
        DisplayWidthMM(dpy, scr), DisplayHeightMM (dpy, scr));


4 commentaires

Randr est plus détaillé que DisplayWidth / DaySheight, mais les deux sont utiles (pour différentes raisons).


Pour autant que je sache, displaywidht / displayheight ne peut que répertorier la taille de l'écran en cours. Ils ne sont pas destinés à répertorier toutes les tailles d'écran disponibles (modes d'affichage). C'est ce que xrandr ou xf86vm est destiné.


Question courte: Le tableau est-il renvoyé (comme adresse) de xrrrconfigsises nécessite libérer plus tard? Ou est-ce alloué et géré en interne par la bibliothèque? Je ne pouvais rien trouver à propos de cela dans la documentation (s'il y en a un, au-delà du manuel crucial).


J'ai trouvé DisplayWidth / DisplayHeight et XDisplaywidth et XDisplayheight doivent être inexacts alors que XRandr semble être précis.