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 :

Mise a jour de l'affichage


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut Mise a jour de l'affichage
    Bonjour a tous,

    je suis en train de créer une barre de controle qui se situera sur le coté gauche du bureau. j'utilise la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ::SystemParametersInfoW(SPI_SETWORKAREA,0,m_DimPinnedDesktop,SPIF_SENDCHANGE);
    pour définir un bureau plus petit, de manière a ce que les fenetres maximisées ne soient pas "au dessus" de ma barre de controle.

    ceci fonctionne parfaitement si je maximise une fenetre par la suite, mais si une fenetre est déja maximisée, je n'arrive pas à lui dire de faire un mise a jour de l'affichage.

    j'ai essayé des truc du genre :

    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
    ::SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE,0 , 0); 
     
    //ou alors
     
    CWnd* pWnd = CWnd::GetDesktopWindow( )->GetTopWindow( );
     
    while( 1 )
    	{
    		pWnd = pWnd->GetNextWindow();
    		if ( pWnd == NULL ) break;
    		if(pWnd->GetStyle() & SW_SHOWMAXIMIZED &&    pWnd->IsWindowVisible())
    		{
    			::SendMessage(pWnd->GetSafeHwnd(),WM_SETTINGCHANGE , 0, 0);
     
    			//ou bien aussi
     
    			pWnd->ShowWindow(SW_SHOWMAXIMIZED);
    		}
    	}
    Mais rien n'y fait. Si quelqu'un sait comment s'y prendre... Merci

  2. #2
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut
    J'ai essayé de simuler l'envoie de WIN+D en fesant ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	keybd_event(VK_LWIN, 0, 0, 0);
    	keybd_event('D', 0, 0, 0);
    	keybd_event('D', 0, KEYEVENTF_KEYUP, 0);
    	keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
    Ceci me minimise bien toutes les fenetres. je me suis donc dit que si je fesais 2 fois ce bout de code (appuye 2 fois sur WIN+D) ca devrait faire ce que je cherche. (je sais c'est de la bidouille, d'ailleurs si quelqu'un a une meilleure idée, je suis preneur... )
    le problème, c'est que les fenetres restent toutes minimisées au second appel. mais elles se remaximalisent si je fais un vrai WIN+D au clavier juste après.

    une idée?

  3. #3
    Membre averti
    Inscrit en
    Octobre 2007
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 37
    Par défaut
    je suis finalement tombé sur une superbe page en japonais (ici). on a donc :
    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
     
    //là où j'applique ma fonction
    while (!MinimizeAllWindows(TRUE));
    ::SystemParametersInfoA(SPI_SETWORKAREA,0,m_DimPinnedDesktop,SPIF_SENDCHANGE);
    while(!MinimizeAllWindows(FALSE));
     
    //definition de MinimizeAllWindow
    BOOL CMyDialog::MinimizeAllWindows(BOOL bMinimize)
    {
        HRESULT hr;
     
        if( FAILED(CoInitialize(NULL)) )
           return FALSE;
     
        IShellDispatch *pDisp;
        hr = CoCreateInstance(CLSID_Shell,NULL,CLSCTX_INPROC_SERVER ,IID_IShellDispatch,(void**)&pDisp);
        if( SUCCEEDED(hr) )
        {
            if( bMinimize )
                pDisp->MinimizeAll();      
            else
                pDisp->UndoMinimizeALL();   
     
            pDisp->Release();
    		 CoUninitialize();
    		 return TRUE;
        }
    	 CoUninitialize();
    	 return FALSE;
     
     
    }

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

Discussions similaires

  1. [Coin3D] Probleme de mise a jour de l'affichage
    Par totem dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 21/03/2008, 13h42
  2. Mise à jour de l'affichage
    Par piteon dans le forum 2D
    Réponses: 8
    Dernier message: 13/02/2007, 11h59
  3. Mise à jour de l'affichage de la fenêtre
    Par YuGiOhJCJ dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 21/12/2006, 10h55
  4. [JTree] Mise à jour de l'affichage
    Par freddy766 dans le forum Composants
    Réponses: 3
    Dernier message: 16/10/2006, 10h39
  5. Mise a jour de l'affichage JFrame-JPanel
    Par aristeas dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 10/06/2006, 10h12

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