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

MFC Discussion :

Mode console toujours en avant plan ....


Sujet :

MFC

  1. #1
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut Mode console toujours en avant plan ....
    ,

    Je voudrai savoir s'il est possible de placer une console en mode 'Always On Top'.

    Pour une boîte de dialogue ou toute autre IHM, je l'ai déjà réalisé et ça fonctionne bien. Mais quand j'essaie de transposer sur une console, cela ne marche pas.

    Auriez vous déjà rencontré le problème ou une idée ?




    Alice

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Tu essaies comment, pour la console?

    (qu'on sache à quel endroit ça échoue)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    salut,
    je suppose que tu as reussi a récupérer le hwnd de la console ?
    sinon une fenetre console n'est pas une fenetre à part entiere au sens windows du terme ...
    si BringWindowToTop ne fonctionne pas je ne pense pas que tu puisse faire autremement.


  4. #4
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut re
    C'est bien là mon problème : le handle ....

    Dans toute autre application avec IHM, je n'ai aucun problème pour récupérer le handle de la window.
    Sauf qu'ici ... ça marche pas . Où alors (ce qui est plus vraisemblable) je m'y prends comme un pied.

    Je pensais appliquer un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SetWindowPos
             (
             Handle,              // const CWnd* pWndInsertAfter, 
             HWND_TOPMOST,
             0,                     // int x, 
             0,                     // int y, 
             0, //r.right - r.left,    // int cx, 
             0, //r.bottom - r.top,    // int cy, 
              SWP_NOSIZE   // UINT nFlags 
             ) ;
    mais ta fonction à l'air plutôt sympa, je la testerai dès que je pourrai récupérer le handle.

    je travaille avec une window application (genre winMain)

    As tu une idée pour le handle de l'application ?

    Alice

    PD : (AfxGetApp n'est pas reconnu)

  5. #5
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Par défaut
    oki je procede comme suit:
    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
     
    /* -----------------------------------------------------------------------*/
    HWND GetConsoleHwnd(void)
    {
    	#define MY_BUFSIZE 1024 // buffer size for console window titles
        HWND hwndFound;         // this is what is returned to the caller
        char pszNewWindowTitle[MY_BUFSIZE]; // contains fabricated WindowTitle
        char pszOldWindowTitle[MY_BUFSIZE]; // contains original WindowTitle
     
     
       // si application MFC retourne le handle de fenetre de la mainwindow
       if(AfxGetMainWnd()) return (AfxGetMainWnd()->m_hWnd);
     
        // fetch current window title 
        GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);
     
        // format a "unique" NewWindowTitle 
        wsprintf(pszNewWindowTitle,"%d/%d",
                    GetTickCount(),
                    GetCurrentProcessId());
     
        // change current window title 
        SetConsoleTitle(pszNewWindowTitle); 
     
        // ensure window title has been updated 
        Sleep(40);
     
        // look for NewWindowTitle 
        hwndFound=FindWindow(NULL, pszNewWindowTitle);
     
        // restore original window title 
        SetConsoleTitle(pszOldWindowTitle);
        return(hwndFound); 
    }

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Eh bien, pour récupérer le handle, deux manières:
    L'une est lente mais marche sous les vieux Windows comme les actuels, mais risque de ne plus marcher si la classe de fenêtre des consoles change encore:
    (la classe de fenêtre de la console est soit "tty", soit "ConsoleWindowClass"
    http://www.developpez.net/forums/viewtopic.php?t=397139
    (fonction GetConsoleHwnd())

    L'autre marche rapidement et à tous les coups, mais uniquement sous Windows 2000 ou supérieur:
    fonction GetConsoleWindow()
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/getconsolewindow.asp

    Edit: Ben alors! Post croisé...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    pour la récupération du handle !!!!!

    Bon maintenant que je récupère le handle j'ai essayé et Dans les deux cas aucun résultat ....

    C'est à dire que le console ne reste pas en avant plan quoiqu'il arrive...
    Je suppose donc qu'il n'y a rien à faire : les fenêtres consoles ne peuvent pas avoir cette propriété.

    Zut.

    Alice

  8. #8
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Chez moi ça marche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SetWindowPos( 
        GetConsoleWindow(),
        HWND_TOPMOST, 
        0,                 
        0,                 
        0, 
        0, 
        SWP_NOSIZE | SWP_NOMOVE ) ;

  9. #9
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    Je peux pas utiliser GetConsoleWindow du coup j'utilise la fonction de Farscape pour la récupération du handle.

    J'ai essayé en mettant les même arguments mais rien à faire . Quand je clic sur une autre appli en cours, cette dernière passe devant la console....


    Alice

  10. #10
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Tu peux enlever ça dans le doute:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       // si application MFC retourne le handle de fenetre de la mainwindow 
       if(AfxGetMainWnd()) return (AfxGetMainWnd()->m_hWnd);
    vérifie ce que te renvoies la fonction.
    Pour utiliser GetConsoleWindow, il faut définir _WIN32_WINNT à 0x0500 (ou plus).

  11. #11
    Membre confirmé
    Avatar de Alice9
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2004
    Messages : 124
    Par défaut
    pas mieux ....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Garder une fenêtre toujours en avant plan
    Par Invité dans le forum WinDev
    Réponses: 1
    Dernier message: 07/12/2012, 10h53
  2. Winform toujours en avant plan
    Par chamamo dans le forum C#
    Réponses: 6
    Dernier message: 03/08/2010, 14h21
  3. Fenêtre toujours en avant plan
    Par cbeckendorf dans le forum 4D
    Réponses: 3
    Dernier message: 13/10/2006, 13h59
  4. fenetre toujours en avant-plan
    Par cecileWaseda dans le forum C++Builder
    Réponses: 3
    Dernier message: 04/08/2006, 14h01
  5. Editeur en mode console
    Par logramme dans le forum C
    Réponses: 5
    Dernier message: 11/06/2002, 13h23

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