Pour les boutons "agrandir" et "réduire", c'est assez simple, il suffit de changer le style de la fenêtre :
Code :
- void DesactiverBoutons( CWnd *pWndADesactiver )
- {
- pWndADesactiver->ModifyStyle( WS_MAXIMIZEBOX | WS_MINIMIZEBOX, 0, SWP_FRAMECHANGED );
- }
|
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 :
- void DesactiverMenu( CWnd *pWndADesactiver )
- {
- CMenu *pSysMenu = pWndADesactiver->GetSystemMenu( FALSE );
- pSysMenu->EnableMenuItem( SC_MAXIMIZE, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED );
- pSysMenu->EnableMenuItem( SC_MINIMIZE, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED );
- pWndADesactiver->DrawMenuBar();
- }
|
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 :
- void DesactiverFermer( CWnd *pWndADesactiver )
- {
- CMenu *pSysMenu = pWndADesactiver->GetSystemMenu( FALSE );
- pSysMenu->EnableMenuItem( SC_CLOSE, MF_BYCOMMAND | MF_GRAYED | MF_DISABLED );
- pWndADesactiver->DrawMenuBar();
- }
|
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