Win32 Window with Menu: Notes Code
#include <windows.h> #define IDM_COMMANDS 101 //menu item ID is arbitrarily, but unique #define IDM_ABOUT 105 HWND hwndMain; LRESULT CALLBACK WndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam ); int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow ) { MSG msg; WNDCLASS wc; UNREFERENCED_PARAMETER(lpszCmdLine); wc.style = 0; wc.lpfnWndProc = (WNDPROC) WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon((HINSTANCE) NULL, IDI_APPLICATION); wc.hCursor = LoadCursor((HINSTANCE) NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); wc.lpszMenuName = "MainMenu"; wc.lpszClassName = "MainWndClass"; RegisterClass(&wc); hwndMain = CreateWindow( "MainWndClass", "Win32 Window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, (HWND) NULL, (HMENU) NULL, hInstance, (LPVOID) NULL); ShowWindow(hwndMain, nCmdShow); UpdateWindow(hwndMain); while(GetMessage(&msg, (HWND) NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) { switch( iMsg ) { case WM_CREATE: { HMENU hMenuMain; HMENU hMenuPopup1,hMenuPopup2; hMenuMain = CreateMenu(); hMenuPopup1 = CreatePopupMenu(); AppendMenu (hMenuMain, MF_STRING|MF_POPUP,(UINT)hMenuPopup1,"Commands" ); AppendMenu (hMenuPopup1,MF_STRING, IDM_COMMANDS, "Press Me ..." ); hMenuPopup2 = CreatePopupMenu(); AppendMenu (hMenuMain, MF_STRING|MF_POPUP, (UINT)hMenuPopup2, "Help" ); AppendMenu (hMenuPopup2, MF_STRING, IDM_ABOUT, "About"); SetMenu ( hwnd, hMenuMain ); break; } case WM_PAINT: { //MessageBox( hwnd, "Paint", "Paint", S_OK ); break; } case WM_COMMAND: { HMENU hMenu = GetMenu(hwnd); switch (LOWORD(wParam)) { case IDM_COMMANDS: { DWORD dMenuState = GetMenuState(hMenu, IDM_COMMANDS, MF_BYCOMMAND); if(dMenuState == MF_UNCHECKED) { CheckMenuItem(hMenu, IDM_COMMANDS, MF_BYCOMMAND | MF_CHECKED); } else { CheckMenuItem(hMenu, IDM_COMMANDS, MF_BYCOMMAND | MF_UNCHECKED); } break; } case IDM_ABOUT: { MessageBox(NULL, "You've just clicked About menu item", "Message", MB_OK); break; } } break; } case WM_DESTROY: { MessageBox( hwnd, "Paint", "Paint", S_OK ); PostQuitMessage(0); break; } } return DefWindowProc( hwnd, iMsg, wParam, lParam ); }
(c) 2002, Stan Malevanny