Platform SDK: Windows User Interface |
The following example shows how to create a class menu for an application, create a window that uses the class menu, and process menu commands in the window procedure.
Following is the relevant portion of the application's header file:
// Menu-template resource identifier #define IDM_MYMENURESOURCE 3
Following are the relevant portions of the application itself:
HINSTANCE hinst; int APIENTRY WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; // message WNDCLASS wc; // windowclass data HWND hwnd; // handle to the main window // Create the window class for the main window. Specify // the identifier of the menu-template resource as the // lpszMenuName member of the WNDCLASS structure to create // the class menu. wc.style = 0; wc.lpfnWndProc = (WNDPROC) MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hinstance; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = GetStockObject(WHITE_BRUSH); wc.lpszMenuName = MAKEINTRESOURCE(IDM_MYMENURESOURCE); wc.lpszClassName = "MainWClass"; if (!RegisterClass(&wc)) return FALSE; hinst = hinstance; // Create the main window. Set the hmenu parameter to NULL so // that the system uses the class menu for the window. hwnd = CreateWindow("MainWClass", "Sample Application", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinstance, NULL); if (hwnd == NULL) return FALSE; // Make the window visible and send a WM_PAINT message to the // window procedure. ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); // Start the main message loop. while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; UNREFERENCED_PARAMETER(hPrevInstance); } LRESULT APIENTRY MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { // Process other window messages. case WM_COMMAND: // Test for the identifier of a command item. switch(LOWORD(wParam)) { case IDM_FI_OPEN: DoFileOpen(); // application-defined break; case IDM_FI_CLOSE: DoFileClose(); // application-defined break; // Process other menu commands. default: break; } return 0; // Process other window messages. default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return NULL; }