Jump to content

[C] Meniu


Cdorsu
 Share

Recommended Posts

Sper sa intelegeti, cat de cat. Sa trecem la cod.

 

 

#include <windows.h>

#define CLASS_NAME "Clasa mea" ///Numele clasei pentru fereastra
#define WINDOW_NAME "Meniuri"  ///Numele ferestrei

#define EXIT    0x00001 ///Aceste vor fi valorile pentru EXIT
#define MESSAGE 0x00010 ///respectiv MESSAGE din meniu
#define HELP	0x00100 ///La fel si HELP

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iShow)
{
	WNDCLASSEX wc;
	HWND hwnd;
	MSG Msg;

	wc.cbSize = sizeof(WNDCLASSEX);
	wc.style = 0;
	wc.lpfnWndProc = WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = NULL;
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wc.lpszMenuName = NULL;
	wc.lpszClassName = CLASS_NAME;
	wc.hIconSm = NULL;

	if (!RegisterClassEx(&wc))
	{
		MessageBox(NULL, "Window Registration Failed!", "Error!",
			MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}

	hwnd = CreateWindowEx(
		WS_EX_CLIENTEDGE,
		CLASS_NAME,
		WINDOW_NAME,
		WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
		NULL, NULL, hInstance, NULL);

	if (hwnd == NULL)
	{
		MessageBox(NULL, "Window Creation Failed!", "Error!",
			MB_ICONEXCLAMATION | MB_OK);
		return 0;
	}

	ShowWindow(hwnd, iShow);
	UpdateWindow(hwnd);

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

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam)
{
	switch (uMessage)
	{
	case WM_CREATE://Aici devin lucrurile putin mai interesante
	{
		HMENU hMenu, hSubMenu; //O sa avem doua variabile: una pentru meniul principal(hMenu) si un submeniu(hSubMenu)
		hMenu = CreateMenu(); //Cream meniul principal
		hSubMenu = CreatePopupMenu(); //si submeniul

		AppendMenu(hSubMenu, MF_STRING, MESSAGE, "Message");//In submeniu vom adauga optiunea "Message", care este definita ca MESSAGE(0x00001)
															//MF_STRING inseamna ca vom introduce un sir de caractere, astfel parametrul 4 va fi obligatoriu sir de caractere
		AppendMenu(hSubMenu, MF_STRING, EXIT, "Exit");//In submeniu vom adauga optiunea "Exit", care este definita ca EXIT(0x00010)
		
		AppendMenu(hMenu, MF_STRING | MF_POPUP, (UINT)hSubMenu, "Optiuni"); //In meniul principal vom adauga optiunea "Optiuni",
																			//care este legata de submeniul (popupmenu)hSubMenu transformat in UINT
		AppendMenu(hMenu, MF_STRING, HELP, "Help");//In meniul principal adaugam optiunea "Help", care este definita ca HELP(0x00100)
		SetMenu(hWnd, hMenu);
	}break;
	case WM_COMMAND://Verificam inputul
		switch (LOWORD(wParam))
		{
			case MESSAGE://afisam mesaje
			{
				RECT rectClient;
				GetClientRect(hWnd, &rectClient);
				HDC dc = GetDC(hWnd);
				FillRect(dc, &rectClient, (HBRUSH)(COLOR_WINDOW + 1));//Stergem ecranul
				TextOut(dc, 0, 0, "Message", sizeof("Message"));
				ReleaseDC(hWnd, dc);
			}break;
			case HELP:
			{
				RECT rectClient; 
				GetClientRect(hWnd, &rectClient);
				HDC dc = GetDC(hWnd);
				FillRect(dc, &rectClient, (HBRUSH)(COLOR_WINDOW + 1));//Stergem ecranul
				TextOut(dc, 0, 0, "Help", sizeof("Help"));
				ReleaseDC(hWnd, dc);
			}break;
			case EXIT:
				SendMessage(hWnd, WM_DESTROY, 0, 0);
				break;
			default:
				break;
		}
		break;
	case WM_DESTROY:
		DestroyWindow(hWnd);
		PostQuitMessage(0);
		break;
	}
	return DefWindowProc(hWnd, uMessage, wParam, lParam);
}

 

 

Am sarit peste explicatiile despre cum se face o fereastra si cum ne "ocupam" de mesajele primite de la utilizator.

Daca aveti intrebari, nu ezitati sa le puneti in comentarii.

 

Nota: E posibil ca pe unele compilatoare sa nu ruleze.

Edited by Cdorsu
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.