Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1344 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++]Desactiver ou controler les boutons systemes d une fenetre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Visual C++]Desactiver ou controler les boutons systemes d une fenetre

n°222729
xilebo
noone
Posté le 02-10-2002 à 14:14:53  profilanswer
 

Salut,
 
j'aimerai pouvoir desactiver (comme on peut le voir dans  
certaines applications ...) les boutons systemes d une fenetre  
(les 3 boutons en haut a droite), mais je n y arrive pas ...
 
Sachant que j utilise MFC, y a t il des fonctions (ou des messages)
permettant de controler ces boutons car j'ai besoin de desactiver
l'un d eux (la croix).  
 
Y a t il egalement possibilité d ajouter des boutons simplement a
cet endroit ?
 
 
Merci.

mood
Publicité
Posté le 02-10-2002 à 14:14:53  profilanswer
 

n°222754
gatorette
Posté le 02-10-2002 à 14:48:10  profilanswer
 

Pour les boutons "agrandir" et "réduire", c'est assez simple, il suffit de changer le style de la fenêtre :

Code :
  1. void DesactiverBoutons( CWnd *pWndADesactiver )
  2. {
  3. pWndADesactiver->ModifyStyle( WS_MAXIMIZEBOX | WS_MINIMIZEBOX, 0, SWP_FRAMECHANGED );
  4. }


 
Par contre, dans le cas d'une boîte de dialogue (pas pour une fenêtre standard), les commandes "Agrandir" et "Réduire" existent toujours dans le menu système (accessible en cliquant sur l'icône à gauche de la barre de titre).  La solution consiste à éditer le menu système :

Code :
  1. void DesactiverMenu( CWnd *pWndADesactiver )
  2. {
  3. CMenu *pSysMenu = pWndADesactiver->GetSystemMenu( FALSE );
  4. pSysMenu->EnableMenuItem( SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED );
  5. pSysMenu->EnableMenuItem( SC_MINIMIZE, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED );
  6. pWndADesactiver->DrawMenuBar();
  7. }


 
On remarque que les boutons "agrandir" et "réduire" disparaissent si ils sont tous les deux désactivés. C'est le comportement normal de Windows. La seule solution que je vois est de traîter soit même le message WM_NCPAINT (et d'autres messages du même genre), ce qui fait beaucoup de travail pour pas grand chose.
 
Pour le bouton "Fermer" (ainsi que la commande du menu système correspondante), il faut également éditer le menu système :

Code :
  1. void DesactiverFermer( CWnd *pWndADesactiver )
  2. {
  3. CMenu *pSysMenu = pWndADesactiver->GetSystemMenu( FALSE );
  4. pSysMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED );
  5. pWndADesactiver->DrawMenuBar();
  6. }


 
Edit: multiples modifications dues à des essais plus poussés (différence boîte de dialogue / fenêtre normale, désactivation au lieu de suppression...)


Message édité par gatorette le 02-10-2002 à 15:21:48

---------------
each day I don't die is cheating
n°222766
gatorette
Posté le 02-10-2002 à 15:18:52  profilanswer
 

xilebo a écrit a écrit :

Salut,
Y a t il egalement possibilité d ajouter des boutons simplement a
cet endroit ?



 
Pour la deuxième partie de ta question, la réponse est non : il n'est pas possible d'ajouter simplement des boutons dans la barre de titre.
 
La seule solution que je connaisse est de le dessiner soit même dans le message WM_NCPAINT et de traîter également les messages WM_NCLBUTTONDOWN, WM_NCLBUTTONUP, etc. Bref, ce n'est vraiment pas une partie de plaisir.
 
Si tu souhaites tout de même essayer, va voir cette page : http://www.codeguru.com/dialog/cus [...] tion.shtml


---------------
each day I don't die is cheating
n°222772
xilebo
noone
Posté le 02-10-2002 à 15:29:21  profilanswer
 

merci pour ton aide , je vais essayer.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Visual C++]Desactiver ou controler les boutons systemes d une fenetre

 

Sujets relatifs
[VC++] qui a deja utiliser visual c+ de microsftouvrir une nouvelle fenetre automatiquement + gestion des variables ?
Manipulation des dates en visual C++[VISUAL C++] difference d execution entre mode debug et release
perl/TK alignement de boutons[Delphi] Déplacement de fenetre a la souris [Résolu]
teurnouvelle fenetre navigateurBoutons Delphi
visual studio 6.0 entreprise editionMasquer la barre d'outil sur une fenêtre Internet Explorer ?
Plus de sujets relatifs à : [Visual C++]Desactiver ou controler les boutons systemes d une fenetre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR