IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Problème de résolution d'écran


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut Problème de résolution d'écran
    Bonjour à tous,

    J'aimerais savoir si il était possible qu'une application puisse conserver sa position sur l'écran suite a un changement de résolution.

    Pour faire simple, admettons que mon programme soit une horloge placée en haut de l'écran vers la droite et que cette position ne doit pas changer même
    si je change de résolution, comment faire ?

    Je remercie à l'avance celui ou celle qui voudra bien me renseigner.

    Je précise que je ne souhaite pas que l'on me mâche le travail, mais seulement que l'on m'indique la direction à prendre.

    Bonne journée.

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Bonjour à toi.
    Cela dépend de la bibliothèque utilisée pour gérer l'affichage.

    Qui plus est, la plupart du temps, les applications ne sont pas notifiées du changement de résolution, conservant ainsi leur position (en pixels depuis l'origine)
    La seule chose que tu peux envisager, c'est si ta bibliothèque permet un placement à x pixels du bord droit, ou y pixels du bord haut, ca pourrait fonctionner.

    D'une manière générale, je dirai qu'imposer une position est un mauvais choix.
    Moi, par exemple, j'ai un certain nombre d'icones en haut à droite. Ton application me dérangerait donc vraiment si elle m'imposait de se mettre au dessus.

    Par contre, si tu utilise un bibliothèque de desklets, tu pourrais bien avoir accès à ces types de fonctionnalités.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Merci pour ta réponse leternel.

    Arf ! Je me suis vraisemblablement mal expliqué (moi qui voulait faire simple).

    Nous allons donc prendre comme exemple la célèbre barre des tâches de Windows.

    Supposons que mon application soit le bureau avec cette dernière justement, l'utilisateur peut à sa guise changer la résolution de l'écran sans que celle-ci
    se déplace malencontreusement au milieu par exemple, elle reste par défaut toujours en bas.

    Et bien, ce que je veux réussir à faire c'est cela. Dès qu'un changement de résolution s'opère, mon application doit "s'adapter" à celle-ci sans pour autant
    se "promener" sur le bureau.

    C'est ce que fait malheureusement mon application
    Dès que la résolution change, elle va faire son petit footing du matin.

    D'après mes recherches il faudrait utiliser SM_CXSCREEN / SM_CYSCREEN, mais je n'en suis pas sûr du tout. Puis comme tout est en Anglais, moi et la langue de Shakespeare ça fait pas deux mais plutôt quatre...

    Donc voilà en gros le problème.

    Bah, si personne ne voit c'est pas grave, je vais continuer tant bien que mal sur la toile et qui sait, je vais certainement trouver.

    Merci encore pour ta réponse leternel.

    Bonne continuation à tous.

  4. #4
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Il nous faut plus de précisions pour pouvoir t'aider.
    Quelle bibliothèque utilises-tu? (en gros, quels #include?)
    Quel est le code qui place ta fenètre?

    Comment détectes-tu le changement de résolution?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    Pour les bibliothèques :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define _WIN32_IE 0x500
    #include <windows.h>
    Pour le code de la fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
     
    int WINAPI WinMain(HINSTANCE Hinstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
    {
        HWND Hwnd;
        MSG msg;
        WNDCLASSEX WndClsEx;
     
        hinst = Hinstance;
     
        WndClsEx.hInstance      = Hinstance;
        WndClsEx.lpszClassName  = "MyWindows";
        WndClsEx.lpfnWndProc    = MainWndProc;
        WndClsEx.style          = CS_DBLCLKS;
        WndClsEx.cbSize         = sizeof (WNDCLASSEX);
        WndClsEx.hIcon          = LoadIcon(Hinstance,MAKEINTRESOURCE(1));
        WndClsEx.hIconSm        = LoadIcon(Hinstance,MAKEINTRESOURCE(1));
        WndClsEx.hCursor        = LoadCursor (NULL, IDC_ARROW);
        WndClsEx.lpszMenuName   = "MENUPRINCIPAL";
        WndClsEx.cbClsExtra     = 0;
        WndClsEx.cbWndExtra     = 0;
        WndClsEx.hbrBackground  = (HBRUSH) (COLOR_BTNFACE + 1);
     
        if(!RegisterClassEx(&WndClsEx)) return FALSE;
     
        Hwnd = CreateWindowEx(0,"MyWindows", "", WS_POPUP,0,1020,1680,30,NULL, NULL, Hinstance, NULL);
        if (!Hwnd)  return FALSE;
     
        ShowWindow(Hwnd, nCmdShow);
     
        SetWindowPos(Hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
     
        while (GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        return msg.wParam;
    }
    Mon IDE est CodeBlocks au cas où...

    Pour la détection du changement de résolution, je dois avouer que je ne sais
    pas comment faire ça

    J'ai adapté le code pour que ça reste cohérent avec l'exemple de la barre des tâches.

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Pas de pot, c'est de la winapi.

    Je suis un brave linuxien, je ne pourrais pas t'aider énormément.
    à priori, il faut soit utiliser un listener (Window Hook???), soit ajouter un test dans la boucle (ou le dispatch).

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 6
    Par défaut
    C'est pas grave, je vais voir ce que je peux trouver comme informations sur ce sujet et sur ce que tu m'as suggérer.

    J'espère seulement que ça ne sera pas trop laborieux.

    Je te remercie pour ton attention.

  8. #8
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Au plaisir!
    Et bon courage.

  9. #9
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Bonjour,

    Pour éviter ce genre de problème, tu peux penser tes positions sur un système normalisé.

    Je m'explique:
    - la position actuel pour toi est par exemple x=20 et y=30
    - la résolution est 800*600

    Si tu passes en 1024*768 : Tu le recalcules en faisant le rapport entre l'ancienne résolution et ta nouvelle.

    La solution normalisé te simplifie tout ça:
    - la résolution est entre [-1, 1], 0 est le centre de l'écran.
    - Tu définis tes coordonnées entre -1 et 1.

    Si tu redimensionnes, ta position reste la même. Mais le rapport du système sur la résolution de l'écran te donneras automatiquement la bonne position.
    Cela fonctionne pour les résolutions, les resize, etc....

    Exemple sur la slide 52 ici que j'ai pu trouver sur internet:
    http://www.fil.univ-lille1.fr/~auber...sformation.pdf

    Cordialement,


    EDIT: L'event pour le changement de résolution est ici http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

Discussions similaires

  1. Problème de résolution d'écran
    Par lucien_jeunesse dans le forum Bubuntu
    Réponses: 1
    Dernier message: 30/04/2008, 07h49
  2. [UBUNTU] Problème de résolution d'écran
    Par rick052 dans le forum Ubuntu
    Réponses: 1
    Dernier message: 09/05/2007, 13h30
  3. problème de résolution d'écran sur un Terminal
    Par bambi98 dans le forum Périphériques
    Réponses: 5
    Dernier message: 31/03/2007, 20h28
  4. Réponses: 1
    Dernier message: 11/05/2006, 15h17
  5. [C#]problème de résolution d'écran
    Par erazorhead dans le forum Windows Forms
    Réponses: 8
    Dernier message: 07/04/2006, 13h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo