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 :

[win32] messages de fenetre WM_SIZE et WM_ACTIVATE


Sujet :

Windows

  1. #1
    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 [win32] messages de fenetre WM_SIZE et WM_ACTIVATE
    Bonjour,
    j'ai deux 'problèmes' mineurs.

    Le premier : Comment demander le rafraichissement de la fenetre entiere avec WM_PAINT simplement lors d'un message WM_SIZE qui réduit la fenetre ?
    En effet il n'est envoyé de message WM_PAINT que si j'agrandis ma fenetre.

    Le deuxieme : Mon appli ouvre plusieurs fenetres independantes. Lorsque mon appli n'est pas au premier plan et que je selectionne une fenetre, j'aimerais que les autres soient ramennées également au premier plan.
    J'ai fait des tests avec :
    SetActiveWindow
    SetForegroundWindow
    BringWindowToTop
    Mais ces fonctions donne le focus aux fenetres ce que je ne veux pas.

  2. #2
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Pour le premier :

    utilises InvalidateRect(hwnd,NULL,true);

    http://msdn2.microsoft.com/en-us/library/ms534893.aspx

    Pour le deuxieme :

    Tu dois pouvoir faire un truc du genre :

    GetActiveWindow -> recuperer la fenetre qui a le focus
    BringWindowToTop -> ramener ta fenetre au premier plan
    SetActiveWindow -> remettre le focus sur la fenetre qui l'avait auparavant

  3. #3
    Expert éminent sénior

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    Pour le 1er, as-tu utilisé les styles CS_HREDRAW | CS_VREDRAW dans ta classe de fenetre ?

  4. #4
    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
    aurelien effectivement ça marche avec ces styles mais alors ça clignote affreusement, je crois que je prefere encore que ça ne raffraichisse pas.

    buzzkaido, un invalidate serait très bien mais si ma fenetre a été agrandie, le message WM_PAINT serait alors envoyé deux fois non ?

    Pour mon deuxieme probleme, disons que j'ai 4 fenetres.

    A quel moment faire ces instructions ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    GetActiveWindow -> recuperer la fenetre qui a le focus
    BringWindowToTop -> ramener ta fenetre au premier plan
    SetActiveWindow -> remettre le focus sur la fenetre qui l'avait auparavant
    Car si je les fait dans WM_ACTIVATE, lorsque je vais faire SetActiveWindow, le message va etre re-envoyé et c'est parti pour faire une boucle sans fin.

  5. #5
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    WM_SIZE:
    http://msdn2.microsoft.com/en-us/library/ms632646.aspx

    Si par "reduire" tu veux dire "minimiser", il suffit de faire un test sur wParam=SIZE_MINIMIZED pour envoyer ou non le InvalidateRect

    Pour le 2nd probleme, tu dois pouvoir le faire dans un des messages WM_ACTIVATEAPP ou WM_ACTIVATEAPP, je sais pas trop

    http://msdn2.microsoft.com/en-us/library/ms674887.aspx

  6. #6
    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
    Pour wm_size aucun wparam ne correspond.
    Je n'ai pas besoin des evenements maximised ou minimized mais je d'une diminution de la taille de la fenetre.

    Tant pis je vais faire des tests avec la taille precedente..

    pour wm_activateapp ça devrait le faire je vais essayer.

  7. #7
    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
    Encore un autre probleme :

    Avec mes 4 fenetres independantes, j'ai 4 boutons dans ma barre des taches windows.

    N'y a-t-il pas moyen d'avoir des fenêtres sans qu'elle apparaissent dans la barre ?

    Est ce un style a préciser ? merci.

  8. #8
    Membre éclairé
    Avatar de buzzkaido
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2004
    Messages
    821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2004
    Messages : 821
    Points : 734
    Points
    734
    Par défaut
    Si, faut jouer avec les style lors du CreateWindow :

    http://msdn2.microsoft.com/en-us/library/ms632680.aspx

    et

    http://msdn2.microsoft.com/en-us/library/ms632600.aspx

    et

    http://msdn2.microsoft.com/en-us/library/ms633577.aspx

    Y'a plein de combinaisons possibles.

    Si tu lis bien la description de chaque option, tu trouvera ce que tu veux faire (apparait dans la barre des taches ou pas...)

  9. #9
    Expert éminent sénior

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    avec WS_EX_TOOLWINDOW, et si le style toolbar ne te convient pas, voir aussi WS_EX_APPWINDOW:
    http://vcfaq.mvps.org/mfc/4.htm
    http://msdn.microsoft.com/msdnmag/issues/0500/c/

    Il y a aussi l'interface ITaskbarList.
    http://msdn2.microsoft.com/en-us/library/ms631840.aspx

  10. #10
    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
    Je fais avec toolwindow ça me va.

    Lors de l'evenement WM_ACTIVATEAPP je ramene mes fenetres au premier plan.

    Lors de l'evenement WM_SIZE de ma fenetre 'principale' je fais un hide sur toutes les autres si wparam est size_minimised et un show si c'est restored.

  11. #11
    Expert éminent sénior

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    J'ai pas trop suivi, mais si tu mets tes crées tes toolbars comme fenetres filles de ta mainwindow, je pense que tu n'as pas besoin de gérer WM_ACTIVATEAPP et WM_SIZE, si ton but est de masquer/montrer les fenetres en meme temps que ta mainwnd.

  12. #12
    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
    Mais les fenetres ne seront plus independantes. Je veux pouvoir les balader n'importe ou.

  13. #13
    Expert éminent sénior

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

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 669
    Points
    10 669
    Billets dans le blog
    3
    Par défaut
    C'est le principe d'une toolbar. Elle sera par contre toujours en avant plan par rapport a ta fenetre principale.

Discussions similaires

  1. [API Win32]Message au-dessus de tout
    Par CoDeAVE dans le forum C
    Réponses: 0
    Dernier message: 19/10/2009, 20h30
  2. integrer les messages des fenetres dans une main loop
    Par d'Oursse dans le forum Windows
    Réponses: 3
    Dernier message: 15/06/2007, 19h29
  3. [win32] message WM_LMOUSEBUTTON
    Par NiamorH dans le forum Windows
    Réponses: 1
    Dernier message: 25/05/2007, 19h51
  4. [WIN32] - Messages hors fenetre
    Par buzzkaido dans le forum Windows
    Réponses: 7
    Dernier message: 24/01/2007, 13h47
  5. Réponses: 4
    Dernier message: 24/08/2005, 16h01

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