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 :

[Listbox] Plus de selection possible en plein écran


Sujet :

MFC

  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Points : 486
    Points
    486
    Par défaut [Listbox] Plus de selection possible en plein écran
    Bonjour,

    j'ai écrit la semaine dernière car j'avais des problèmes pour afficher une property page (d'une property sheet) en plein écran. Depuis j'ai trouvé la solution...et découvert un nouveau problème:

    Ma property page contient différents contrôles: checkboxes, radio-buttons, buttons, et une Listbox. Tous continuent à fonctionner normalement quand je suis en plein écran...sauf la Listbox: il est toujours possible d'utiliser les flèches à droite pour faire défiler la liste, mais impossible de sélectionner quoi que ce soit. Les clics de souris ne sont pas enregistrés, de même que les touches haut et bas du clavier, c'est comme si le contrôle était désactivé (sauf que, comme dit, les flèches pour dérouler la liste fonctionnent toujours, elles).

    J'ai essayé d'activer expicitement ce contrôle après le passage en plein-écran, mais ca ne change rien.

    J'ai aussi essayé de changer entre top, topmost et notopmost comme parametre pour ma property page en plein ecran, mais pareil, ca ne change rien.

    Pour info je mets le code que j'utilise pour passer en plein ecran:

    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
    if(!m_fullscreen)
    {
    	m_fullscreen = true;
     
    	// 1. Replace current parent by the desktop window
    	// --------------------------------------------------------------
    	m_parentSave = this->GetParent();
    	this->SetParent(GetDesktopWindow());
     
    	// 2. Retrieve desktop "work area" (everything above the taskbar)
    	// --------------------------------------------------------------
    	CRect desktopRect;
    	SystemParametersInfo(SPI_GETWORKAREA,NULL,&desktopRect,NULL);
     
    	// 3. Maximize our dialog
    	// --------------------------------------------------------------
    	this->SetWindowPos(&wndTop, desktopRect.left, desktopRect.top,
    	                            desktopRect.right, desktopRect.bottom, 
    					SWP_SHOWWINDOW);
    	}
    Voilà, vous l'aurez compris je ne sais plus trop où chercher donc vos idées seront plus que bienvenues.

    Merci d'avance!

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 166
    Points : 12 284
    Points
    12 284
    Par défaut
    Je pense que le problème vient de votre modification du parent de la fenêtre.

    La gestion d'un grand nombre d'évènement sur les contrôles est propagée à la fenêtre parente qui, dans le cas des MFC génère des évènements de notifications et de commandes.

    En modifiant le parent de votre property page, vous avez cassé le lien avec les routines dans les fenêtres parents.

    Si vous générez un CDC à partir du bureau, pourquoi changer de parent ?

  3. #3
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Points : 486
    Points
    486
    Par défaut
    Bonjour bacelar, et merci pour votre réponse!

    Je pensais aussi que c'était forcément lié au changement de parent, mais sans vraiment comprendre pourquoi...votre réponse apporte les précisions qui me manquaient!

    Si vous générez un CDC à partir du bureau, pourquoi changer de parent ?
    Euh je ne suis pas sûr de vous suivre. Je ne génère pas de nouveau CDC, je change juste de parent pour éviter que ma fenêtre soit clippée quand je veux la faire passer en plein écran.

    Je vais voir si il y a moyen de passer en plein écran sans changer de parent, peut être en changeant temporairement le type de ma fenêtre de "child" à "popup"... Je ne sais pas je ne suis pas vraiment un expert en MFC, mais j'ai récupéré un vieux projet à mettre à jour alors faut bien s'y mettre

    En tout cas si qq'un sait comment faire du plein écran sans changer de parent, votre avis est le bienvenu!

  4. #4
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2008
    Messages : 413
    Points : 486
    Points
    486
    Par défaut
    OK, cette fois c'est bon!

    vous m'aviez mis sur la piste bacelar, la doc msdn a fait le reste!

    Tiré de: http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx

    For compatibility reasons, SetParent does not modify the WS_CHILD or WS_POPUP window styles of the window whose parent is being changed. Therefore, if hWndNewParent is NULL, you should also clear the WS_CHILD bit and set the WS_POPUP style after calling SetParent. Conversely, if hWndNewParent is not NULL and the window was previously a child of the desktop, you should clear the WS_POPUP style and set the WS_CHILD style before calling SetParent.
    Du coup, j'utilise NULL à la place du desktop, et je change mon style en popup pour que les messages ne soient pas envoyés au parent, comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    this->SetParent(NULL);
    this->ModifyStyle(WS_CHILD, WS_POPUP);
    ...et ca marche, enfin!

    Encore merci pour votre aide bacelar!

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Février 2005
    Messages : 5 166
    Points : 12 284
    Points
    12 284
    Par défaut
    Essayez de mettre vos contrôles dans une Vue, elle dérive de CCmdTarget et pourra donc générer les WM_COMMAND et les router vers les autres objets de l'application.

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

Discussions similaires

  1. plein écran plus disponible
    Par Infophile dans le forum Gnome
    Réponses: 0
    Dernier message: 08/10/2010, 14h12
  2. Réponses: 4
    Dernier message: 13/05/2007, 09h12
  3. Plein écran IE6 personnalisé en JS: possible?
    Par PedroBD dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 28/08/2006, 14h06
  4. Réponses: 4
    Dernier message: 28/05/2006, 18h01
  5. Réponses: 17
    Dernier message: 17/10/2002, 20h06

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