Modif menu système [vc][devcpp][lccw32]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 467 fois - Téléchargée 37 fois

Contenu du snippet

Voici un petit exemple montrant comment modifier le menu système d'une feuille :
- Suppression de commandes (Agrandir, ....)
- Ajout de commandes (par ex: A propos de...)

Source / Exemple :


#include <Windows.h>

#define IDM_ABOUT	100

HWND hWndMain;

void ModifySystemMenu()
{
	// Recherche du menu système de la fenêtre
	HMENU hSysMenu = GetSystemMenu(hWndMain,FALSE);
	// Suppression des commandes 'Taille', 'Agrandir" et "Déplacer' du menu système
	// Cela supprime également toute possibilité de redimensionner, agrandir et déplacer
	// la fenêtre avec la souris (essayez, pour voir)
	DeleteMenu(hSysMenu,SC_SIZE,MF_BYCOMMAND);
	DeleteMenu(hSysMenu,SC_MAXIMIZE,MF_BYCOMMAND);
	DeleteMenu(hSysMenu,SC_MOVE,MF_BYCOMMAND);
	// Ajout d'un séparateur
	AppendMenu(hSysMenu,MF_SEPARATOR,0,NULL);
	// Ajout du menu 'A propos de...'
	AppendMenu(hSysMenu,MF_STRING | MF_ENABLED,(UINT)IDM_ABOUT,"A &propos de ...");
}

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, UINT wParam, UINT lParam)
{
	switch(message)
	{
		case WM_DESTROY:
			PostQuitMessage(0);
			return 0;
		case WM_SYSCOMMAND:
			switch (LOWORD(wParam))
			{
				case IDM_ABOUT:
					MessageBox(hWnd,"C'est t'y pas beau, ça ???","A propos de...",MB_ICONINFORMATION);
					return 0;
				default:
					return DefWindowProc(hWnd,message,wParam,lParam);
			}
			break;
		default:
			return DefWindowProc(hWnd,message,wParam,lParam);
	}
	return 0;
}

int APIENTRY WinMain(HINSTANCE hInst,HINSTANCE hPrevInst,LPSTR lpCmdLine,int nCmdShow)
{
	WNDCLASS wc;
	MSG Msg;

	wc.lpfnWndProc=(WNDPROC)MainWndProc;
	wc.hCursor=LoadCursor(NULL,IDC_ARROW);
	wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	wc.style=CS_HREDRAW|CS_VREDRAW;
	wc.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1);
	wc.cbClsExtra=0;
	wc.cbWndExtra=0;
	wc.hInstance=hInst;
	wc.lpszClassName="MyWndClass";
	wc.lpszMenuName=NULL;

	RegisterClass(&wc);

	hWndMain=CreateWindow("MyWndClass","Modification du menu système",
							WS_OVERLAPPEDWINDOW | WS_VISIBLE | WS_CAPTION | WS_MINIMIZEBOX,
							CW_USEDEFAULT,0,300,250,NULL,NULL,hInst,NULL);
	
	ShowWindow(hWndMain,nCmdShow);
	UpdateWindow(hWndMain);

	ModifySystemMenu();

	while (GetMessage(&Msg,NULL,0,0))
	{
		TranslateMessage(&Msg);
		DispatchMessage(&Msg);
	}
	return 0;
}

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
mardi 1 juillet 2008
Statut
Membre
Dernière intervention
14 avril 2010

merci
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
7
C'est ce que je cherchais !
10/10 !
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005

En fait je développe un bureau virtuel.
Grace au code ci-dessus, lorsque l'on fait un click droit sur une fenêtre, on obtient le menu suivant :
Restaurer
Déplacer
Taille
Réduire
Agrandire
----------
X Fermer
----------
Visible sur Bureau [1]
Visible sur Bureau [2]
Visible sur Bureau [3]
Visible sur Bureau [4]
....
De manière si l'on est sur le bureau 1 et que l'on sélèctionne "Visible sur Bureau [2]"
La fenêtre sera visible sur le bureau choisi.
Cela fonctionne parfaitement pour les fenêtres
Et je désire faire la même chose avec les barres d'outils et modifier le menu de cette manière :
Barres d'outils >
-------------
Toujours visible
Masquer automatiquement
------------
Visible sur Bureau [1]
Visible sur Bureau [2]
Visible sur Bureau [3]
Visible sur Bureau [4]
....

Mais ce n'est peut-être pas possible puisque ce n'est pas un menu système ...
Merci quand même pour la réponse.
Messages postés
154
Date d'inscription
dimanche 1 avril 2001
Statut
Membre
Dernière intervention
2 octobre 2009
1
Les barres d'outils n'ont pas de menu système (du moins à ma connaissance)
Il te va donc falloir trouver une autre méthode (explique ce que tu veux faire, on verra bien)

Désolé, et bon prog quand même
Messages postés
140
Date d'inscription
mercredi 28 avril 2004
Statut
Membre
Dernière intervention
21 juillet 2005

Merci beaucoup.
Cet exemple m'a permis de modifier les menus systemes de toutes les fenêtres windows.
Mais cela ne fonctionne pas sur les barres outils (en fenêtres).
Y a t-il une solution ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.