maniek1310 Temat założony przez niniejszego użytkownika |
[WinAPI] Obsługa elementów menu » 2013-09-14 22:08:34 Witam zrobiłem sobie menu w WinAPI ale nic się nie dzieje po naciśnięciu na Plik -> Informacje, mógłby mi ktoś pomóc przerobić switch, aby robiła jakąś czynność po kliknięciu,np. w wyżej podany Plik -> Informacje. Tutaj macie pliki źródłowe : funkcja switch switch( message ) { case WM_DESTROY: PostQuitMessage( 0 ); break; case MENU_INFO: MessageBox( hwnd, "To jest wiadomość.", "Wiadomość", MB_ICONINFORMATION | MB_OKCANCEL ); break; default: return DefWindowProc( hwnd, message, wParam, lParam ); } main.cpp #include <windows.h> #include "nagl.h"
LRESULT CALLBACK WindowProcedure( HWND, UINT, WPARAM, LPARAM );
char szClassName[] = "CodeBlocksWindowsApp"; int WINAPI WinMain( HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { HWND hwnd; MSG messages; WNDCLASSEX wincl; wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof( WNDCLASSEX ); wincl.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wincl.hIconSm = LoadIcon( NULL, IDI_APPLICATION ); wincl.hCursor = LoadCursor( NULL, IDC_ARROW ); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground =( HBRUSH ) COLOR_BACKGROUND; if( !RegisterClassEx( & wincl ) ) return 0; HMENU hMenu = LoadMenu( hThisInstance, MAKEINTRESOURCE( 200 ) ); hwnd = CreateWindowEx( 0, szClassName, "Code::Blocks Template Windows App", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 544, 375, HWND_DESKTOP, hMenu, hThisInstance, NULL ); ShowWindow( hwnd, nCmdShow ); while( GetMessage( & messages, NULL, 0, 0 ) ) { TranslateMessage( & messages ); DispatchMessage( & messages ); } return messages.wParam; }
LRESULT CALLBACK WindowProcedure( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch( message ) { case WM_DESTROY: PostQuitMessage( 0 ); break; case MENU_INFO: MessageBox( hwnd, "To jest wiadomość.", "Wiadomość", MB_ICONINFORMATION | MB_OKCANCEL ); break; default: return DefWindowProc( hwnd, message, wParam, lParam ); } return 0; } test.rc #include "nagl.h"
200 MENU { POPUP "&Plik" { MENUITEM "&Informacje", MENU_INFO MENUITEM SEPARATOR MENUITEM "&Zamknij", MENU_CLOSE } POPUP "&Kategoria" { MENUITEM "&Przeglądarki internetowe", MENU_PRZEGLADARKA MENUITEM "&Menadżery pobierania", MENU_MENADZERY MENUITEM "&Komunikatory", MENU_KOMUNIKATOR } } nagl.h #define MENU_INFO 100 #define MENU_CLOSE 101 #define MENU_PRZEGLADARKA 111 #define MENU_MENADZERY 112 #define MENU_KOMUNIKATOR 113 @pekfos mam nadzieję że teraz będzie dobrze |
|
pekfos |
» 2013-09-14 22:14:33 MENU_INFO to nie komunikat. Powinieneś tu obsługiwać WM_COMMAND. |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-09-14 22:16:25 A jest jakaś odrębna funkcja do obierania komunikatu z elementów menu ?? |
|
pekfos |
» 2013-09-14 22:18:54 Nie. Komunikaty dotyczące menu odbiera się w procedurze okna. |
|
maniek1310 Temat założony przez niniejszego użytkownika |
» 2013-09-14 22:22:19 Dopiero zauważyłem że edytowałeś post, użyłem WM_COMMAND i działa. Temat można zamknąć. |
|
« 1 » |