Creating a Class Menu

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, hPrevInstance, lpCmdLine, nCmdShow)

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 Windows 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, uMsg, wParam, lParam)

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;

}

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database