Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MODIF MENU SYSTÈME [VC][DEVCPP][LCCW32]


Information sur la source

Catégorie :Système Niveau : Débutant Date de création : 25/04/2002 Date de mise à jour : 25/04/2002 22:25:34 Vu : 4 388

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • #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;
  • }
#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;
} 

Commentaires et avis

signaler à un administrateur
Commentaire de larion le 10/05/2004 19:14:52

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 ?

signaler à un administrateur
Commentaire de Xaviou le 10/05/2004 20:49:27

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

signaler à un administrateur
Commentaire de larion le 10/05/2004 23:03:11

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 &gt;
-------------
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.

signaler à un administrateur
Commentaire de victorcoasne le 14/12/2005 18:35:29

C'est ce que je cherchais !
10/10 !

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 3,463 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.