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