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

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

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.