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 :

probleme � la lecture du message WM_SHOWWINDOW


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2015
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2015
    Messages : 41
    Par d�faut probleme � la lecture du message WM_SHOWWINDOW
    Hello,

    j'essaie de lire le msg WM_SHOWWINDOW pour etre informer du moment ou ma fenetre est restauree apres avoir ete minimisee.
    je lis le msg de cette facon:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    case WM_SHOWWINDOW:
       if(lParam == SW_PARENTOPENING)
       {
           do something there.
       }
       return 0;
    mais le if ne se verifie pas apres avoir restaur�e ma fenetre.
    est ce que je lis le lParam de la mauvaise facon ou est ce que j'ai mal compris le moment ou windows envoie ce message ?

    thanks for your answers

  2. #2
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par d�faut
    Salut,

    c'est pas plut�t message:WM_SYSCOMMAND & wparam:SC_RESTORE ce que tu cherches � faire ? (d�clench� sur d�mini/d�maxi).

  3. #3
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2015
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2015
    Messages : 41
    Par d�faut
    j'ai fait ca deja:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    case WM_SYSCOMMAND:
    		if (wParam == (WPARAM)SC_MAXIMIZE || wParam == (WPARAM)SC_RESTORE)
    		{
    			InvalidateRect(hWnd, NULL, TRUE);
    		}
    		return DefWindowProc(hWnd, message, wParam, lParam);
    		break;
    seulement ca ne marche que sur un restore apres avoir maximiser la fenetre...

  4. #4
    Membre Expert Avatar de jopopmk
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Par d�faut
    Bizarre ... voil� un code qui fonctionne gentiment chez moi :
    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
    signed char _minMaxStatus = 0;
     
    static LRESULT CALLBACK _wndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
        if (message == WM_CLOSE) {
            PostQuitMessage(0);
            return 0;
        } else if (message == WM_SYSCOMMAND) {
            char buf[256] = "";
            if (wParam == SC_MINIMIZE) {
                _minMaxStatus = -1;
                SetWindowText(hwnd, "MINIMIZED");
            } else if (wParam == SC_MAXIMIZE) {
                _minMaxStatus = 1;
                SetWindowText(hwnd, "MAXIMIZED");
            } else if (wParam == SC_RESTORE) {
                sprintf(buf, "RESTORED : %s", _minMaxStatus == -1 ? "from MINIMIZE" :
                                              _minMaxStatus == 1 ? "from MAXIMIZE" :
                                              "Whot !?");
                _minMaxStatus = 0;
                SetWindowText(hwnd, buf);
             }
        }
        return (DefWindowProc(hwnd, message, wParam, lParam));
    }
    Le cas "Whot !?" apparaissant quand tu maximize, minimize, unminimize, unmaximize (double restore en somme).

    PS : j'ai test� ton code et l'event est bien d�clench� sur un restore depuis minimize ou un restore depuis maximize (SC_RESTORE) comme sur un maximize (SC_MAXIMIZE).

  5. #5
    Expert confirm�
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    F�vrier 2005
    Messages
    5 504
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 5 504
    Par d�faut
    Pour v�rifier les messages envoy�s aux fen�tres, je vous conseille d'utiliser des outils types Spy++ qui sont g�n�ralement livr�s avec Visual Studio.

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Si tu veux invalider la fen�tre apr�s une restauration, je me demande si le plus simple n'est pas de le faire dans le traitement de WM_SIZE, vu que c'est g�n�ralement une raison d'invalidation dans tous les cas...
    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 actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2015
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2015
    Messages : 41
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    	case WM_SYSCOMMAND:
    		if (wParam == (WPARAM)SC_MAXIMIZE || wParam == (WPARAM)SC_RESTORE)
    		{
    			InvalidateRect(hWnd, NULL, TRUE);
    		}
    		return DefWindowProc(hWnd, message, wParam, lParam);
    		break;
    ce code la fonctionne? un restore depuis minimize, c'est bien l'action de cliquer sur licone du programme dans la barre des taches pour le rouvrir apres avoir ete retrecis ? je commence a douter de moi aha.



    @M�dinoc: j'ai aussi essaye de traiter le msg WM_SIZE avec le parametre "SIZE_RESTORED", mais comme dans le cas de WM_SYSCOMMAND, je ne le recois pas apres un minimize... idk... si ca marche chez vous je suis un peu perdu

    @bacelar: spy++? hmm je vais aller jeter un oeil

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Pour moi, invalider, �a se fait dans TOUS les WM_SIZE, pas besoin de tester le type pr�cis.
    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.

  9. #9
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2015
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2015
    Messages : 41
    Par d�faut
    ben.

    Il y a beaucoup d'elements dans ma fenetre. Du coup pour de meilleures performances je ne redessine que le bord droit et le bas avec le message WM_SIZE pour ajuster le cadre lors du redimensionnement.
    Seulement lorsque je minimize la fenetre et que je la restaure, plusieurs elements sont mal redessines (des groupbox et boutons OWNERDRAW). Je veux donc la redessiner entierement a ce moment..

  10. #10
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Ao�t 2015
    Messages
    41
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (�le de France)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Ao�t 2015
    Messages : 41
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	case WM_SIZE:
     
    		if (wParam == SIZE_MINIMIZED)
    			FUK = 1;
    		if (wParam == SIZE_RESTORED && FUK == 1)
    		{
    			InvalidateRect(hWnd, NULL, TRUE);
    			FUK = 0;
    		}
    ca, ca marche. je dois faire l'effort de continuer a chercher ou... ?

Discussions similaires

  1. [C#] Probleme de lecture de valeur nulle
    Par kenzo080 dans le forum ASP.NET
    R�ponses: 7
    Dernier message: 25/10/2010, 16h58
  2. [xml]probleme de lecture
    Par mavina dans le forum XML/XSL et SOAP
    R�ponses: 6
    Dernier message: 22/07/2005, 08h34
  3. Probleme de lecture de classe
    Par wkd dans le forum Composants
    R�ponses: 5
    Dernier message: 21/05/2004, 15h20
  4. [LG]probleme de lecture de base de données
    Par jf dans le forum Langage
    R�ponses: 14
    Dernier message: 26/06/2003, 15h57

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