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

Windows Discussion :

multi écran c++


Sujet :

Windows

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 12
    Points
    12
    Par défaut multi écran c++
    Bonjour,

    j'aimerais afficher une application en plein écran sur l'écran de mon choix, j'ai actuellement 2 écrans et l'application (opengl et glut) s'ouvre toujours sur l'écran principal ce que je ne veux pas. En fait sur un écran (rétroprojecteur, écran secondaire) j'aurais l'application opengl en plein écran et sur l'autre j'aurais des fenètres de réglage (écran principal).

    J'ai bien trouvé la commande GetSystemMetrics(SM_CMONITORS) qui permet de donner le nombre d'écran mais je ne sais pas comment choisir d'afficher sur l'écran de mon choix...

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Bon, j'ai peut-être un début d'idée.
    Si tes deux écrans sont en prolongement l'un de l'autre (horizontal par exemple), il se peut que le plein écran agisse uniquement sur celui où se trouvait la fenêtre avant d'être mise en plein écran. Par exemple si tu as deux écrans en 800x600 et les coordonées de ta fenêtre sont 100x100 ce sera l'écran de gauche. Si tu déplace ta fenêtre aux coordonées 900x100 ce sera celui de droite. Si ça fonctionne de cette façon, soit tu prévois un raccourci clavier pour faire basculer le mode plein écran et tu déplaces ta fenêtre opengl à la souris, soit tu gère le déplacement de fenêtre par le code.

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    En faite je cherche à travailler plutôt en dual view, pas en bureau étendu. J'ai testé en bureau étendu pour voir quand meme ce que ca donnait, et mon appli se met en plein écran étallée sur les deux écrans.

    edit : en faite je pense que j'ai mal compris ce que tu voulais dire je viens de comprendre ton idée, je pense que ca peut marcher, je test ca lundi dès mon retour au taf ^^

    Merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Le problème avec le dual view, c'est que je n'ai même jamais vraiment compris à quoi ça pouvait servir (avec ma nvidia, ça m'affiche mon fond d'écran sans rien d'autre). Je suppose qu'on peut controler un peu ça par programmation, mais quand à savoir comment .

  5. #5
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    salut, j'ai commencé quelque chose comme ça :


    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    /**
     * @brief Scanne les sorties graphiques disponibles
     */
    void
    SortieGraphique::scanner()
    {
    #if defined MACOSX
      // recuperation de toutes les sorties graphiques disponibles
      CGGetActiveDisplayList (32, s_sorties_graphiques, &s_nb_sorties_graphiques);
      
      for (uint i = 0; i < s_nb_sorties_graphiques; ++i)
      {
        s_supporte_opengl[i] = (bool) CGDisplayUsesOpenGLAcceleration(s_sorties_graphiques[i]);
      }
    #elif defined WIN32
      DISPLAY_DEVICE device;
      device.cb = sizeof( device );
      char deviceadaptername[33];
      char deviceadapterstring[129];
    
      uint total_sorties = 0;
      uint num_dev = 0;
      while (EnumDisplayDevices(0,num_dev,&device,0 ))
      {
        int i = 0;
        sprintf(deviceadaptername, "%s%c",device.DeviceName,0);
        sprintf(deviceadapterstring, "%s%c", device.DeviceString,0);
    
        uint num_monitor = 0;
    
        while( EnumDisplayDevices(deviceadaptername,num_monitor,&device,0 ) )
        {
          char deviceadapternamefull[33];
          sprintf(deviceadapternamefull, "%s%c", device.DeviceName,0);
    
          s_noms_sorties_graphiques[total_sorties].resize(33);
          sprintf(&s_noms_sorties_graphiques[total_sorties][0],"%s%c",deviceadapternamefull,0);
          s_noms_sorties_graphiques[total_sorties].push_back(0);
    
          s_designations_sorties_graphiques[total_sorties].resize(129);
          sprintf(&s_designations_sorties_graphiques[total_sorties][0],"%s%c",deviceadapterstring,0);
          s_designations_sorties_graphiques[total_sorties].push_back(0);
    
          s_ecrans[total_sorties].resize(129);
          sprintf(&s_ecrans[total_sorties][0],"%s%c",device.DeviceString,0);
          s_ecrans[total_sorties].push_back(0);
          ++total_sorties;
          ++num_monitor;
        }
        ++num_dev;
      }
      s_nb_sorties_graphiques = total_sorties;
    #endif
    }
    
    /**
     * @brief Capture la sortie graphique
     */
    void
    SortieGraphique::capturer()
    {
    
    #if defined MACOSX
      CGDisplayCapture (s_sorties_graphiques[m_num_sortie_graphique]);
      CGRect rect = CGDisplayBounds (s_sorties_graphiques[m_num_sortie_graphique]);
      
      m_largeur = rect.size.width;
      m_hauteur = rect.size.height;
      
      // hidecursor()
    #elif defined WIN32
      DEVMODE dm; 
      EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm); 
      dm.dmSize = sizeof(DEVMODE);
      dm.dmBitsPerPel = 24; 
      dm.dmFields = DM_BITSPERPEL;
      ChangeDisplaySettingsEx(&s_noms_sorties_graphiques[m_num_sortie_graphique][0],&dm, 0, CDS_FULLSCREEN, 0);
    
      SetWindowLong(s_plein_ecran, GWL_STYLE,  WS_POPUP | WS_SYSMENU);
      MoveWindow(s_plein_ecran,0,0,dm.dmPelsWidth,dm.dmPelsHeight,false);
      ShowWindow(s_plein_ecran,SW_SHOW);
    
    //  ShowCursor(0);
    #endif
    }
    Mais n'ayant pas de dual screen sous windows, j'ai jamais pu testé si ça marchait bien sous windows...
    dsl le code est pas beau, j'ai pas eu le temps de mettre des vector a la place.

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par zais_ethael
    Le problème avec le dual view, c'est que je n'ai même jamais vraiment compris à quoi ça pouvait servir (avec ma nvidia, ça m'affiche mon fond d'écran sans rien d'autre). Je suppose qu'on peut controler un peu ça par programmation, mais quand à savoir comment .
    En fait le dualview permet de gérer les deux écrans séparément, tu peux par exemple regarder une video sur un et travailler sur l'autre, en bureau étendu ta vidéo en plein écran générallement s'étendra sur les deux écran. Pour afficher quelquechose sur l'autre écran suffit de faire un drag and drop comme avec le buraeu étendu.

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par NiamorH
    salut, j'ai commencé quelque chose comme ça :


    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    /**
     * @brief Scanne les sorties graphiques disponibles
     */
    void
    SortieGraphique::scanner()
    {
    #if defined MACOSX
      // recuperation de toutes les sorties graphiques disponibles
      CGGetActiveDisplayList (32, s_sorties_graphiques, &s_nb_sorties_graphiques);
      
      for (uint i = 0; i < s_nb_sorties_graphiques; ++i)
      {
        s_supporte_opengl[i] = (bool) CGDisplayUsesOpenGLAcceleration(s_sorties_graphiques[i]);
      }
    #elif defined WIN32
      DISPLAY_DEVICE device;
      device.cb = sizeof( device );
      char deviceadaptername[33];
      char deviceadapterstring[129];
    
      uint total_sorties = 0;
      uint num_dev = 0;
      while (EnumDisplayDevices(0,num_dev,&device,0 ))
      {
        int i = 0;
        sprintf(deviceadaptername, "%s%c",device.DeviceName,0);
        sprintf(deviceadapterstring, "%s%c", device.DeviceString,0);
    
        uint num_monitor = 0;
    
        while( EnumDisplayDevices(deviceadaptername,num_monitor,&device,0 ) )
        {
          char deviceadapternamefull[33];
          sprintf(deviceadapternamefull, "%s%c", device.DeviceName,0);
    
          s_noms_sorties_graphiques[total_sorties].resize(33);
          sprintf(&s_noms_sorties_graphiques[total_sorties][0],"%s%c",deviceadapternamefull,0);
          s_noms_sorties_graphiques[total_sorties].push_back(0);
    
          s_designations_sorties_graphiques[total_sorties].resize(129);
          sprintf(&s_designations_sorties_graphiques[total_sorties][0],"%s%c",deviceadapterstring,0);
          s_designations_sorties_graphiques[total_sorties].push_back(0);
    
          s_ecrans[total_sorties].resize(129);
          sprintf(&s_ecrans[total_sorties][0],"%s%c",device.DeviceString,0);
          s_ecrans[total_sorties].push_back(0);
          ++total_sorties;
          ++num_monitor;
        }
        ++num_dev;
      }
      s_nb_sorties_graphiques = total_sorties;
    #endif
    }
    
    /**
     * @brief Capture la sortie graphique
     */
    void
    SortieGraphique::capturer()
    {
    
    #if defined MACOSX
      CGDisplayCapture (s_sorties_graphiques[m_num_sortie_graphique]);
      CGRect rect = CGDisplayBounds (s_sorties_graphiques[m_num_sortie_graphique]);
      
      m_largeur = rect.size.width;
      m_hauteur = rect.size.height;
      
      // hidecursor()
    #elif defined WIN32
      DEVMODE dm; 
      EnumDisplaySettings(NULL, ENUM_CURRENT_SETTINGS, &dm); 
      dm.dmSize = sizeof(DEVMODE);
      dm.dmBitsPerPel = 24; 
      dm.dmFields = DM_BITSPERPEL;
      ChangeDisplaySettingsEx(&s_noms_sorties_graphiques[m_num_sortie_graphique][0],&dm, 0, CDS_FULLSCREEN, 0);
    
      SetWindowLong(s_plein_ecran, GWL_STYLE,  WS_POPUP | WS_SYSMENU);
      MoveWindow(s_plein_ecran,0,0,dm.dmPelsWidth,dm.dmPelsHeight,false);
      ShowWindow(s_plein_ecran,SW_SHOW);
    
    //  ShowCursor(0);
    #endif
    }
    Mais n'ayant pas de dual screen sous windows, j'ai jamais pu testé si ça marchait bien sous windows...
    dsl le code est pas beau, j'ai pas eu le temps de mettre des vector a la place.
    Je teste ça dès que j'ai le temps merci

Discussions similaires

  1. Multi-écran et une unité centrale?
    Par bicooo dans le forum Périphériques
    Réponses: 3
    Dernier message: 01/02/2008, 11h22
  2. Création dynamique de forms & multi-écran
    Par ArkSquall dans le forum Langage
    Réponses: 14
    Dernier message: 09/05/2006, 09h36
  3. Multi-écrans
    Par Martin Guélat dans le forum Composants
    Réponses: 6
    Dernier message: 04/05/2006, 11h56
  4. Affichage plein écran en multi-écrans
    Par Martin Guélat dans le forum Périphériques
    Réponses: 4
    Dernier message: 12/04/2006, 11h20
  5. OpenGL et les cartes multi-écrans
    Par jcs2 dans le forum OpenGL
    Réponses: 1
    Dernier message: 14/02/2006, 14h08

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