Cdorsu Posted January 22, 2016 Share Posted January 22, 2016 (edited) 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 January 22, 2016 by Cdorsu 2 Link to comment Share on other sites More sharing options...
FnZ Posted January 23, 2016 Share Posted January 23, 2016 Mulțumim pentru tuorial, pentru a evita spamul voi da , dacă aveți nelămuriri dați PM. Link to comment Share on other sites More sharing options...
Recommended Posts