Using Window Classes

In Windows, each application must register its own window classes. Your application can register an application local class at any time by using the RegisterClassEx function. You must define the window procedure in the application, fill the members of the WNDCLASSEX structure, and then pass a pointer to the structure to the RegisterClassEx function.

The following example shows how to register a local window class and use it to create your application's main window.

#include <windows.h>

// Global variable

HINSTANCE hinst;

// Function prototypes.

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int);

InitApplication(HINSTANCE);

InitInstance(HINSTANCE, int);

LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);

// Application entry point.

int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,

LPSTR lpCmdLine, int nCmdShow)

{

MSG msg;

if (!InitApplication(hinstance))

return FALSE;

if (!InitInstance(hinstance, nCmdShow))

return FALSE;

while (GetMessage(&msg, (HWND) NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

UNREFERENCED_PARAMETER(lpCmdLine);

}

BOOL InitApplication(HINSTANCE hinstance)

{

WNDCLASSEX wcx;

// Fill in the window class structure with parameters

// that describe the main window.

wcx.cbSize = sizeof(wcx); // size of structure

wcx.style = CS_HREDRAW |

CS_VREDRAW; // redraw if size changes

wcx.lpfnWndProc = MainWndProc; // points to window procedure

wcx.cbClsExtra = 0; // no extra class memory

wcx.cbWndExtra = 0; // no extra window memory

wcx.hInstance = hinstance; // handle of instance

wcx.hIcon = LoadIcon(NULL,

IDI_APPLICATION); // predefined app. icon

wcx.hCursor = LoadCursor(NULL,

IDC_ARROW); // predefined arrow

wcx.hbrBackground = GetStockObject(

WHITE_BRUSH); // white background brush

wcx.lpszMenuName = "MainMenu"; // name of menu resource

wcx.lpszClassName = "MainWClass"; // name of window class

wcx.hIconSm = LoadImage(hinstance, // small class icon

MAKEINTRESOURCE(5),

GetSystemMetrics(SM_CXSMICON),

GetSystemMetrics(SM_CYSMICON),

LR_DEFAULTCOLOR);

// Register the window class.

return RegisterClassEx(&wcx);

}

BOOL InitInstance(HINSTANCE hinstance, int nCmdShow)

{

HWND hwnd;

// Save the application-instance handle.

hinst = hinstance;

// Create the main window.

hwnd = CreateWindow(

"MainWClass", // name of window class

"Sample", // title-bar string

WS_OVERLAPPEDWINDOW, // top-level window

CW_USEDEFAULT, // default horizontal position

CW_USEDEFAULT, // default vertical position

CW_USEDEFAULT, // default width

CW_USEDEFAULT, // default height

(HWND) NULL, // no owner window

(HMENU) NULL, // use class menu

hinstance, // handle of application instance

(LPVOID) NULL); // no window-creation data

if (!hwnd)

return FALSE;

// Show the window and send a WM_PAINT message to the window

// procedure.

ShowWindow(hwnd, nCmdShow);

UpdateWindow(hwnd);

return TRUE;

}

Registering an application global class is similar to registering an application local class, with the following exceptions:

  • The style parameter of the WNDCLASSEX structure must specify the CS_GLOBALCLASS style.

  • The class can be registered by an application or a DLL. If registered by an application, the class is global only within the application. If the class is registered by a DLL and listed in the registry, the system loads the DLL for every application.

  • The application or DLL need not check for a previous instance of the application or DLL before registering the class.

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