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

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

Marsh Posté le 02-10-2002 à 14:14:53    

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.

Reply

Marsh Posté le 02-10-2002 à 14:14:53   

Reply

Marsh Posté le 02-10-2002 à 14:48:10    

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
Reply

Marsh Posté le 02-10-2002 à 15:18:52    

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
Reply

Marsh Posté le 02-10-2002 à 15:29:21    

merci pour ton aide , je vais essayer.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed