Pasek Menu

Witam zrobiłem sobie menu ale nie wiem jak dodać funkcje żeby po kliknięciu np. “Koniec” wychodziło się z programu.

Moze “return 0;”? jesli to jest w switchu to

break;

return 0;

O ile ofc chodzi o WinAPI… Zmień tytuł na bardziej konkretny.

Dla mnie to janse:P

Tak WinAPI Tu Screen Menu

Screen

Właśnieo te Menu mi chodzi. mam Menu ale nic nie daje po kliknięciu i chce żeby ktoś mi wytłumaczył gdzie i co wkleić do kodu :slight_smile:

Ehkm

Udało się!

Wystarczyło wkleić w “zdarzeniach” ten kod:

case WM_COMMAND:

{

 if(LOWORD(wParam) == /*ID Menu np*/ 105)

 {

//Treść np ten komunikat

MessageBox (NULL, "To jest komunikat", "Okno komunikatu", MB_OK | MB_ICONINFORMATION);

 }

}

break;

@Edit2 Mam jeszcze jedenproblem zrobiłem kontrolke za pomącą tej funkcji

g_hWyjdz = CreateWindowEx(0, "BUTTON", "WYJDZ", WS_CHILD | WS_VISIBLE, 200, 200, 150, 30, hOkno, NULL, hInstance, NULL);

i nie umiem dodać jej zadaia chodzi żeby po kliknięciu np. wyswiętlił się komunikat

a tak tworzysz button:

hButton=CreateWindowEx(0,WC_BUTTON,“O programie”,WS_CHILD|WS_VISIBLE,400,10,90,25,hwnd,(HMENU)1,*hInst,0);

tak :

MessageBox(hwnd, "bleble","Komunikat", MB_ICONINFORMATION);

przykład użycia :

.......

case WM_COMMAND:

switch(LOWORD(wPar))

{

case 1:

MessageBox(hwnd, "bleble","Komunikat", MB_ICONINFORMATION);

break:

}

break;

......

@UP Wilekie dzięki tylko że jak klikam na jedną czy tam na drogą kontrolke to wyskakuje ten sam komunikat.

hButton=CreateWindowEx(0,WC_BUTTON,“O programie”,WS_CHILD|WS_VISIBLE,400,10,90,25,hwnd,(HMENU)1,*hInst,0);

case 1://ta jedynka pochodzi z tąd (HMENU)1 więc drugi button powinien mieć (HMENU)2

i w tedy

case WM_COMMAND:

switch(LOWORD(wPar))

{

case 1:

MessageBox(hwnd, "Naciśnięto button 1","Komunikat", MB_ICONINFORMATION);

break:

case 2:

MessageBox(hwnd, "Naciśnięto button 2","Komunikat", MB_ICONINFORMATION);

break;

}

break;

nadal mi nie działa ;/

tu jest całymój kod żródwowy zrób tak żeby działało

#include 

#define WIN32_LEAN_AND_MEAN

#include 

// nazwa klasy okna

std::string g_strKlasaOkna = "od0dogk_Window";



// --- procedura zdarzeniowa okna ---


LRESULT CALLBACK WindowEventProc(HWND hWindow, UINT uMsg, WPARAM wParam, LPARAM lParam)


{

   switch (uMsg)

   {


case WM_COMMAND:

{

    if(LOWORD(wParam) == /*ID Menu np*/ 101)

{

MessageBox (NULL, "To jest komunikat", "Okno komunikatu", MB_OK | MB_ICONINFORMATION);

}}{

if(LOWORD(wParam) == /*ID Menu np*/ 102)

{

MessageBox (NULL, "To jest komunikat", "Okno komunikatu", MB_OK | MB_ICONINFORMATION);

}}{

if(LOWORD(wParam) == /*ID Menu np*/ 103)

{

MessageBox (NULL, "To jest komunikat", "Okno komunikatu", MB_OK | MB_ICONINFORMATION);

}}{

if(LOWORD(wParam) == /*ID Menu np*/ 104)

{

MessageBox (NULL, "To jest komunikat", "Okno komunikatu", MB_OK | MB_ICONINFORMATION);

}}{

if(LOWORD(wParam) == /*ID Menu np*/ 105)

{

MessageBox (NULL, "To jest komunikat", "Okno komunikatu", MB_OK | MB_ICONINFORMATION);

}}{

if(LOWORD(wParam) == /*ID Menu np*/ 106)

{

MessageBox (NULL, "To jest komunikat", "Okno komunikatu", MB_OK | MB_ICONINFORMATION);

}}

break;

         case WM_DESTROY:

               // kończymy program

               PostQuitMessage (0);

               return 0;

   }

   return DefWindowProc(hWindow, uMsg, wParam, lParam);

}

HWND g_hGraj;

HWND g_hWyjdz;

// --- funkcja WinMain() ---

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)

{

    	WNDCLASSEX KlasaOkna;

	HBITMAP hBitmapa;

	HBRUSH hbrPedzelOkna;

	// tworzymy pędzel wypełnienia okna

	hBitmapa = (HBITMAP) LoadImage(NULL, "C:\\Degrentes\\Games\\Gangsta Paradise\\Menu\\pattern.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);

	hbrPedzelOkna = CreatePatternBrush(hBitmapa);


	// wypełniamy strukturę WNDCLASSEX

	ZeroMemory (&KlasaOkna, sizeof(WNDCLASSEX));

	KlasaOkna.cbSize = sizeof(WNDCLASSEX);

	KlasaOkna.hInstance = hInstance;

	KlasaOkna.lpfnWndProc = WindowEventProc;

	KlasaOkna.lpszClassName = g_strKlasaOkna.c_str();

	KlasaOkna.hCursor = LoadCursor(hInstance,"KURSOREK");

	KlasaOkna.hIcon = LoadIcon(hInstance, "IKONAA");

	KlasaOkna.hbrBackground = hbrPedzelOkna;	// przypisujemy swój pędzel


	// rejestrujemy klasę okna

	RegisterClassEx (&KlasaOkna);



HMENU hMenu; // uchwyt naszego menu

hMenu = LoadMenu( hInstance, MAKEINTRESOURCE(200));


//Obrazki Przy Górnym Menu

//Muszą mnieć 13x13 px

HBITMAP hbmmenu1 = (HBITMAP)LoadImage(hInstance, "C:\\Degrentes\\Games\\Gangsta Paradise\\Menu\\menu1.bmp", //Obrazek

     IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT); //Nowa Gra

SetMenuItemBitmaps(hMenu, 100, MF_BYCOMMAND, hbmmenu1, hbmmenu1); //


HBITMAP hbmmenu2 = (HBITMAP)LoadImage(hInstance, "C:\\Degrentes\\Games\\Gangsta Paradise\\Menu\\menu2.bmp", //Obrazek

     IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT); //Koniec Grfy

SetMenuItemBitmaps(hMenu, 101, MF_BYCOMMAND, hbmmenu2, hbmmenu2); //


HBITMAP hbmmenu3 = (HBITMAP)LoadImage(hInstance, "C:\\Degrentes\\Games\\Gangsta Paradise\\Menu\\menu3.bmp", //Obrazek

     IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT); // Pauza

SetMenuItemBitmaps(hMenu, 102, MF_BYCOMMAND, hbmmenu3, hbmmenu3); //


HBITMAP hbmmenu4 = (HBITMAP)LoadImage(hInstance, "C:\\Degrentes\\Games\\Gangsta Paradise\\Menu\\menu4.bmp", //Obrazek

     IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT); //Zapisz

SetMenuItemBitmaps(hMenu, 103, MF_BYCOMMAND, hbmmenu4, hbmmenu4); //


HBITMAP hbmmenu5 = (HBITMAP)LoadImage(hInstance, "C:\\Degrentes\\Games\\Gangsta Paradise\\Menu\\menu5.bmp", //Obrazek

     IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT); //Wyczytaj

SetMenuItemBitmaps(hMenu, 104, MF_BYCOMMAND, hbmmenu5, hbmmenu5); //


HBITMAP hbmmenu6 = (HBITMAP)LoadImage(hInstance, "C:\\Degrentes\\Games\\Gangsta Paradise\\Menu\\menu6.bmp", //Obrazek

     IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT); //Cały Ekran

SetMenuItemBitmaps(hMenu, 105, MF_BYCOMMAND, hbmmenu6, hbmmenu6); //


HBITMAP hbmmenu7 = (HBITMAP)LoadImage(hInstance, "C:\\Degrentes\\Games\\Gangsta Paradise\\Menu\\menu7.bmp", //Obrazek

     IMAGE_BITMAP, 0,0, LR_LOADFROMFILE|LR_LOADTRANSPARENT); //Pomoc - Gangsta Paradise

SetMenuItemBitmaps(hMenu, 106, MF_BYCOMMAND, hbmmenu7, hbmmenu7); //



	/* tworzymy okno */




	// tworzymy okno funkcją CreateWindowEx

	HWND hOkno;

	hOkno = CreateWindowEx(NULL, // rozszerzony styl okna


						   g_strKlasaOkna.c_str(),	// klasa okna

						   "Gangsta Paradise", // tekst na pasku tytułu

						   WS_OVERLAPPEDWINDOW, // styl okna

						   CW_USEDEFAULT, // współrzędna pozioma

						   CW_USEDEFAULT, // współrzędna pionowa

					       CW_USEDEFAULT, // szerokość

					       CW_USEDEFAULT, // wysokość

						   NULL, // uchwyt do okna nadrzędnego

						   hMenu, // uchwyt do menu

						   hInstance, // uchwyt do instancji aplikacji

						   NULL); // dodatkowe dane



g_hGraj = CreateWindowEx(0, "BUTTON", "GRAJ", WS_CHILD | WS_VISIBLE, 200, 100, 150, 30, hOkno, NULL, hInstance, NULL);

g_hWyjdz = CreateWindowEx(0, "BUTTON", "WYJDZ", WS_CHILD | WS_VISIBLE, 200, 200, 150, 30, hOkno, NULL, hInstance, NULL);


	// pokazujemy nasze okno

	ShowWindow (hOkno, nCmdShow);

	/* pętla komunikatów */

	MSG msgKomunikat;

	while (GetMessage(&msgKomunikat, NULL, 0, 0))

	{

		TranslateMessage (&msgKomunikat);

		DispatchMessage (&msgKomunikat);

	}

	/* kończymy */

	// usuwamy pędzel i zwalniamy wczytaną bitmapę

	DeleteObject (hbrPedzelOkna);

	DeleteObject (hBitmapa);

	// zwracamy kod wyjścia

	return static_cast(msgKomunikat.wParam);

}

Chwilowo nie mam czasu przekształcać cały kod:

Dopisz sobie swoje funkcje do szkieletu:

#include 

#include 

HWND hEdit,hButton,hWnd;

CHAR szClassName[]="klasa";

HINSTANCE* hInst;

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

INT WINAPI WinMain(HINSTANCE hInstance,HINSTANCE,LPSTR lStart,INT nShow)

{

    hInst=&hInstance;

    WNDCLASSEX xp;

    xp.hInstance=*hInst;

    xp.lpszClassName=szClassName;

    xp.lpfnWndProc=WndProc;

    xp.style=0;

    xp.cbSize=sizeof(WNDCLASSEX);

    xp.hIcon=LoadIcon(0,IDI_APPLICATION);

    xp.hIconSm=0;

    xp.hCursor=LoadCursor(0,IDC_ARROW);

    xp.lpszMenuName="menu";

    xp.hbrBackground=(HBRUSH)COLOR_BACKGROUND;

    xp.cbWndExtra=0;

    xp.cbClsExtra=0;

    if(RegisterClassEx(&xp)==0) return 0;

    HWND oknom=CreateWindowEx(0,szClassName,"program",WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX,50,50,500,600,0,0,*hInst,0);

    ShowWindow(oknom,nShow);

    MSG msgs;

    while (GetMessage(&msgs,0,0,0))

    {

          TranslateMessage(&msgs);

          DispatchMessage(&msgs);

          }

          return msgs.wParam;

          }

          LRESULT CALLBACK WndProc (HWND hwnd,UINT msg,WPARAM wPar,LPARAM lPar)

          {

                  switch(msg)

                  {

                             case WM_CREATE:

                                  hButton=CreateWindowEx(0,WC_BUTTON,"Button 1",WS_CHILD|WS_VISIBLE,400,10,90,25,hwnd,(HMENU)1,*hInst,0);

                                  hButton=CreateWindowEx(0,WC_BUTTON,"Button 2",WS_CHILD|WS_VISIBLE,500,10,90,25,hwnd,(HMENU)2,*hInst,0);

                                  break;

                                  case WM_COMMAND:

                                       switch(LOWORD(wPar))

                                       {

                                                           case 1:

                                                           MessageBox(hwnd, "Naciśnięto button 1","Komunikat", MB_ICONINFORMATION);

                                                           break:

                                                           case 2:

                                                           MessageBox(hwnd, "Naciśnięto button 2","Komunikat", MB_ICONINFORMATION);

                                                           break;

                                       }

                                       break;

                                      case WM_DESTROY:

                                           PostQuitMessage(0);

                                           break;

                                           default:

                                                   return DefWindowProc(hwnd,msg,wPar,lPar);

                                                   }

                                                   return 0;

                                                   }